数据科学

RAPIDS 实现零代码更改加速、IO 性能提升和核外 XGBoost 加速

在过去的两个版本中,RAPIDS 为 Python 机器学习引入了零代码更改加速、巨大的 IO 性能提升、大于内存的 XGBoost 训练、更好的用户体验,以及更具可扩展性的 ETL。

我们在 NVIDIA GTC 25 上重点介绍了其中一些更新和公告。在本文中,您可以了解一些亮点。

NVIDIA cuML 为 scikit-learn 等提供零代码更改加速

 

Bar chart comparing the performance of cuml-accel to scikit-learn
图 1:GPU 上的 cuML 加速与 CPU 上的 scikit-learn、UMAP 和 hdbscan 的对比

这种适用于 cuML 的新 UX 使数据科学家能够继续使用熟悉的 PyData API,同时自动使用 NVIDIA GPU 实现显著的性能提升,具体速度可提升 5-175 倍,具体取决于算法和数据集,如图 1 所示。

要开始使用这项新功能,只需加载 IPython 扩展程序,然后再导入标准 CPU 机器学习库。

%load_ext cuml.accel
 
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
 
X, y = make_classification(n_samples=500000, n_features=100, random_state=0)
rf = RandomForestClassifier(n_estimators=100, random_state=0, n_jobs=-1)
rf.fit(X, y)

如需详细了解这些新功能,请访问 cuML 文档

cuDF 中 IO 性能的主要改进

在过去的两个版本中,无论您是在云端还是本地工作,我们都为 NVIDIA cuDF 文件阅读器带来了显著的性能提升。

云对象存储

对于云端的数据处理工作负载,通常读取存储在远程对象存储 (例如 Amazon S3、Google Cloud Storage、Azure Blob Storage 等) 中的文件。

通过在后台使用 NVIDIA KvikIO 并并行读取 Parquet 文件页脚,使用 cuDF 和 Dask 的工作负载现在可以读取 Amazon S3 中的 Parquet 文件,速度比以前快 3 倍以上。

Bar chart showing throughput of Dask-cuDF with s3fs vs. KvikIO.

 

此功能现已默认开启,因此您应该可以在不更改任何内容的情况下查看更快的性能。

您可以在近期的 High-Performance Remote IO With NVIDIA KvikIO 博客中详细了解这项工作。

改进的解压缩功能

NVIDIA Blackwell 架构包含一个基于硬件的解压缩引擎,其设计旨在考虑数据处理。由于 25.02 版本支持 Blackwell,cuDF 现在可以利用此功能,为在任何位置运行的 IO 密集型工作负载带来显著的性能提升。

在配备 NVIDIA B100 GPU 和 NVMe 存储的系统上,使用 GPU 加速的 Polars 在 SF100 上运行 Polars Decision Support (PDS) 基准测试时,我们发现使用硬件解压缩引擎而不是基于软件的 (标准) GPU 内核解压缩时,端到端运行时间缩短了 35%。

Bar chart showing benchmark runtimes using kernel decompress and hardware decompress.
图 3。SF100 上的 PDS-H 基准测试结果

 

针对 Polars GPU 引擎的可用性增强

在使用 Polars GPU 引擎 (由 cuDF 提供支持) 时,Blackwell 解压缩引擎可以大幅提升性能。

性能对于任务至关重要,但人体工程学和开发者体验是人们喜爱 Polars 的部分原因。

我们与 Polars 社区合作,使加速 Polars 变得更加用户友好,从 RAPIDS 25.04 和 Polars 1.25 开始,现已推出两项备受期待的功能。

全局配置

用户现在可以使用 Polars 配置中的 set_engine_affinity 接口选择默认引擎。这意味着,无需在您运行的每个 Polars 查询的 collect 调用中选择 GPU 执行,您可以在工作流的顶部全局配置一次。

import polars as pl
pl.set_engine_affinity(“gpu”)

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

​​shape: (2, 1)
┌─────┐
│ a   │
│ --- │
│ f64 │
╞═════╡
│ 1.2 │
│ 1.5 │
└─────┘

如果 GPU 引擎不支持特定查询,则执行会透明地返回到默认的 Polars CPU 引擎。

有关 Polars 支持的选项的完整列表,请参阅全局引擎配置

GPU 感知分析

Polars 分析器是了解 Polars 查询性能的绝佳方法。现在,无论在 CPU 还是 GPU 上运行,您都可以使用分析器。

LazyFrame 上的 .profile() 方法现在支持 engine 参数,从而在 GPU 上启用分析。

要将分析器与 GPU 执行结合使用,只需告知分析器使用 GPU 引擎,如下查询所示:

q = (
    pl.scan_parquet("lineitem.parquet")
    .filter(pl.col("l_shipdate") <= var1)
    .group_by("l_returnflag", "l_linestatus")
    .agg(
        pl.sum("l_quantity").alias("sum_qty"),
        pl.sum("l_extendedprice").alias("sum_base_price"),
        (pl.col("l_extendedprice") * (1.0 - pl.col("l_discount")))
        .sum()
        .alias("sum_disc_price"),
        (
            pl.col("l_extendedprice")
            * (1.0 - pl.col("l_discount"))
            * (1.0 + pl.col("l_tax"))
        	)
        	.sum()
        	.alias("sum_charge"),
        	pl.mean("l_quantity").alias("avg_qty"),
        	pl.mean("l_extendedprice").alias("avg_price"),
        	pl.mean("l_discount").alias("avg_disc"),
        	pl.len().alias("count_order"),
    )
    .sort("l_returnflag", "l_linestatus")
)

df, profile = q.profile("gpu")
Chart showing a profile using the new Polars GPU profiler.

如需了解详情,请访问 Polars LazyFrame Profile 文档

适用于大型数据集的 Out-of-core XGBoost

我们与 DMLC 社区合作,于 3 月发布了 XGBoost 3.0。此版本是一个重要的里程碑,其重新设计的外部内存接口使其能够在过大而无法容纳内存的数据集上高效地训练模型。

我们针对一致性内存系统 (例如 NVIDIA GH200 Grace Hopper 和 NVIDIA GB200 Grace Blackwell) 优化了此功能。因此,在将 XGBoost 与 RAPIDS Memory Manager (RMM) 结合使用时,单个 Grace Hopper 系统可以轻松地在超过 1 TB 的数据集上训练模型。

您可以使用新的 ExtMemQuantileDMatrix interface 和数据迭代器开始进行大于内存的训练。

import cupy as cp
import rmm
from rmm.allocators.cupy import rmm_cupy_allocator

mr = rmm.mr.PoolMemoryResource(rmm.mr.CudaAsyncMemoryResource())
rmm.mr.set_current_device_resource(mr)
cp.cuda.set_allocator(rmm_cupy_allocator)

with xgboost.config_context(use_rmm=True):
    # Construct the iterators for ExtMemQuantileDMatrix
    # ...
    # Build the ExtMemQuantileDMatrix and start training
    Xy_train = xgboost.ExtMemQuantileDMatrix(it_train, max_bin=n_bins)
    # Use the training DMatrix as a reference
    Xy_valid = xgboost.ExtMemQuantileDMatrix(it_valid, max_bin=n_bins, ref=Xy_train)
    booster = xgboost.train(
        {
            "tree_method": "hist",
            "max_depth": 6,
            "max_bin": n_bins,
            "device": device,
        },
        Xy_train,
        num_boost_round=n_rounds,
        evals=[(Xy_train, "Train"), (Xy_valid, "Valid")]
    )

外部显存接口还支持多 GPU 和分布式训练,可扩展至绝对最大的数据集。

重新设计的 Forest 推理库

随着 cuML 25.04 的发布,具有更高性能的 Forest Inference Library (FIL) 实验版本现已保持稳定,并已为生产做好准备。

多年来,企业组织一直依靠 FIL 为生产中的 XGBoost、LightGBM 和 Random Forest 等树模型提供更高的推理性能。

这款经过全面重新设计的 FIL 可实现巨大的性能提升,基于对各种模型参数的测试,其速度中值比原始 FIL 快 40%。

A heatmap showing speedups of the new version of FIL compared to the previous version
图 5:cuML 25.04 中的 FIL 与之前版本相比的加速

加速取决于模型的特征,例如推理的树的深度和数量以及批量大小,在大多数情况下,新实现可显著加速

根据反馈,我们还推出了三项新功能来改善部署树模型的体验:

  • optimize 方法,提供自动优化以找到最佳配置。用户只需调用方法,在内部,FIL 将以透明方式为用户使用最优参数。
  • 能够分析每棵树对最终预测的贡献 (.predict_per_tree) ,以及访问和操作树中的单个叶节点 (.apply)
  • 新的 CPU 执行模式,可无缝接入 GPU。

平台更新:Blackwell 支持和 Conda 改进

在过去几个月中,我们对加速数据科学工作负载的运行位置和方式进行了两项重大改进。

从 25.02 版本开始,所有 RAPIDS 项目现在都支持基于 NVIDIA Blackwell 架构的 GPU,包括基于硬件的功能,如解压缩引擎。

此外,使用 Conda 安装 RAPIDS 库可以在 x86 和基于 ARM SBSA 的系统上使用 CUDA 12 的“严格”通道优先级完成,包括早在 24.06 的版本。这一长期的社区请求可以加快创建环境和安装软件包的速度。以前,RAPIDS 库需要将通道优先级设置为“灵活”。

这对 2 年前或更多年前发布的版本有一定影响。访问 RAPIDS 文档了解详情

Google Colab AI 助理

Google Colab 是最热门的数据科学托管笔记本电脑平台之一,提供简单的界面,可跨免费和付费层连接支持 GPU 的运行时。

现在,Google Colab 内置了 cuML 和 GPU 加速的 Polars,扩展了 Colab 的电池,包括来自 cuDF、pandas 和 NetworkX 的加速数据科学库。借助这些新增功能,您现在只需在笔记本顶部为这些库加载由 cuDF、cuML 和 cuGraph 提供支持的扩展程序,即可利用加速数据科学,无需更改代码。

如果您更喜欢使用 AI copilot,Collab Gemini 助手现在可以“感知 RAPIDS”。您可以使用 Gemini 生成由 cuDF 的零代码更改所需的 UX 驱动的 GPU 加速 pandas 代码。

A Google Gemini prompt and response where Gemini recommends using the cudf.pandas extension to accelerate the reading of a parquet file on the GPU

只需告诉 Gemini 助手您想使用 GPU 即可。

总结

25.02 和 25.04 RAPIDS 版本引入了重大增强功能,包括 Python ML 的零代码更改加速、重大的 IO 性能提升以及扩展的 XGBoost 训练支持,为未来更强大的数据科学工作流程奠定了基础。

欢迎您在 GitHub 上提供反馈。加入 RAPIDS Slack 社区的 3,500+ 名成员,讨论 GPU 加速的数据处理。如果您不熟悉 RAPIDS,请查看这些资源以开始使用。

在 NVIDIA GTC 2025 上,加速数据科学无处不在。如果您错过了,您仍然可以查看数据科学会议和研讨会列表,并点播观看会议,包括:

 

标签