数据科学

NVIDIA RAPIDS 24.10 版本发布零代码修改加速 NetworkX 和 UMAP 及 cuDF-Pandas 新功能

RAPIDS v24.10 版本 在为数据科学家和开发者提供无缝用户体验方面又向前迈出了一步。这篇博文重点介绍了以下新功能:

  • 零代码更改加速的 NetworkX 现已正式推出(GA)
  • Polars GPU 引擎 (公测版)
  • 将 UMAP 引入大于 GPU 的内存数据集
  • 改进了 cuDF pandas 与 NumPy 和 PyArrow 的兼容性。
  • 将 GPU 集成到基于 GitHub 的 CI 系统的指南
  • RAPIDS 范围内对 Python 3.12 和 NumPy 2.x 的支持

零代码更改加速 NetworkX 

从 NetworkX 3.4 开始,由 RAPIDS cuGraph 加速的 NetworkX 现已在 24.10 版本中正式发布。该版本增加了 GPU 加速的图形创建、新的用户体验和 扩展文档

加速图形构建可实现 NetworkX 工作流程的全面端到端加速,对于 CPU 和 GPU 之间的转换可能会降低性能的大型图形工作流程尤其重要。

现在,通过将 NX_CUGRAPH_AUTOCONFIG 环境变量设置为 True,可以启用完整的端到端加速 NetworkX 体验。

%env NX_CURGAPH_AUTOCONFIG=True

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)

端到端加速使使用 betweenness centrality、PageRank 等算法的工作流程能够在更大的图形上体验高达 10 倍、50 倍甚至 500 倍的加速。

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.
图 1 、在美国专利引文图(4M 个节点,16M 个边缘)上运行的 PageRank 算法比 CPU 上的 NetworkX 快 70 倍;软件:NetworkX 3.4.1,cuGraph/nx-cugraph 24.10;GPU:NVIDIA A100 80GB;CPU:Intel Xeon w9-3495X(56 核)250GB
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.
图 2 、当样本数(k)设置为 100 时,在 Live Journal 社交网络(5M 个节点,69M 条边)上运行的间隔中心算法的速度比 CPU 上的 NetworkX 快 485 倍。SW:NetworkX 3.4.1,cuGraph/nx-cugraph 24.10;GPU:NVIDIA A100 80GB;CPU:Intel Xeon w9-3495X(56 核)250GB

您可以在 文档中 详细了解由 cuGraph 加速的 NetworkX,并在 此处 探索上述基准测试的代码。

零代码更改加速 Polars (公测版)

9 月,由 cuDF 提供支持的 Polars GPU 引擎发布了公开测试版。在 Polars 中提供了 GPU 支持,用户可以访问工作流的速度最高可提升 13 倍,且无需更改代码,相比在 CPU 上运行。

A bar chart comparing query execution times between Polars CPU and Polars GPU engines across 22 queries. The y-axis shows execution time in seconds from 0 to 45. Most GPU bars are significantly shorter than their CPU counterparts, indicating faster performance. The title states "Accelerate Polars workflows up to 13x”. Additional notes provide benchmark details including scale factor, hardware specs, and a disclaimer about comparability to TPC-H results.
图 3. 这是 PDS-H 基准测试中对一组 22 个查询实现的四项最佳加速。与 CPU 相比,由 RAPIDS cuDF 驱动的 Polars GPU 引擎可在处理涉及许多复杂分组和连接操作的查询时提供高达 13 倍的速度提升。PDS-H 基准测试扩展系数 80 | GPU:NVIDIA H100 | CPU:Intel Xeon W9-3495X (Sapphire Rapids) | 存储:本地 NVMe。注意:PDS-H 源自 TPC-H,但这些结果无法与 TPC-H 结果进行比较。

用户可以直接在 Polars Lazy API 中构建,将 Polars 配置为在触发计算时使用 GPU,将 `engine` 关键字配置为 `collect`。

import polars as pl

df = pl.LazyFrame({"a": [1.242, 1.535]})
q = df.select(pl.col("a").round(1))
result = q.collect(engine="gpu")

如需了解详情,请阅读 NVIDIA Polars 公告博客或深入了解 Polars GPU 支持文档 。或者,直接进入 Google Colab notebook 进行试用。

将 UMAP 引入大于 GPU 的内存数据集 

从 v24.10 开始,cuML 的 UMAP 算法现在支持处理大于 GPU 内存的数据集,而这在早期版本中可能会导致内存不足错误。通过使用 新的分批式近似近邻算法 并可选地将完整数据集存储在 CPU 内存中,我们能够构建近似 KNN 图形,同时在任何给定时间仅处理 GPU 上的数据子集。

用户可以将新的 nnd_n_clusters 关键字设置为大于 1 的任何值(默认值),并(如有必要)将 data_on_host=True 关键字传递至 fitfit_transform,从而利用此新的可选功能。

from cuml.manifold import UMAP
import numpy as np

# Generate synthetic data using numpy (random float32 matrix)
X = np.random.rand(n_samples, n_features).astype(np.float32)

# UMAP parameters
num_clusters = 4  # Number of clusters for NN Descent batching, 1 means no clustering
data_on_host = True  # Whether the data is stored on the host (CPU)

# UMAP model configuration
reducer = UMAP(
    n_neighbors=10,
    min_dist=0.01,
    build_algo="nn_descent",
    build_kwds={"nnd_n_clusters": num_clusters},
)

# Fit and transform the data
embeddings = reducer.fit_transform(X, data_on_host=data_on_host)

用户可以从 n_clusters(例如 4) 的初始值开始,并根据需要增加该值,以管理 GPU 内存使用情况。设置值过高可能会因图形构建的多次迭代而导致性能开销,因此最好根据数据集的大小和可用的 GPU 内存来寻求平衡。

改进了 cuDF pandas 生态系统兼容性 

改进了代码兼容性 

cuDF 的 pandas 加速器模式现在与 NumPy 数组完全兼容。以前,对 pandas API 生成的 NumPy 数组运行 Python isinstance 检查,在使用 cuDF pandas 时返回 False,在使用标准 pandas 时返回 True。由于这是一个常见的代码设计模式,一些用户工作流程需要变通方案才能顺利运行。

从 v24.10 开始,当加速器模式处于活动状态且用户尝试将 DataFrame 或列转换为数组时,cudf.pandas 现在可在功能上生成真正的 NumPy 数组 —— 消除了这个问题。例如:

%load_ext cudf.pandas
import pandas as pd
import numpy as np

arr = pd.Series([1, 2, 3]).values # now returns a true numpy array
isinstance(arr, np.ndarray) # returns True

此更改还使依赖 NumPy C API 的代码能够与 cuDF pandas 顺畅协作。

改进箭头兼容性 

cuDF 现在还支持一系列 PyArrow 版本。Arrow 兼容性一直是 cuDF 用户的痛点。到目前为止,由于我们使用 Arrow C++ API 以及对二进制兼容性的要求,cuDF 的每个版本都与非常特定的 Arrow 版本相关联。

在此版本中,我们重写了这些功能,仅使用 Arrow C 数据接口,这反过来又使我们完全停止使用 Arrow C++。通过这一更改,cuDF Python 现在可以支持自 PyArrow 4 以来的任何 PyArrow 版本。

将 GPU 集成到基于 GitHub 的 CI 系统的指

我们从社区了解到,找到一种简单有效的方法将 GPU 整合到基于 GitHub 的 CI 系统中可能很有挑战性。根据 scikit-learn 团队 的经验, RAPIDS 部署文档 中添加了有效执行此操作的新指南。

GitHub Actions 现已支持 托管的 GPU 运行程序 。这意味着 GitHub 上的任何项目都可以在其持续集成(CI)工作负载中利用 NVIDIA 的 GPU 进行测试。这使得项目更容易与 RAPIDS 库集成,并在本地测试更改是否兼容,而无需在本地拥有 GPU 硬件。

GPU 托管的运行者不包含在 GitHub Action 免费试用活动中。使用 GPU 的运行者 每分钟的成本通常为几美分 ,项目可以添加每月支出上限,以帮助控制成本。

要设置 GPU 运行器,请导航至组织设置的“GitHub Actions”部分,并添加新的运行器。然后,选择 NVIDIA 合作伙伴图像,并将“Size”更改为由 GPU 提供支持的 VM,为您的运行器提供 GPU。

creenshot showing the setup interface for creating a new GitHub Actions GPU runner. Fields include the runner's name, 'linux-nvidia-gpu,' with a 'Linux x64' platform selected. The image option displays 'Partner, NVIDIA GPU-Optimized Image for AI and HPC,' and size is set to 'GPU-powered' with specifications: '1 x NVIDIA T4 | 4-core | 16 GB VRAM | 176 GB SSD.' The 'Maximum concurrency' is configured to '50,' indicating the runner’s capability for concurrent tasks.
图 4、用于创建新 GitHub Actions GPU 运行器的设置界面。

然后,您可以使用 runs-on 选项配置工作流,以使用新的 runners。

name: GitHub Actions GPU Demo
run-name: ${{ github.actor }} is testing out GPU GitHub Actions
on: [push]
jobs:
  gpu-workflow:
    runs-on: linux-nvidia-gpu
    steps:
      - name: Check GPU is available
        run: nvidia-smi

有关设置 GitHub Actions GPU 驱动的工作流程的更多详细信息,请参阅 RAPIDS 部署文档 ,该文档还包含有关何时运行 GPU CI 的最佳实践,以便物尽其用。

scikit-learn 项目最近在 GitHub Actions 上设置了 GPU 运行程序,使用标签在选定的 PR 上手动触发 GPU 工作流。查看 他们的博客文章 ,了解他们的经验。

RAPIDS 平台更新 

在 24.10 中,RAPIDS 软件包接收了一些重要更新,可与其他科学计算软件的更新版本一起使用。软件包现在支持 Python 3.10-3.12 以及 NumPy 1.x 和 2.x。它们现在还支持 fmt 11 和 spdlog 1.14,这些库的版本现已用于 conda-forge 的大部分版本。作为这些增强功能的一部分,此版本还取消了对 Python 3.9 或版本低于 2.19 的 NCCL 的支持。

结束语 

RAPIDS 24.10 版本进一步推进了我们的使命,即让数据科学家和工程师更容易使用加速计算。我们迫不及待地想知道人们将如何使用这些新功能。

如果您不熟悉 RAPIDS,请查看 这些资源 以开始使用。

 

标签