Skip to content

rlratzel/nx-cugraph

 
 

Repository files navigation

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.4-11.8 or 12.0-12.5
  • Python version 3.10, 3.11, or 3.12
  • NetworkX >= version 3.0 (version 3.4 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:

NX_CUGRAPH_AUTOCONFIG environment variable.

By setting NX_CUGRAPH_AUTOCONFIG=True, NetworkX will automatically dispatch algorithm calls to nx-cugraph (if the backend is supported). This allows users to GPU accelerate their code with zero code change.

Read more on Networkx Backends and How They Work.

Example:

bash> NX_CUGRAPH_AUTOCONFIG=True 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 NX_CUGRAPH_AUTOCONFIG 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.

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
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.

About

GPU Accelerated Backend for NetworkX

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 89.1%
  • Jupyter Notebook 6.7%
  • Shell 4.1%
  • Makefile 0.1%