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 倍的加速。
您可以在 文档中 详细了解由 cuGraph 加速的 NetworkX,并在 此处 探索上述基准测试的代码。
零代码更改加速 Polars (公测版)
9 月,由 cuDF 提供支持的 Polars GPU 引擎发布了公开测试版。在 Polars 中提供了 GPU 支持,用户可以访问工作流的速度最高可提升 13 倍,且无需更改代码,相比在 CPU 上运行。
用户可以直接在 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
关键字传递至 fit
或 fit_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。
然后,您可以使用 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,请查看 这些资源 以开始使用。