3.0.3 补丁版本发布 (2025年7月30日)

  • 修复非指数增益的NDCG度量。 (#11534)

  • 避免对 rmsle 使用平均截距。 (#11588)

  • [jvm-packages] 添加 setNumEarlyStoppingRounds API (#11571)

  • 避免GPU评估中的隐式同步。 (#11542)

  • 删除数组接口处理程序中的CUDA检查 (#11386)

  • 修复GPU直方图中的检查。 (#11574)

  • 支持Rapids 25.06 (#11504)

  • enable_categorical 添加到 sklearn .apply 方法中 (#11550)

  • 使xgboost.testing与scikit-learn 1.7兼容 (#11502)

  • 添加对在Win-ARM64上构建xgboost wheels的支持 (#11572, #11597, #11559)

3.0.2 补丁版本发布 (2025年5月25日)

  • Dask 2025.4.0 调度器信息兼容性修复 (#11462)

  • 修复WSL2上的CUDA虚拟内存回退逻辑 (#11471)

3.0.1 补丁版本发布 (2025年5月13日)

  • 使用 nvidia-smi 检测驱动版本并处理不支持虚拟内存的旧驱动。 (#11391)

  • 优化GPU外部内存的深层树。 (#11387)

  • 外部内存页面连接的小修复 (#11338)

  • manylinux_2_28_x86_64 构建 xgboost-cpu (#11406)

  • Dask不同版本的解决方案 (#11436)

  • 输出模型现在使用非规范化浮点数而不是 nan。 (#11428)

  • 修复aarch64 CI。 (#11454)

3.0.0 (2025年2月27日)

3.0.0是XGBoost的一个里程碑。本说明将总结一些一般性更改,然后列出特定于包的更新。主要版本号的提升是由于R包的重构以及JVM包的重大更新。

外部内存支持

此版本对外部内存实现进行了重大更新,包括改进的性能、用于更高效数据初始化的新 ExtMemQuantileDMatrix、新的功能覆盖(包括分类数据支持和分位数回归支持)。此外,基于GPU的外部内存经过重新设计,以支持使用CPU内存作为数据缓存。最后但同样重要的是,我们致力于使用外部内存进行分布式训练,并初步支持Spark包。

  • 一个新的 ExtMemQuantileDMatrix 类,用于使用 hist 树方法进行快速数据初始化。新类支持CPU和GPU训练。 (#10689, #10682, #10886, #10860, #10762, #10694, #10876)

  • 外部内存现在支持分布式训练 (#10492, #10861)。此外,当设备是GPU时,Spark包可以使用外部内存(主机内存)。Maven上的默认包尚不支持RMM。为了获得更好的性能,目前需要从源代码编译XGBoost。 (#11186, #11238, #11219)

  • 通过对 hist 特定的训练和 approx (DMatrix) 方法进行新优化,提高了性能。 (#10529, #10980, #10342)

  • 外部内存的新演示和文档,包括分布式训练。 (#11234, #10929, #10916, #10426, #11113)

  • 通过不写入剪切矩阵,减少了二进制缓存大小和内存分配开销。 (#10444)

  • 更多功能覆盖,包括分类数据和所有目标函数,包括分位数回归。此外,还支持SHAP值等各种预测类型。 (#10918, #10820, #10751, #10724)

基于GPU的外部内存训练实现进行了重大更新。 (#10924, #10895, #10766, #10544, #10677, #10615, #10927, #10608, #10711)

  • 基于GPU的外部内存支持基于批处理和基于采样训练。在3.0版本之前,XGBoost在训练期间连接数据并将缓存存储在磁盘上。在3.0版本中,XGBoost现在可以将数据暂存到主机并按批次获取。 (#10602, #10595, #10606, #10549, #10488, #10766, #10765, #10764, #10760, #10753, #10734, #10691, #10713, #10826, #10811, #10810, #10736, #10538, #11333)

  • XGBoost现在可以利用 NVLink-C2C 进行基于GPU的外部内存训练,并可以处理高达数TB的数据。

  • 支持预测缓存 (#10707)。

  • 自动页面连接以提高GPU利用率 (#10887)。

  • 改进了基于批处理输入的分位数素描算法。更多信息请参见 新功能 部分。

  • 近乎密集输入的优化,更多信息请参见 优化 部分。

详情请参阅我们的最新文档 使用XGBoost外部内存版本。PyPI包 (pip install) 不支持 RMM,而GPU外部内存实现需要它。要进行实验,您可以从源代码编译XGBoost或等待RAPIDS conda包可用。

网络

延续上一版本的工作,我们更新了网络模块以提高可靠性。 (#10453, #10756, #11111, #10914, #10828, #10735, #10693, #10676, #10349, #10397, #10566, #10526, #10349)

NCCL异步模式现在支持使用NCCL的超时选项 (#10850, #10934, #10945, #10930)。

此外,新增了一个 Config 类,供用户指定各种选项,包括超时、跟踪器端口等,用于分布式训练。Dask接口和PySpark接口都支持新的配置。 (#11003, #10281, #10983, #10973)

SYCL

延续SYCL集成的工作,此版本在功能覆盖方面取得了显著进展,包括更多的训练参数和目标函数,以及分布式训练,同时进行了各种优化 (#10884, #10883)。

从3.0版本开始,SYCL插件的功能已接近完整,用户可以开始在SYCL设备上进行内存内训练和推理。新引入的功能包括

其他相关PRs (#10842, #10543, #10806, #10943, #10987, #10548, #10922, #10898, #10576)

特点

本节描述了XGBoost核心中的新功能。有关特定于语言的功能,请访问相应的章节。

  • GLM派生目标的新初始化方法。新方法基于输入标签的平均值。新方法改变了 base_score 估计的结果。 (#10298, #11331)

  • xgboost.QuantileDMatrix 可以用于CPU和GPU的所有预测类型。

  • 在以前的版本中,XGBoost会为助推器创建一个副本以释放内部树方法持有的内存。我们将该过程形式化为一个新的助推器方法 reset() / XGBoosterReset()。 (#11042)

  • OpenMP线程设置暴露给XGBoost全局配置。用户可以使用它来解决硬编码的OpenMP环境变量。 (#11175)

  • 我们改进了排序学习任务,以获得更好的超参数配置和分布式训练。

    • 在3.0版本中,所有三个分布式接口,包括Dask、Spark和PySpark,都支持根据查询ID对数据进行排序。DaskXGBRanker 的选项默认为true,并且可以选择退出。 (#11146, #11007, #11047, #11012, #10823, #11023)

    • 同样对于排序学习,引入了一个新参数 lambdarank_score_normalization,使得其中一个归一化可选。 (#11272)

    • lambdarank_normalization 现在在归一化 mean 对策略时使用对数。以前,梯度用于 topkmean#11322

  • 我们改进了GPU分位数素描,以减少内存使用。此改进有助于构建 QuantileDMatrix 和新的 ExtMemQuantileDMatrix

    • 采用了一种新的多级素描算法,以减少批量输入下的总体内存使用。

    • 除了算法更改之外,内部内存使用估计和分位数容器也进行了更新。 (#10761, #10843)

    • 此更改为 QuantileDMatrixDataIter 引入了两个附加参数,即 max_quantile_batchesmin_cache_page_bytes

  • 需要更多工作来改进对分类特征的支持。此版本支持绘制带有分类节点统计信息的树 (#11053)。此外,正在进行自动重新编码分类的准备工作。 (#11094, #11114, #11089) 这些是功能增强,而不是阻碍性问题。

  • 实现基于权重的特征重要性,用于向量叶子。 (#10700)

  • 减少DMatrix构建中的日志记录。 (#11080)

优化

除了外部内存和分位数素描的改进之外,我们还进行了一些优化和性能修复。

  • GPU树方法现在对密集输入和接近密集输入都显着减少了内存使用。 (#10821, #10870)

  • 对于近乎密集的输入,GPU训练对 hist (约2倍) 和 approx 都更快。

  • CPU上的分位数回归现在可以更有效地处理不平衡树。 (#11275)

  • DMatrix构建的小优化,以减少延迟。此外,C用户现在可以重用 ProxyDMatrix 进行多次推理调用。 (#11273)

  • CPU对 QuantileDMatrix 的预测性能已得到改进 (#11139),现在与普通 DMatrix 持平。

  • 修复了使用CPU对极其稀疏的 QuantileDMatrix 进行推理时的性能问题 (#11250)。

  • 优化CPU训练内存分配以提高性能。 (#11112)

  • 改进了RMM(Rapids内存管理器)集成。现在,借助 config_context(),XGBoost分配的所有内存都应路由到RMM。作为额外的好处,所有 thrust 算法现在都使用异步策略。 (#10873, #11173, #10712, #10712, #10562)

  • 当不使用RMM时,XGBoost在使用缓存分配器时会更加谨慎,以避免占用过多的设备内存。 (#10582)

突破性更改

本节列出了影响所有包的突破性更改。

  • 删除已弃用的 DeviceQuantileDMatrix。 (#10974, #10491)

  • 已移除对以 deprecated 格式保存模型的支持。用户仍然可以在3.0中加载旧模型。 (#10490)

  • 已移除对旧版(阻塞)CUDA流的支持 (#10607)

  • XGBoost现在需要CUDA 12.0或更高版本。

错误修复

  • 修复具有多个分位数的分位数误差度量(pinball loss)。 (#11279)

  • 修复在多线程环境下进行预测时潜在的访问错误。 (#11167)

  • 检查 gblinear 的正确转储格式。 (#10831)

文档

Python包

  • sklearn接口中的 feature_weights 参数现在定义为scikit-learn参数。 (#9506)

  • 初步支持polars,尚未支持分类特征。 (#11126, #11172, #11116)

  • 减少pandas dataframe开销和各种导入的开销。 (#11058, #11068)

  • plot_importance() 中更好的xlabel (#11009)

  • 验证用于训练的参考数据集。train() 函数现在在 QuantileDMatrix 用作验证数据集而没有参考时抛出错误。 (#11105)

  • 修复在推理过程中缺少特征名称时误导性错误 (#10814)

  • 为Python警告回调添加Stacklevel。此更改有助于改进Python包的错误消息。 (#10977)

  • 移除DataIter中的循环引用。有助于减少内存使用。 (#11177)

  • 添加对 cv 无效输入的检查。 (#11255)

  • 更新Python项目分类器。 (#10381, #11028)

  • 支持sklearn模块的文档链接。用户现在可以在jupyter notebook中找到文档链接。 (#10287)

  • Dask

    • 防止因工作器中止而导致训练挂起。 (#10985) 这有助于Dask XGBoost对错误具有鲁棒性。当工作器被终止时,训练将失败并抛出异常,而不是挂起。

    • 客户端日志记录的可选支持。 (#10942)

    • 修复LTR在空分区和NCCL错误中的问题。 (#11152)

    • 更新以兼容最新的Dask。 (#11291)

    • 有关排序模型的更改,请参阅 功能 部分。

    • 有关通信模块的更改,请参阅 网络 部分。

  • PySpark

    • 公开训练和验证指标。 (#11133)

    • 在初始化通信器之前添加屏障。 (#10938)

    • 将列式输入的支持扩展到CPU(以前仅限GPU)。 (#11299)

    • 有关排序模型的更改,请参阅 功能 部分。

    • 有关通信模块的更改,请参阅 网络 部分。

  • 文档更新 (#11265)。

  • 维护。 (#11071, #11211, #10837, #10754, #10347, #10678, #11002, #10692, #11006, #10972, #10907, #10659, #10358, #11149, #11178, #11248)

  • 突破性更改

    • 移除已弃用的 feval。 (#11051)

    • 从默认导入中移除dask。 (#10935) 用户现在需要通过以下方式导入XGBoost Dask:

      from xgboost import dask as dxgb
      

      而不是

      import xgboost as xgb
      xgb.dask
      

      此更改有助于避免将dask引入默认导入集。

    • Python要求提升至3.10。 (#10434)

    • 放弃对datatable的支持。 (#11070)

R 包

我们已经对R包进行了几个版本的重构。在3.0版本中,我们将开始在R-universe上发布一个新的R包,然后转向CRAN更新。新包具有更符合人体工程学的接口,也更符合R用户的习惯。此外,该包引入了一系列新功能。举几个例子,新包包括分类特征支持、QuantileDMatrix 和外部内存训练的初始实现。要测试新包

install.packages('xgboost', repos = c('https://dmlc.r-universe.dev', 'https://cloud.r-project.org'))

此外,我们终于为R包提供了在线文档网站,其中包含小插图和API参考 (#11166, #11257)。新接口的一个很好的起点是新的 xgboost() 函数。我们不会在此列出所有功能增益,因为太多了!请访问 XGBoost R 包 获取更多信息。如果您使用以前的XGBoost R包版本,那里有一个迁移指南 (#11197)。

JVM 包

XGBoost 3.0版本发布带来了JVM包,特别是Spark包的重大更新。打包和某些参数存在突破性更改。请访问 迁移指南 获取相关更改。这项工作带来了新功能以及CPU和GPU实现之间更统一的功能集。 (#10639, #10833, #10845, #10847, #10635, #10630, #11179, #11184)

维护

代码维护包括重构 (#10531, #10573, #11069)、清理 (#11129, #10878, #11244, #10401, #10502, #11107, #11097, #11130, #10758, #10923, #10541, #10990) 以及测试改进 (#10611, #10658, #10583, #11245, #10708),同时修复了编译器中的各种警告和测试依赖项 (#10757, #10641, #11062, #11226)。此外,还有一些杂项更新,包括一些开发脚本和性能分析注释 (#10485, #10657, #10854, #10718, #11158, #10697, #11276)。

最后,依赖项更新 (#10362, #10363, #10360, #10373, #10377, #10368, #10369, #10366, #11032, #11037, #11036, #11035, #11034, #10518, #10536, #10586, #10585, #10458, #10547, #10429, #10517, #10497, #10588, #10975, #10971, #10970, #10949, #10947, #10863, #10953, #10954, #10951, #10590, #10600, #10599, #10535, #10516, #10786, #10859, #10785, #10779, #10790, #10777, #10855, #10848, #10778, #10772, #10771, #10862, #10952, #10768, #10770, #10769, #10664, #10663, #10892, #10979, #10978)。

CI