• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 數據科學

    NetworkX 使用 NVIDIA cuGraph 實現零代碼更改加速

    由 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 使用第三方加速器提供了標準機制。

    使用 pipconda 包管理器安裝 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
     
    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 倍。

    Horizontal bar chart showing Louvain community detection algorithm run on a large network graph of Hollywood actors to find those appearing in movies together (1M nodes, 58M edges) is 60x faster than NetworkX on CPU.
    圖 1. Louvain 社區檢測算法在好萊塢演員的大型網絡圖上運行,以找到一起出演電影的演員。

    用于計算美國專利引文圖(400 萬個節點,1600 萬個邊緣)值的 PageRank 算法比 CPU 上的 NetworkX 快 70 倍

    Horizontal bar chart showing PageRank algorithm used to compute values for a citation graph of U.S. patents (4M nodes, 16M edges) is 70x faster than NetworkX on CPU.
    圖 2. 用于計算美國專利引文圖值的 PageRank 算法

    Betweenness-centrality 算法用于計算 Live Journal 社交網絡(5M nodes, 69M edges, k=100)值比 CPU 上的 NetworkX 快 485 倍。

    Horizontal bar chart showing betweenness centrality algorithm used to compute values for the Live Journal social network (5M nodes, 69M edges, k=100) is 485x faster than NetworkX on CPU.
    圖 3. 使用 Betweenness centrality 算法計算 Live Journal 社交網絡值

    本文中的所有基準測試都使用了以下配置:

    • 軟件: 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 端到端演示,運行于維基百科上

    有關更多信息,請參閱以下資源:

    ?

    0

    標簽

    人人超碰97caoporen国产