RAPIDS 是一套用于 Python 数据科学的 NVIDIA CUDA-X 库,发布了 25.06 版本,引入了令人兴奋的新功能。其中包括 Polars GPU 流引擎、用于图形神经网络 (GNN) 的统一 API,以及用于支持向量机的加速 (无需更改代码) 。在这篇博文中,我们将探讨其中一些更新。
Polars GPU 引擎更新
2024 年 9 月,我们与 Polars 团队合作推出了基于 NVIDIA cuDF 构建的 Polars GPU 引擎。25.06 版本对 Polars GPU 引擎功能进行了一些重大更新。
流式传输执行器现已在实验中可用
在 25.06 版本中,我们在 Polars GPU 引擎中引入了流式传输执行。流式传输执行程序利用数据分区和并行处理,支持在大于 VRAM 的数据集上执行。要使用此新的流式传输执行程序,用户可以将适当配置的 GPUEngine 对象传递给 Polars collect
调用:
streaming_engine = GPUEngine(
executor="streaming",
executor_options={"scheduler": "synchronous"}
)
result = query.collect(engine=streaming_engine)
这种新的流式传输模式还使用户能够将数据处理工作流扩展到多个 GPU。这有助于加速从数百 GB 扩展到 TB 的数据集的分析操作。对于需要在分区之间移动数据的操作 (例如 join 和 groupbys) ,新的 shuffle 机制可处理在设备之间重新分发数据。多 GPU 执行通过 Dask 分布式调度程序进行编排,需要先设置 Dask 客户端:
from dask_cuda import LocalCUDACluster
from dask.distributed import Client
client = Client(LocalCUDACluster())
multi_gpu_streaming = GPUEngine(
executor="streaming",
executor_options={"scheduler": "distributed"}
)
result = query.collect(engine=multi_gpu_streaming)
流式传输执行程序目前正在积极开发中,不受支持的操作将回退到使用内存中的执行程序。如需了解更多信息,请查看我们最近的博客和 NVIDIA GTC 巴黎讲座。
支持滚动聚合和更多列操作
最新版本还支持 Polars GPU 引擎中的一些关键新 DataFrame 功能。首先,我们在 Polars 中添加了对 .rolling()
运算的支持,允许用户基于其 Dataframe 中的其他列创建滚动组。在处理时间序列数据集时,这尤其有用。
dates = [
"2025-01-01 13:45:48",
"2025-01-01 16:42:13",
"2025-01-01 16:45:09",
"2025-01-02 18:12:48",
"2025-01-03 19:45:32",
"2025-01-08 23:16:43",
]
df = (
pl.DataFrame({"dt": dates, "a": [3, 7, 5, 9, 2, 1]})
.with_columns(pl.col("dt").str.strptime(pl.Datetime()))
.lazy()
)
query = (
df.rolling(index_column="dt", period="2d")
.agg(
pl.sum("a").alias("sum_a"),
pl.min("a").alias("min_a"),
pl.max("a").alias("max_a"),
)
)
query.collect(engine="gpu")
此外,GPU 引擎现在还支持更多用于操作日期时间列的表达式。现在支持的新方法包括 .strftime()
和 .cast_time_unit()
,随着我们继续扩大整体 API 覆盖范围,我们计划在即将发布的版本中使用更多方法。
适用于 GNN 的统一 API
NVIDIA cuGraph-PyG 进一步集成了用于加速特征获取的 WholeGraph,创建了我们所说的统一 API。这种新 API 现在使用户能够在单 GPU 工作流中使用 WholeGraph 的加速功能存储,同时无需修改多 GPU 或多节点工作流的脚本。
借助统一 API,用于在单个 GPU 上进行原型设计的相同 GNN 训练脚本可在具有多个 GPU 的单个节点和多个节点上运行。PyTorch 的 torchrun
命令用于管理进程设置,使大多数 PyTorch 用户都熟悉 Unified API。
查看我们的示例,了解如何开始。
零代码更改 cuML 增强功能
今年 3 月,我们推出了用于 scikit-learn 的零代码更改加速器,该加速器由 cuML 提供支持,现已推出公测版。随着 25.06 版本的发布,cuML 为用户带来了更多的零代码更改功能。
支持无需更改代码的向量机
NVIDIA cuML 通过添加支持向量机扩展了零代码更改加速功能。支持向量分类 (SVC) 和支持向量回归 (SVR) 是一种功能强大的算法,可以很好地处理高维数据,并且在 GPU 上执行时可以看到显著的加速。将这些估算器添加到 cuML 的零代码更改接口后,利用支持向量机的现有 scikit-learn 工作流现在无需进行任何修改即可加速。请注意,用户应了解 SVC 和 SVR 的 cuML 和 scikit-learn 实现之间的一些关键差异。
如需详细了解 cuML 对各种算法的零代码更改支持,请访问我们的文档。
改进了 scikit-learn 兼容性
25.06 版本还包含一项重要的内部设计,重新设计了 cuML 加速 scikit-learn 估计器的方式。这一变化增强了 scikit-learn 奇偶校验,实现了更好的参数验证并改进了错误处理。此外,通过重新设计,cuML 增强了与 scikit-learn API 的兼容性,从而更轻松地加速目前与 scikit – learn 集成的第三方库。
随机森林与更新的森林推理库集成
cuML 的随机森林估算器 (RandomForestRegressor 和 RandomForestClassifier) 通过集成速度更快、更可靠的森林推理库 (FIL) 而获得升级。此实施可提供更高的性能和更好的内存管理,同时保持向后兼容性。
用户应注意,一些特定于先前实现的当前 API 旋钮现已弃用,并将在即将发布的 25.08 版本中删除。
RAPIDS Memory Manager 与 NVIDIA Blackwell 解压缩引擎的兼容性
RAPIDS Memory Manager (RMM) 库增加了新功能,以确保用户可以访问最新的 NVIDIA 硬件功能。在我们的最新版本中,RMM 异步内存资源增加了对兼容 NVIDIA Blackwell GPU 上基于硬件的解压缩引擎的支持。借助新的解压缩引擎,用户可以在 IO 密集型工作流程中看到性能提升。
此外,RMM 现在是一个预编译的共享库,而不是仅包含头文件的库。我们预计,这一变化将在未来解锁新功能。
平台更新:Python 和 NVIDIA CUDA 支持
25.06 版本为所有 RAPIDS 库增加了对 Python 3.13 的支持,也是支持 CUDA 11 的最终版本。从 25.08 RAPIDS 版本开始,CUDA 11 将被删除。希望继续使用 CUDA 11 的用户可以使用 25.06。RSN 48 对此进行了记录。
总结
RAPIDS 25.06 版本为新的机器学习算法、新的 Polars GPU 流式传输引擎、异步内存资源的硬件解压缩功能等带来零代码更改功能。
欢迎您在 GitHub 上提供反馈。您还可以加入 RAPIDS Slack 社区的 3500 多名成员,讨论 GPU 加速的数据处理。
如果您不熟悉 RAPIDS,请查看这些资源以开始使用。如需了解有关加速数据科学的更多信息,请探索我们的 DLI 学习路径并注册实战课程。