数据科学

在单个 NVIDIA Grace Hopper 超级芯片上使用 XGBoost 3.0 训练 TB 级数据集

梯度提升决策树 (GBDT) 驱动着从实时欺诈过滤到 PB 级需求预测的各种功能。由于其先进的准确性、SHAP-ready 解释能力以及在笔记本电脑、多 GPU 节点或 Spark 集群上运行的灵活性,XGBoost 开源库一直是首选工具。XGBoost 3.0 版本的开发以可扩展性为北极星。单个 NVIDIA GH200 Grace Hopper 超级芯片现在可以处理从千兆字节到 1 太字节 (TB) 规模的数据集。

借助一致性内存架构,新的外部内存引擎可以通过 900 GB/s NVIDIA NVLink-C2C 流式传输数据,因此 1 TB 模型可以在几分钟内完成训练,速度比 112 核(双插槽)CPU 机箱快 8 倍。这减少了对复杂多节点 GPU 集群的需求,并使可扩展性变得更简单。

本文介绍了里程碑式的 XGBoost 3.0 版本中的新功能和增强功能,包括深入了解外部内存以及如何利用 Grace Hopper 超级芯片达到 1 TB 的规模。

金融系统用例

XGBoost 驱动欺诈检测信用风险预测和算法交易等关键金融系统。RBC 是全球市值最大的银行之一,其运行的潜在客户评分系统要求速度、准确性和可解释性。为了实现 ML 工作流的现代化,并处理对数十万条记录的持续模型调整,RBC 选择了 XGBoost。

RBC 基金管理公司 Gen AI 规划和估值总监 Christopher Ortiz 表示:“我们相信,在 NVIDIA GPU 的支持下,XGBoost 将使我们的预测潜在客户评分模型能够处理我们预计的数据量。通过利用 GPU,我们看到端到端速度提升了 16 倍,在我们的流水线测试中,我们看到模型训练的 TCO 显著降低了 94%。这代表了效率和成本效益方面的革命性飞跃。随着数据规模的扩大,我们可以更快地优化功能,从而提供更好的结果。

在 TB 级数据集上运行 XGBoost

为了使 XGBoost 能够实现 GPU 加速,我们引入了 GPU 直方图方法。与 CPU 上的 XGBoost 相比,这种方法实现了显著的加速。但是,仍然存在两个限制:

  • 即使压缩了数据,GPU 显存仍然是可加速数据集的主要限制因素。
  • 在 3.0 版本之前,实验外部内存会将流式批次串联在 GPU 内存中。

可以采用两种机制来解决这些限制:

  • Quantile DMatrix 将每个特征预先分成固定数量的分位数桶。这可以压缩数据集,在不显著影响模型准确性的情况下大幅减少内存使用。
  • 使用 Dask 和 Spark 等分布式框架对计算进行分片。

新的外部内存分位数 DMatrix

XGBoost 3.0 在外部内存分位数 DMatrix 中引入了第三种机制,可在单个 GH200 Grace Hopper 超级芯片上扩展到 TB 级数据集。这克服了设置分布式框架的复杂性,并利用了 Grace Hopper 超级芯片的超快 C2C 带宽。

外部内存分位数 DMatrix 是基于现有数据迭代器构建的,这些迭代器定义了读取数据集文件的方法。它负责处理数据集内存的所有管理,并用作 XGBoost 增强器对象的参数(图 1)。您可以将外部内存分位数 DMatrix 视为熟悉的 QuantileDMatrix,它预先对每个特征进行分箱,但使用相同的分位数逻辑。这意味着您可以保留所有现有超参数以获得相同的准确性。同时,数据本身位于主机 RAM 中,并在每次迭代时流式传输到 GPU。有关更多详细信息,请参阅 XGBoost 文档

Data processing flowchart of the External Memory Quantile DMatrix with Dataset Files and Data Iterator on the left and ExtMemQuantileDMatrix and xgboost.train on the right.
图 1。外部内存分位数 DMatrix 管理所有数据集内存

NVIDIA Grace Hopper 超级芯片如何使流式传输成为现实

这种设置非常适合基于 NVIDIA Grace 的超级芯片。GH200 超级芯片集成了 72 核 Grace CPU 和 Hopper GPU,并通过 NVLink C2C 连接。这意味着双向带宽为 900 GB/s,大约是 PCIe 5.0 x16 的 7 倍,延迟也远低于 PCIe 5.0 x16。

处理 1 TB 的训练作业通常需要一个大约 2 TB DRAM 的 CPU 机箱,或一个带有 8 到 16 个 NVIDIA H100 GPU 的小型 GPU 集群。这种设置可以提高速度,但增加了管理分布式框架的复杂性。借助 XGBoost 3.0 外部内存流,单个 GH200 超级芯片(80 GB HBM3 加上 480 GB LPDDR5X,由 900 GB/s NVLink-C2C 提供支持)现在可以自行处理相同的数据集,取代了 RAM 庞大的服务器和多 GPU Pod。

在 1 TB 数据集上对 Grace Hopper 进行基准测试

GPU 在处理密集(或近乎密集)的表时表现出色,因为 XGBoost 会大幅压缩这些表,从而减少总线流量并使直方图能够位于快速共享内存中。这意味着,对于 GPU 来说,形状几乎无关紧要:宽短和窄高的表在完成时间上几乎没有差别。

然而,ExtMemQuantileDMatrix 对形状很敏感。在对特征矩阵 (x) 和标签 (y) 进行 XGBoost 训练时,只有特征矩阵会根据行数进行分页,而标签或其他数据则不会。这意味着,对于较小的数据集,标签的大小(行数)是决定单个 GH200 超级芯片中可以容纳多少数据集的限制因素。

图 2 演示了这一点,其中总数据大小保持不变,但数据集中的行数和列数各不相同。

Graph showing the speedups achieved when comparing the NVIDIA Grace Hopper Superchip to a 112 core dual socket Xeon 8480CL.
图 2。单个 NVIDIA GH200 超级芯片现在可以处理 1 TB 的数据,与双插槽 Xeon 8480CL 的 112 个 CPU 核心相比,在处理大型数据集时,速度可提升至原来的 8 倍。

外部显存的最佳实践

要利用 GH200 超级芯片系统中的外部显存,请先阅读以下提示。有关更多详细信息,请参阅 XGBoost 文档。设置 grow_policy=’depthwise’ 以逐层构建树。这对于外部显存来说更好:

xgb_model = xgb.XGBRegressor(tree_method='hist',
				   device='cuda',
				   seed=42,
                   grow_policy='depthwise')

在与 RAPIDS 结合使用时,请始终从新的 RAPIDS Memory Manager (RMM) 池开始:

import cupy as cp, rmm, xgboost as xgb
from rmm.allocators.cupy 
import rmm_cupy_allocator

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

with xgb.config_context(use_rmm=True):
    dtrain = xgb.ExtMemQuantileDMatrix(it_train, max_bin=256)
    bst = xgb.train({“device”:“cuda”, “tree_method”:“hist”}, dtrain)

在 CUDA 12.8 或更高版本上运行,并使用支持 HMM 的驱动程序(Grace Hopper)。

XGBoost 3.0 中还有哪些新功能?

除了外部内存的改进之外,XGBoost 3.0 还提供了许多性能升级和 API 清理,包括:

  • 分布式外部内存的实验性支持。现在,您可以在集群中训练核心外模型,并在 GPU RAM 紧张时回退到主机内存。
  • 在 DMatrix 构造期间减少 GPU 显存,并加快批量输入的初始化速度,从而使 XGBoost 3.0 速度更快。
  • 对于“大部分密集”的数据,GPU hist 和 approx 方法的速度大约提高了 2 倍,并且降低了内存使用量。
  • 外部内存现在支持分类特征、每个目标(包括分位数回归)和所有预测类型(包括 SHAP)。

开始使用 XGBoost 3.0

XGBoost 3.0 中的外部内存改进:GPU 外部内存的工作方式是,当数据超过 GPU 内存时,将其作为默认工作方式。亮点包括:

  • 精度相同,占用空间更小:ExtMemQuantileDMatrix 在每个提升轮次中,都会及时将预先分箱的压缩页面从主机 RAM 传输到 GPU。
  • Grace Hopper 扩展 GPU 显存:NVLink 将普通主机显存转变为 GPU 显存的快速扩展,因此一个 Grace Hopper 超级芯片可以无缝完成以前需要多个 GPU(跨一个或多个节点)才能完成的 TB 级工作。
  • 直接升级:已经在使用 RAPIDS Memory Manager?在 GPU 工作流中,切换外部显存路径是一个简单的更改。现有工作流将继续不受影响地运行。

XGBoost 3.0 使您能够使用您一直使用的 XGBoost 调用在单个 Grace Hopper 芯片上处理 TB 级 GBDT 训练。

首先,下载 XGBoost 3.0 并查看安装指南。有关外部内存的更多信息,请参阅 XGBoost 文档

加入我们的社区 Slack 频道,发布您对 XGBoost GPU 加速的反馈或问题。如果您是加速数据科学的新手,请查看加速数据科学学习路径,了解动手操作的研讨会。

 

标签