2.1.4 补丁发布 (2025 年 2 月 6 日)

2.1.4 补丁版本在 2.1.3 版本的基础上进行了以下修复

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

  • 使用 CUDA 12.8 构建 wheel 并启用 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-backed 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 分钟,我们计划对此进行改进。

  • 支持显著更多的数据类型。

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

  • 改进了对工作器错误的 A 处理,包括在训练期间某个对等方死亡时更好的错误消息。

  • 与 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)

  • 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

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

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

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

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

特点

本节列出了一些适用于所有语言绑定的新功能。有关包特定的更改,请访问各自的部分。

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

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

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

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

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

  • XGBoost 在 macOS 上不再捆绑 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 的转换方法 (#9542)

  • 在适当的时候避免昂贵的重新分区。(#10408)

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

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

  • 修复 verbosity=3 的 PySpark。(#10172)

  • 修复 spark 估计器文档。(#10066)

  • 重新设计转换以改进代码重用。(#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 接口中将基本分数作为截距返回。(#9486)

  • 通过 pandas 扩展类型支持 arrow。这是基于 XGBoost 中新的 DataFrame API 构建的。有关更多信息,请参阅一般功能。(#9612)

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

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

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

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

修复

  • 修复 DMatrixNone 输入。(#10052)

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

  • 修复使用分类数据和 ranker 的分数函数。(#9753)

文档

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

  • 更新 Python 介绍。(#10033)

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

维护

  • 在 Python 预测返回中使用数组接口。(#9855)

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

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

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

JVM 包

以下是 JVM 特定更改的列表。与 PySpark 包一样,JVM 包也获得了阶段级调度。

错误修复

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

  • 修复 GPU 包的组列 (#10254)

维护

  • 将格式化和 linting 要求添加到 CMake 脚本。(#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 在上下文中正则表达式挂起的问题 (#9729)

  • Linters。(#10010, #9634)

CI

  • 上传 Python 包的元信息以方便解析 (#10295)

  • 各种依赖项更新 (#10274, #10280, #10278, #10275, #10320, #10305, #10267, #9544, #10228, #10133, #10187, #9857, #10042, #10268, #9654, #9835)

  • 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)