由 NVIDIA cuGraph 加速的 NetworkX 是新发布的与 NetworkX 团队共同开发的后端。NVIDIA cuGraph 为 PageRank、Louvain 和 betweenness centrality 等热门图形算法提供 GPU 加速。根据算法和图形大小,它可以显著加速 NetworkX 工作流程,最高可达 CPU 上的 NetworkX 的 50 倍,甚至 500 倍。
在本文中,我们将详细介绍 NetworkX 及其由 cuGraph 提供支持的新型后端加速器。我们还将讨论如何将 cuGraph 后端用于 NetworkX,加速图形分析工作流程,以及克服 NetworkX 在处理大规模图形时带来的限制。
如果您对图形数据科学领域非常熟悉,那么您可能已经使用了 NetworkX。NetworkX 是当今非常知名的开源图形分析库之一,每月的下载量超过 80M 次(截至 10/24)。自 2005 年首次发布以来,NetworkX 以其易于使用、直观的 API、友好且支持的社区以及广泛的算法而闻名,几乎可以处理各种图形分析用例。
但是 , 如果您负责在实际大小的数据上运行的生产工作流,那么您可能已经意识到,当图形达到一定大小时,必须将 NetworkX 替换为性能更强但也更复杂的图形解决方案。
NetworkX 的纯 Python、单线程实施限制了其扩展能力。许多工作流使用通常超过 100K 个节点和 1M 个边缘的图形,这可能会导致明显的减速,这通常证明完全放弃 NetworkX 是合理的。这些工作负载通常具有高数据卷,以及数百万个实体和关系之间的比较,例如欺诈检测、推荐系统、社交网络分析、供应链优化等。
自 2019 年首次发布以来,cuGraph 开源项目一直在为寻找类似于 NetworkX 的易于使用的 Python 图形分析库的数据科学家构建解决方案。现在,随着 NetworkX 的 cuGraph 后端 (第一个生产就绪型的 GPU 后端) 的添加,您不必离开 NetworkX 体验实质性的速度提升。
解锁速度和规模
NetworkX 的后端由基于 CUDA 的库 cuGraph 提供支持,使运行 cuGraph 支持的算法的 NetworkX 工作流能够根据算法和图形大小查看一系列的加速范围。
您可以看到高达 10 倍的结果,而对于其他算法和更大的图形,处理速度最高可提升 500 倍。由此产生的加速不仅能更快地生成结果,而且还能解锁以前被认为不适合 NetworkX 的用例。
现在,借助由 NVIDIA cuGraph 加速的 NetworkX,图形数据科学家最终可以大规模地获得易用性和速度。
零代码更改 GPU 加速
NVIDIA cuGraph 通过其后端调度系统加速 NetworkX,该系统为 NetworkX 使用第三方加速器提供了标准机制。
使用 pip
或 conda
包管理器安装 cuGraph 后端 nx-cugraph
,或在配备 NVIDIA GPU 的系统上从源安装。后端通过环境变量激活,该变量启用 NetworkX 自动功能分配,从而使 NetworkX 将支持的算法发送到 GPU 后端,并将所有其他算法发送到 CPU 上的默认 NetworkX 实现。
因此,数据科学家使用的许多常见图形算法均可实现自动 GPU 加速,无需更改代码,也无需针对缺失的功能采取变通方案:
pagerank
betweenness_centrality
louvain_communities
shortest_path
- 还有更多,总计约 60 个
您无需修改工作流程,即可在大型图形数据上看到巨大的速度提升,而这通常会使未加速的 NetworkX 几乎无法使用。这些相同的工作流程也可用于非 GPU 系统,在进行原型设计和实验时允许使用较小的数据和较长的运行时间。
在命令行中,您可以通过在 shell 中设置环境变量来体验 GPU 加速,启用 cuGraph 后,相同算法调用的运行速度几乎提高了 87 倍。
文件: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 demo.ipy
CPU times: user 7min 36s, sys: 5.22 s, total: 7min 41s
Wall time: 7min 41s
user@machine:/# NX_CUGRAPH_AUTOCONFIG=True ipython demo.ipy
CPU times: user 4.14 s, sys: 1.13 s, total: 5.27 s
Wall time: 5.32 s
- 软件: NetworkX 3.4.1,cuGraph/nx-cugraph 24.10
- CPU: 英特尔至强金牌 6128 CPU@3.40 GHz 45GB RAM
- GPU: NVIDIA Quadro RTX 8000 50GB RAM
在 Notebook 中,在初始 networkx
导入之前的任意位置使用 %env
魔法设置环境变量:
%env NX_CURGAPH_AUTOCONFIG=True
import networkx as nx
大大小小的图形工作负载
NetworkX 的灵活性在其他图形分析库中无可比拟,由此产生的性能可用于教学、原型设计和通常较小的问题。
但是,随着生成的数据量不断增长,超过 100K 个节点和 1M 个边缘的图形变得越来越常见,预计到 2027 年, 企业将产生 20 ZB 的数据 。NetworkX 的 cuGraph 后端让您既易于使用,又能快速开发所需的性能。
图形可以使用现代工作负载中的大量多模态数据来丰富上下文和深度分析。在某些用例中,由 cuGraph 加速的 NetworkX 是理想选择,涉及大规模图形和快速处理需求,超出了基于 CPU 的 NetworkX 的范围。
由 GPU 加速提升的图算法可以应用于社区或欺诈检测系统或基于数百万消费者及其与数千万消费者资料、交易模式和库存数据点的关系的推荐系统等用例。
以下示例展示了使用由 cuGraph 加速的 NetworkX 实现的加速。
Louvain 社区检测在好莱坞演员的大型网络图上运行,以查找一起出现在电影中的演员(1M 个节点,58M 个边缘),比 CPU 上的 NetworkX 快 60 倍。
用于计算美国专利引文图(400 万个节点,1600 万个边缘)值的 PageRank 算法比 CPU 上的 NetworkX 快 70 倍
Betweenness-centrality 算法用于计算 Live Journal 社交网络(5M nodes, 69M edges, k=100)值比 CPU 上的 NetworkX 快 485 倍。
本文中的所有基准测试都使用了以下配置:
- 软件: NetworkX 3.4.1,cuGraph/nx-cugraph 24.10
- CPU: 英特尔至强 w9-3495X (56 核) 250GB
- GPU: NVIDIA A100 80-GB
有关基准测试代码的更多信息,请参阅 /rapidsai/cugraph GitHub 库。
结束语
虽然 NetworkX 因其是最热门的图形分析库而广受好评,但您仍然需要与现代工作流程保持同步的性能,尤其是在工作流程变得越来越复杂且数据集不断快速增长的情况下。
借助单个环境变量,您可以使用 cuGraph/nx-cugraph 软件包,使用 NVIDIA cuGraph 将 NetworkX 加速高达 500 倍,以处理现代工作负载,而无需离开 NetworkX 的灵活性和易用性。
现在,您可以在 Google Colab 上托管的 NetworkX – Easy Graph Analytics 测试笔记本中亲自体验,也可以探索使用 vs. 不使用 nx-cugraph 的 Running Pagerank 端到端演示,运行于维基百科上 。
有关更多信息,请参阅以下资源:
- RAPIDS cuGraph
- 加速 NetworkX:轻松图形分析的未来 (GTC 会议)
- 无需更改代码即可加速数据科学工作流程 (DLI 自定进度课程)
- 加速数据科学基础知识 (Accelerated Data Science Fundamentals,DLI 讲师指导式研讨会)