工作原理#
NetworkX 具有将**函数调用调度到单独安装的第三方后端**的能力。
NetworkX 后端允许用户在不更改其 NetworkX Python 代码的情况下体验改进的性能和/或附加功能。示例包括使用 GPU 加速算法、并行处理、图数据库集成等的后端。
虽然 NetworkX 是一个纯 Python 实现,但后端可以使用其他库甚至专用硬件编写。nx-cugraph
是一个 NetworkX 后端,它使用 RAPIDS cuGraph 和 NVIDIA GPU 显著提高 NetworkX 性能。
启用 nx-cugraph#
建议使用 networkx>=3.4
以获得最佳的零代码更改性能,但 nx-cugraph
也适用于 networkx 3.2+
。
如果使用以下任一方法,NetworkX 将使用 nx-cugraph
作为后端:
NX_CUGRAPH_AUTOCONFIG
环境变量。#
NX_CUGRAPH_AUTOCONFIG
环境变量可用于配置 NetworkX,以便使用 nx-cugraph
实现完全的零代码更改加速。如果调用的 NetworkX 函数是 nx-cugraph
支持的,NetworkX 将自动把函数调用重定向到 nx-cugraph
,如果启用了其他后端则回退到其他后端,或者回退到默认的 NetworkX 实现。有关手动配置 NetworkX 的信息,请参阅NetworkX 关于后端配置的文档。
bash> NX_CUGRAPH_AUTOCONFIG=True python my_networkx_script.py
backend=
关键字参数#
要为特定 API 显式指定后端,请使用 backend=
关键字参数。此参数优先于 NX_CUGRAPH_AUTOCONFIG
环境变量。使用 backend=
关键字参数的任何运行代码都需要安装指定的后端。
示例
nx.betweenness_centrality(cit_patents_graph, k=k, backend="cugraph")
基于类型的调度#
NetworkX 还支持自动将调用调度到与特定图类型关联的后端。与上面的 backend=
关键字参数示例一样,这要求用户为特定后端编写代码,因此需要安装该后端,但这具有无需运行时转换即可确保特定行为的优点。
要使用基于类型的调度与 nx-cugraph
一起工作,用户必须直接在代码中导入后端,以访问用于专门为 nx-cugraph
后端创建 Graph 实例的实用程序。
示例
import networkx as nx
import nx_cugraph as nxcg
G = nx.Graph()
# populate the 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
命令行示例#
创建文件 bc_demo.ipy
并粘贴以下代码。
import pandas as pd
import networkx as nx
url = "https://data.rapids.ai/cugraph/datasets/cit-Patents.csv"
df = pd.read_csv(url, sep=" ", names=["src", "dst"], dtype="int32")
G = nx.from_pandas_edgelist(df, source="src", target="dst")
%time result = nx.betweenness_centrality(G, k=10)
运行命令
user@machine:/# ipython bc_demo.ipy
CPU times: user 7min 36s, sys: 5.22 s, total: 7min 41s
Wall time: 7min 41s
你将观察到运行时间约为 7 分钟……具体取决于你的 CPU,可能会有上下浮动。
再次运行命令,这次指定 cugraph 作为 NetworkX 后端。
user@machine:/# NX_CUGRAPH_AUTOCONFIG=True ipython bc_demo.ipy
CPU times: user 4.14 s, sys: 1.13 s, total: 5.27 s
Wall time: 5.32 s
这次运行将快得多,通常约为 5 秒,具体取决于你的 GPU。
注意,上面的示例是在以下配置下运行的::
NetworkX 版本: 3.4
nx-cugraph 版本: 24.10
CPU: Intel(R) Xeon(R) Gold 6128 CPU @ 3.40GHz 45GB RAM
GPU: NVIDIA Quadro RTX 8000 80GB RAM