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 算法或联邦学习,您有两种选择
升级到 glibc 2.28+ 的最新 Linux 发行版。或者
从源代码构建 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)
XGDMatrixSetDenseInfo
和XGDMatrixSetUIntInfo
现在已弃用。请改用基于数组接口的替代方案。
新特性
本节列出了一些适用于所有语言绑定的通用新特性。有关特定于包的更改,请访问相应章节。
采用新的 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_metric
、early_stopping_rounds
和 callbacks
已从 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)
修复
修复输入为
None
的DMatrix
问题。(#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)