2.1.4 补丁版本 (2025年2月6日)

2.1.4 补丁版本在 2.1.3 版本基础上包含以下修复

  • XGBoost 现在兼容 scikit-learn 1.6 (#11021, #11162)

  • 使用 CUDA 12.8 构建 wheels 并启用 Blackwell 支持 (#11187, #11202)

  • 适应 RMM 25.02 日志记录器更改 (#11153)

2.1.3 补丁版本 (2024年11月26日)

2.1.3 补丁版本进行以下错误修复

  • [pyspark] 支持大型模型尺寸 (#10984)。

  • 修复列采样器的 rng (#10998)。

  • 正确处理 cudf.pandas 代理对象 (#11014)。

2.1.2 补丁版本 (2024年10月23日)

2.1.2 补丁版本进行以下错误修复

  • 清理并现代化 release-artifacts.py (#10818)

  • 修复带有缺失值的 ellpack 分类特征 (#10906)。

  • 修复带有训练延续的无偏 ltr (#10908)。

  • 修复特征约束中的潜在竞争条件 (#10719)。

  • 修复 arrow 后端 DF 的布尔数组 (#10527)。

  • 确保 pip check 不会因错误的平台标签而失败 (#10755)

  • 检查 cub 错误 (#10721)

  • 限制最大线程数 (#10872)。

  • 修复大型集群问题 (#10880)。

  • 符合 POSIX 的 poll.h 和 mmap (#10767)

2.1.1 补丁版本 (2024年7月31日)

2.1.1 补丁版本进行以下错误修复

  • [Dask] 在 scatter 调用中禁用广播,以防止预测函数挂起 (#10632)

  • [Dask] 正确处理空分区 (#10559)

  • 修复加密 GRPC 后端的联邦学习 (#10503)

  • 修复列分割器中的竞争条件 (#10572)

  • 优雅地处理用户无法读取 /sys/fs/cgroup/cpu.max 等系统文件的情况 (#10623)

  • 修复 FreeBSD 的构建和 C++ 测试 (#10480)

  • 澄清 Pandas 1.2+ 的要求 (#10476)

  • R 包构建中更健壮的字节序检测 (#10642)

此外,它包含一些增强功能

  • 发布针对 Linux ARM64 的 JVM 包 (#10487)

  • 发布一个名为 xgboost-cpu 的纯 CPU wheel (#10603)

  • 支持使用 CUDA Toolkit 12.5 和最新的 CCCL 进行构建 (#10624, #10633, #10574)

2.1.0 (2024年6月20日)

我们很高兴宣布 XGBoost 2.1 版本发布。本文将首先总结一些一般性变更,然后重点介绍特定包的更新。由于我们正在开发 新的 R 接口,此版本将不包含 R 包。我们将在 R 包准备好后立即更新。敬请关注!

网络改进

XGBoost 一项重要的持续工作是支持弹性,以改进在各种平台上的扩展和联邦学习,我们一直在为此努力。XGBoost 中现有的网络库(源自 RABIT 项目)已无法满足特性需求。在此版本中,我们重构了 RABIT 模块,为未来的开发铺平道路。之所以选择内部版本而非现有库,是因为我们正在积极开发,并频繁接到新特性请求,例如为联邦学习加载额外插件。新的实现具有以下特性

  • 支持 CPU 和 GPU 通信(基于 NCCL)。

  • 一个可重用的跟踪器,同时适用于 Python 包和 JVM 包。在新版本中,JVM 包不再需要 Python 作为运行时依赖项。

  • 支持 CPU 和 GPU 的联邦通信模式。

  • 支持超时。高级接口参数目前硬编码为 30 分钟,我们计划对此进行改进。

  • 支持更多数据类型。

  • 支持基于线程的工作器。

  • 改进了工作器错误处理,包括在训练期间某个对等方发生故障时提供更好的错误消息。

  • 支持 IPv6。目前,仅 dask 接口支持此功能。

  • 内置支持广播、allgatherV、allreduce 等各种操作。

相关 PR(#9597, #9576, #9523, #9524, #9593, #9596, #9661, #10319, #10152, #10125, #10332, #10306, #10208, #10203, #10199, #9784, #9777, #9773, #9772, #9759, #9745, #9695, #9738, #9732, #9726, #9688, #9681, #9679, #9659, #9650, #9644, #9649, #9917, #9990, #10313, #10315, #10112, #9531, #10075, #9805, #10198, #10414)。

此版本中移除了 RABIT 中使用 MPI 的现有选项。(#9525)

NCCL 现在从 PyPI 获取

在之前的版本中,XGBoost 静态链接了 NCCL,这显着增加了二进制文件大小,并导致达到 PyPI 仓库限制。在新版本中,我们取得了重大改进。新版本现在可以从外部源动态加载 NCCL,从而减小了二进制文件大小。对于 PyPI 包,安装期间将获取 nvidia-nccl-cu12 包。随着更多下游包重用 NCCL,我们也期望未来的用户环境更加精简。(#9796, #9804, #10447)

部分 Python 包现在需要 glibc 2.28+

从 2.1.0 版本开始,XGBoost Python 包将以两种变体分发

  • manylinux_2_28: 适用于 glibc 2.28 或更新版本的最新 Linux 发行版。此变体启用了所有功能。

  • manylinux2014: 适用于 glibc 版本早于 2.28 的旧 Linux 发行版。此变体不支持 GPU 算法或联邦学习。

pip 包管理器将根据您的系统自动选择正确的变体。

从 **2025 年 5 月 31 日** 起,我们将停止分发 manylinux2014 变体,并仅分发 manylinux_2_28 变体。我们做出此决定是为了让我们的 CI/CD 管道不再依赖已结束生命周期的软件组件(例如 CentOS 7)。我们强烈建议大家迁移到最新的 Linux 发行版,以便使用未来版本的 XGBoost。

注意:如果您想在旧的 Linux 发行版上使用 GPU 算法或联邦学习,您有两种选择

  1. 升级到 glibc 2.28+ 的最新 Linux 发行版。或者

  2. 从源代码构建 XGBoost。

多输出

在此版本中,我们继续进行多目标和向量叶子的工作

  • 通过新的 API XGBoosterTrainOneIter 修改了对自定义目标的支持。这个新函数支持跨步矩阵和 CUDA 输入。此外,自定义目标现在为预测返回正确的形状。(#9508)

  • The hinge 目标现在支持多目标回归 (#9850)

  • 修复使用向量叶子的增益计算 (#9978)

  • 支持多目标树的 graphviz 绘图 (#10093)。

  • 修复使用交替策略的多输出问题 (#9933)。

请注意,此功能仍在开发中,不适合生产环境使用。

联邦学习

联邦学习在列分割支持方面取得了进展,包括以下更新

  • 列分割功能适用于 CPU 和 GPU。此外,分类数据现在与列分割兼容。(#9562, #9609, #9611, #9628, #9539, #9578, #9685, #9623, #9613, #9511, #9384, #9595)

  • 已实现使用 UBJson 序列化列分割的拆分条目,这有助于向量叶子处理基于列的数据分割。(#10059, #10055, #9702)

  • 文档和小型修复。(#9610, #9552, #9614, #9867)

SYCL 支持的持续工作

XGBoost 正在开发用于 SYCL 设备的 SYCL 插件,从 hist 树方法开始。(#10216, #9800, #10311, #9691, #10269, #10251, #10222, #10174, #10080, #10057, #10011, #10138, #10119, #10045, #9876, #9846, #9682) XGBoost 现在支持在 SYCL 设备上启动推理,并且正在进行添加 SYCL 训练支持的工作。

展望未来,我们计划在未来的版本中完成训练功能,然后专注于提高 SYCL 的测试覆盖率,特别是 Python 测试。

优化

  • 在 CUDA 中实现用于 GPU 树方法的列采样器。这有助于在采用列采样时加快训练时间 (#9785)

  • CMake LTO 和 CUDA 架构 (#9677)

  • 使用线程池对外部内存进行小型优化。这减少了迭代期间启动的线程数。(#9605, #10288, #10374)

弃用和重大变更

特定于包的重大变更在相应章节中概述。此处列出此版本中的一般性重大变更

  • 命令行接口已被弃用,因为机器学习生态系统日益复杂。使用命令 shell 构建机器学习模型已不再可行,并且可能会误导新手。(#9485)

  • 通用二进制 JSON 现在是保存模型的默认格式 (#9947, #9958, #9954, #9955)。更多信息请参阅 https://github.com/dmlc/xgboost/issues/7547

  • XGBoosterGetModelRaw 在 1.6 中弃用后,现已移除。(#9617)

  • 取消对加载远程文件的支持。此功能没有任何测试。建议用户使用专门的库来获取远程内容。(#9504)

  • 移除稠密 libsvm 解析器插件。此插件从未经过测试或文档化 (#9799)

  • XGDMatrixSetDenseInfoXGDMatrixSetUIntInfo 现在已弃用。请改用基于数组接口的替代方案。

新特性

本节列出了一些适用于所有语言绑定的通用新特性。有关特定于包的更改,请访问相应章节。

  • 采用新的 XGBoost 标志 (#10270)

  • 现在原生 XGBoost 支持数据帧 (dataframe) 数据格式。此改进提高了性能,并减少了在使用 pandas, arrow 和 R 数据帧等基于数据帧的结构时内存的使用。(#9828, #9616, #9905)

  • 将 gamma 回归的默认指标更改为 deviance。(#9757)

  • 通过引入新的 lambdarank_normalization 参数,排序学习的归一化现在是可选的。(#10094)

  • 支持在 CPU 上使用 QuantileDMatrix 进行贡献预测。(#10043)

  • macOS 上的 XGBoost 不再捆绑 OpenMP 运行时。用户可以从其选择的依赖管理器安装最新的运行时。(#10440)。此外,macOS 上的 JVM 包现在构建时支持 OpenMP (#10449)。

错误修复

  • 修复使用外部内存中的分类数据进行训练的问题。(#10433)

  • 修复使用 CTK-12 编译的问题。(#10123)

  • 修复 Windows 上运行时库不一致的问题。(#10404)

  • 修复默认指标配置。(#9575)

  • 修复带有特殊字符的特征名称。(#9923)

  • 修复外部内存训练的全局配置。(#10173)

  • 对精确树方法禁用按节点的列采样。(#10083)

  • 修复 FieldEntry 构造函数特化语法错误 (#9980)

  • 修复带有 NDCG 指标和自定义增益的成对目标。(#10100)

  • 修复 lambdarank_pair_method 的默认值。(#10098)

  • 修复带有布尔值的 UBJSON。现有代码不受此修复影响。(#10054)

  • 对 AUC 的浮点错误更加宽松。这可以防止 AUC > 1.0 的错误。(#10264)

  • 检查分类特征的支持状态。这可以防止 gblinear 将分类特征视为数值特征。(#9946)

文档

这里列出了一些不特定于任何 XGBoost 包的文档更改。

  • 一个新的 XGBoost 功能粗略映射,以协助开发。(#10310)

  • 新的语言绑定一致性指南。(#9755, #9866)

  • 修复、清理、小型更新 (#9501, #9988, #10023, #10013, #10143, #9904, #10179, #9781, #10340, #9658, #10182, #9822)

  • 更新参数文档 (#9900)

  • base_score 的简要介绍。(#9882)

  • 提及分类特征的数据一致性。(#9678)

Python 包

Dask

除了网络方面的更改,我们在 dask 中也有一些优化和文档更新

  • 在工作器而不是客户端上过滤模型;这可以防止客户端机器上的 OOM(内存不足)错误。(#9518)

  • 现在鼓励用户使用 from xgboost import dask 而不是 import xgboost.dask,以避免为非 dask 用户引入不必要的依赖项。(#9742)

  • 向演示添加种子。(#10009)

  • 关于在 k8s 中使用 dask XGBoost 的新文档。(#10271)

  • 解决空分区可能产生的未对齐指针问题。(#10418)

  • 解决最新 dask 中的竞争条件问题。(#10419)

  • [文档] 为 dask 演示添加类型提示。(#10207)

PySpark

PySpark 有几个新特性以及一些小型修复

  • 支持在各种平台(包括 yarn/k8s)上进行阶段级训练调度。(#9519, #10209, #9786, #9727)

  • 支持基于 GPU 的 transform 方法 (#9542)

  • 在适当的情况下避免昂贵的重新分区。(#10408)

  • 重构日志记录和 GPU 代码路径 (#10077, 9724)

  • 按任务 ID 对工作器进行排序。这有助于 PySpark 接口获得确定性结果。(#10220)

  • 修复使用 verbosity=3 的 PySpark 问题。(#10172)

  • 修复 spark estimator 文档。(#10066)

  • 重做 transform 以改进代码复用。(#9292)

重大变更

对于 Python 包,eval_metricearly_stopping_roundscallbacks 已从 sklearn 接口的 fit 方法中移除。它们在 1.6 中已被弃用。请改用构造函数中同名的参数。(#9986)

新特性

以下是 Python 包中的新特性列表

  • 在 sklearn 自定义目标中支持样本权重。(#10050)

  • 新增支持的数据类型,包括 cudf.pandas (#9602)、torch.Tensor (#9971) 以及更多 scipy 类型 (#9881)。

  • 支持 pandas 2.2 和 numpy 2.0。(#10266, #9557, #10252, #10175)

  • 支持包括 rmm 在内的最新 rapids。(#10435)

  • 改进了数据迭代器中的数据缓存选项。(#10286)

  • 接受 numpy 生成器作为 random_state (#9743)

  • 支持在 sklearn 接口中将 base score 作为截距返回。(#9486)

  • 通过 pandas 扩展类型支持 arrow。这是基于 XGBoost 新的 DataFrame API 构建的。更多信息请参阅通用特性。(#9612)

  • 在模型切片和预测中处理 numpy 整数。(#10007)

  • 改进了 sklearn 标签支持。(#10230)

  • 用于构建 Linux 二进制 wheel 的基础镜像已更新为 rockylinux8。(#10399)

  • 改进了对 float128 的处理。(#10322)

修复

  • 修复输入为 NoneDMatrix 问题。(#10052)

  • 修复原生库发现逻辑。(#9712, #9860)

  • 修复在 ranker 中使用分类数据和 score 函数的问题。(#9753)

文档

  • 澄清 enable_categorical 的作用 (#9877, #9884)

  • 更新 Python 入门介绍。(#10033)

  • 修复。(#10058, #9991, #9573)

维护

  • 在 Python 预测返回值中使用 array interface。(#9855)

  • 为测试合成 AMES 住房数据集。(#9963)

  • linter、格式化等。(#10296, #10014)

  • 测试。(#9962, #10285, #9997, #9943, #9934)

JVM 包

这里列出了 JVM 特定更改。与 PySpark 包一样,JVM 包也获得了阶段级调度功能。

错误修复

  • 修复错误处理中的内存泄漏。(#10307)

  • 修复 GPU 包的 group col 问题 (#10254)

维护

  • 向 CMake 脚本添加格式化和 linting 要求。(#9653, #9641, #9637, #9728, #9674)

  • 重构和清理 (#10085, #10120, #10074, #9645, #9992, #9568, #9731, #9527)。

  • 更新 nvtx。(#10227)

  • 测试。(#9499, #9553, #9737)

  • 对 32 位架构抛出错误 (#10005)

  • 辅助函数。(#9505, #9572, #9750, #9541, #9983, #9714)

  • 修复 mingw 在 context 中 regex 挂起的问题 (#9729)

  • Linters。(#10010, #9634)

CI

  • 上传了关于 Python 包的元信息,以便于解析 (#10295)

  • 各种依赖更新 (省略 PR 编号)

  • GitHub Action 修复 (#10067, #10134, #10064)

  • 改进了对 Apple 设备的支持。(#10225, #9886, #9699, #9748, #9704, #9749)

  • 如果 pytest 失败,则停止 Windows 管道 (#10003)

  • 如果发布了更新的提交,则取消 GH Action 任务 (#10088)

  • CI 镜像。(#9666, #10201, #9932)

  • 使用 CMake 测试 R 包 (#10087)

  • 测试 32 位架构构建 (#10021)

  • 使用 GitHub Action 测试联邦插件。(#10336)