cugraph backend for NetworkX
Project description
nx-cugraph
Description
RAPIDS nx-cugraph is a backend to NetworkX to run supported algorithms with GPU acceleration.
System Requirements
nx-cugraph requires the following:
- NVIDIA GPU, Volta architecture or later, with compute capability 7.0+
- CUDA 11.2, 11.4, 11.5, 11.8, or 12.0
- Python version 3.9, 3.10, or 3.11
- NetworkX >= version 3.0 (version 3.2 or higher recommended)
More details about system requirements can be found in the RAPIDS System Requirements documentation.
Installation
nx-cugraph can be installed using either conda or pip.
conda
latest nightly version
conda install -c rapidsai-nightly -c conda-forge -c nvidia nx-cugraph
latest stable version
conda install -c rapidsai -c conda-forge -c nvidia nx-cugraph
pip
latest nightly version
python -m pip install nx-cugraph-cu11 --extra-index-url https://pypi.anaconda.org/rapidsai-wheels-nightly/simple
latest stable version
python -m pip install nx-cugraph-cu11 --extra-index-url https://pypi.nvidia.com
Notes:
- The pip example above installs for CUDA 11. To install for CUDA 12, replace
-cu11
with-cu12
- Additional information relevant to installing any RAPIDS package can be found here.
Enabling nx-cugraph
NetworkX will use nx-cugraph as the graph analytics backend if any of the following are used:
NETWORKX_AUTOMATIC_BACKENDS
environment variable.
The NETWORKX_AUTOMATIC_BACKENDS
environment variable can be used to have NetworkX automatically dispatch to specified backends an API is called that the backend supports.
Set NETWORKX_AUTOMATIC_BACKENDS=cugraph
to use nx-cugraph to GPU accelerate supported APIs with no code changes.
Example:
bash> NETWORKX_AUTOMATIC_BACKENDS=cugraph python my_networkx_script.py
backend=
keyword argument
To explicitly specify a particular backend for an API, use the backend=
keyword argument. This argument takes precedence over the
NETWORKX_AUTOMATIC_BACKENDS
environment variable. This requires anyone
running code that uses the backend=
keyword argument to have the specified
backend installed.
Example:
nx.betweenness_centrality(cit_patents_graph, k=k, backend="cugraph")
Type-based dispatching
NetworkX also supports automatically dispatching to backends associated with
specific graph types. Like the backend=
keyword argument example above, this
requires the user to write code for a specific backend, and therefore requires
the backend to be installed, but has the advantage of ensuring a particular
behavior without the potential for runtime conversions.
To use type-based dispatching with nx-cugraph, the user must import the backend directly in their code to access the utilities provided to create a Graph instance specifically for the nx-cugraph backend.
Example:
import networkx as nx
import nx_cugraph as nxcg
G = nx.Graph()
...
nxcg_G = nxcg.from_networkx(G) # conversion happens once here
nx.betweenness_centrality(nxcg_G, k=1000) # nxcg Graph type causes cugraph backend
# to be used, no conversion necessary
Supported Algorithms
The nx-cugraph backend to NetworkX connects pylibcugraph (cuGraph's low-level python interface to its CUDA-based graph analytics library) and CuPy (a GPU-accelerated array library) to NetworkX's familiar and easy-to-use API.
Below is the list of algorithms that are currently supported in nx-cugraph.
Algorithms
bipartite └─ generators └─ complete_bipartite_graph centrality ├─ betweenness │ ├─ betweenness_centrality │ └─ edge_betweenness_centrality ├─ degree_alg │ ├─ degree_centrality │ ├─ in_degree_centrality │ └─ out_degree_centrality ├─ eigenvector │ └─ eigenvector_centrality └─ katz └─ katz_centrality cluster ├─ average_clustering ├─ clustering ├─ transitivity └─ triangles community └─ louvain └─ louvain_communities components ├─ connected │ ├─ connected_components │ ├─ is_connected │ ├─ node_connected_component │ └─ number_connected_components └─ weakly_connected ├─ is_weakly_connected ├─ number_weakly_connected_components └─ weakly_connected_components core ├─ core_number └─ k_truss dag ├─ ancestors └─ descendants isolate ├─ is_isolate ├─ isolates └─ number_of_isolates link_analysis ├─ hits_alg │ └─ hits └─ pagerank_alg └─ pagerank operators └─ unary ├─ complement └─ reverse reciprocity ├─ overall_reciprocity └─ reciprocity shortest_paths ├─ generic │ ├─ has_path │ ├─ shortest_path │ └─ shortest_path_length ├─ unweighted │ ├─ all_pairs_shortest_path │ ├─ all_pairs_shortest_path_length │ ├─ bidirectional_shortest_path │ ├─ single_source_shortest_path │ ├─ single_source_shortest_path_length │ ├─ single_target_shortest_path │ └─ single_target_shortest_path_length └─ weighted ├─ all_pairs_bellman_ford_path ├─ all_pairs_bellman_ford_path_length ├─ all_pairs_dijkstra ├─ all_pairs_dijkstra_path ├─ all_pairs_dijkstra_path_length ├─ bellman_ford_path ├─ bellman_ford_path_length ├─ dijkstra_path ├─ dijkstra_path_length ├─ single_source_bellman_ford ├─ single_source_bellman_ford_path ├─ single_source_bellman_ford_path_length ├─ single_source_dijkstra ├─ single_source_dijkstra_path └─ single_source_dijkstra_path_length traversal └─ breadth_first_search ├─ bfs_edges ├─ bfs_layers ├─ bfs_predecessors ├─ bfs_successors ├─ bfs_tree ├─ descendants_at_distance └─ generic_bfs_edges tree └─ recognition ├─ is_arborescence ├─ is_branching ├─ is_forest └─ is_tree
Generators
classic ├─ barbell_graph ├─ circular_ladder_graph ├─ complete_graph ├─ complete_multipartite_graph ├─ cycle_graph ├─ empty_graph ├─ ladder_graph ├─ lollipop_graph ├─ null_graph ├─ path_graph ├─ star_graph ├─ tadpole_graph ├─ trivial_graph ├─ turan_graph └─ wheel_graph community └─ caveman_graph ego └─ ego_graph small ├─ bull_graph ├─ chvatal_graph ├─ cubical_graph ├─ desargues_graph ├─ diamond_graph ├─ dodecahedral_graph ├─ frucht_graph ├─ heawood_graph ├─ house_graph ├─ house_x_graph ├─ icosahedral_graph ├─ krackhardt_kite_graph ├─ moebius_kantor_graph ├─ octahedral_graph ├─ pappus_graph ├─ petersen_graph ├─ sedgewick_maze_graph ├─ tetrahedral_graph ├─ truncated_cube_graph ├─ truncated_tetrahedron_graph └─ tutte_graph social ├─ davis_southern_women_graph ├─ florentine_families_graph ├─ karate_club_graph └─ les_miserables_graph
Other
classes └─ function └─ is_negatively_weighted convert ├─ from_dict_of_lists └─ to_dict_of_lists convert_matrix ├─ from_pandas_edgelist └─ from_scipy_sparse_array relabel ├─ convert_node_labels_to_integers └─ relabel_nodes
To request nx-cugraph backend support for a NetworkX API that is not listed above, visit the cuGraph GitHub repo.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file nx_cugraph_cu11-24.8.0.tar.gz
.
File metadata
- Download URL: nx_cugraph_cu11-24.8.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6ee0c90f0effec64de5659ed46cf1ddeba7e89004eb2be4157865ab61b88e14 |
|
MD5 | 093d0962786457b0f13f75fd7d42fe1c |
|
BLAKE2b-256 | 0abc7e195d0c09bd769f5fb7e6e26920445bc72a98666064859c24e9c1e01a79 |