NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #590 most downloaded on PyPI
XGBoost Python Package
Last release 1 months ago
15 Aug 2026
Release timing varies
gaps range from 1 weeks to 4 months
Nearly every release is documented
notes for 56 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
11 years old
97 releases · first in 2015
[jvm] Fix batch predict for SparseVector features
Full Changelog: v3.4.0...v3.4.1
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check34a5cb99a67bb98b44f204767eeeae642b65a86b2ecfca60082e4d74fd4d169a xgboost-src-3.4.1.tar.gz
2514d394f989d6e990e67898d7f5e530c7c1867222c497ea454ffc18a31cb096 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
One column per quarter.
https://xgboost.readthedocs.io/en/latest/changes/v3.4.0.html
https://xgboost.readthedocs.io/en/latest/changes/v3.4.0.html
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --checkaf4588b34c7fa1bfde258006beebbe181454f1fb74266f81883b23059af3b9fb xgboost-src-3.4.0.tar.gz
8feb5a559cd869e9c9b8ed1a60475c34b7ba689c6f7b9c41dc9ba16fae4d19fe xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Fix model slicing with category container. (12462)
[JVM Packages] Fix batch predict for SparseVector features (12347)
XGBoost 3.4.0 completes the vector-leaf implementation for the hist tree method, revises the quantile regression and mean absolute error (MAE) objectives, removes column-split support, and fixes issues across multiple components.
The vector-leaf implementation for the hist tree method is now feature-complete and classified as experimental rather than work in progress. Key changes include:
Categorical features on CPU and GPU, DART, monotonic and interaction constraints, and min_child_weight. (12305, 12299, 12276, 12340, 12341, 12294, 12325, 12296)
Distributed training and Dask multi-label estimators, including AUC and SHAP support, plus tree dumping and DataFrame conversion. (12292, 12369, 12313, 12314, 12293)
Batched split application, reduced-gradient sampling, shared histogram building and split evaluation, additional validation, and external-memory fixes. (12365, 12321, 12397, 12387, 12336, 12330, 12320, 12312)
Quantile regression and mean absolute error now use smooth approximations instead of line searches to determine leaf values. (12391, 12386, 12373, 12346)
Column-split support has been removed. (12333, 12363, 12354)
The federated learning plugin is no longer included in Python binary wheels. (12376)
The random-forest wrappers are deprecated. Use num_parallel_tree directly for random-forest models. (12324, 12342)
The deprecated XGDMatrixCreateFromFile function has been removed. (12297)
The CUDA asynchronous memory pool is now recommended for external-memory training. (12337)
The default xgboost binaries for the Python and JVM packages are now built with CUDA 13.3 on Linux and Windows. Python users who need CUDA 12.9 can install xgboost-cu12 from PyPI or build from source. (12384, 12394)
Both the xgboost and xgboost-cpu packages support Windows on AArch64. (12394)
Reduce allocations in the JSON text parser. (12317)
Skip per-tree depth computation for single-row prediction. (12307)
Avoid rebuilding the regular expression when parsing the device parameter. (12306)
Extend the depth bucket used by GPU Quadrature TreeSHAP. (12290)
The following fixes affect all interfaces. Interface-specific fixes are listed in the corresponding package sections.
Fix an issue where min_child_weight could produce an empty root node. Also, this release fixes its interaction with max_delta_step. (12322, 12296)
Preserve tiny positive Hessians during GPU quantization. (12266)
Fix compatibility with RMM 26.08. (12316, 12269)
Fix learning-to-rank pair sampling when continuing training. (12332)
Fix GPU SHAP on CUDA SM120. (12368)
Fix the recoder's handling of UTF-8 data and pandas nullable categorical indexes, and add overflow checks. (12371)
Migrate Python package builds to scikit-build-core and include license files in both installed packages and wheel metadata. (12219, 12349, 12280)
~xgboost.Booster.trees_to_dataframe now uses pandas NA for unavailable vector-leaf values instead of a mix of np.nan and None. (12293)
Correct scikit-learn input tags and raise ValueError when qid is omitted from ~xgboost.XGBRanker.score. (12383, 12335)
Pass Graphviz keyword arguments through ~xgboost.plotting.to_graphviz. (12359)
Fix shape reporting for empty array-interface results and SciPy CSC input handling. (12381, 12378)
Fix ~xgboost.collective.allreduce always returning a flattened one-dimensional array. (12377)
Code cleanup. (12331)
Fix early_stopping_rounds handling in xgboost(). (12370)
Remove an obsolete 32-bit Windows thread_local workaround. (12352)
Test and lint fixes. (12309, 12259)
Fix potential resource leaks in native error paths and make floating-point serialization locale-independent. (12286, 12235)
Update the Maven Central publishing plugin and release tooling, including support for local testing. (12255, 12254, 12253)
Add the second-place solution from the Tabular Playground Series. (12392)
Fix typos and update external links. (12400, 12401, 12357, 12358, 12328)
Update GitHub Actions. (12375, 12338, 12300, 12263, 12274)
Add a stale pull request cleanup workflow. (12318)
Clean up the NCCL discovery script. (12262)
Refactor and clean up code. (12345, 12275, 12385, 12271)
Release maintenance. (12252)
https://xgboost.readthedocs.io/en/latest/changes/v3.3.0.html
https://xgboost.readthedocs.io/en/latest/changes/v3.3.0.html
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check22d4fba822fba5cd02299bf0c63ec68ff72606bc1b1bd910423d4b83c2f108ff xgboost-src-3.3.0.tar.gz
df276bf14ebda98319da70fa88874746d9275ffbcde77e18e171d809cdbda86a xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
XGBoost 3.3 adds expectile regression, enables categorical feature support by default, expands SHAP support for vector-leaf models, and includes optimizations for histogram building, quantile sketching, and distributed GPU training.
Change the TreeSHAP implementation for improved numerical stability and faster execution with QuadratureTreeSHAP (12179, 12192, 12207)
Add exact SHAP contribution and interaction prediction for vector-leaf multi-output trees on both CPU and GPU. (12209, 12210, 12247, 11985, 12208)
The quantile sketching went through some major refactoring and optimizations. XGBoost 3.3.0 simplifies quantile sketch internals and improves the weighted quantile sketch implementation (12033, 12046, 12048, 12049, 12054, 12067, 12074, 12146, 12148, 12150, 12151, 12155, 12167), with significantly reduced memory use in the GPU quantile sketch (12047, 12079, 12090, 12099, 12104, 12105, 12118, 12147, 12159, 12160). Also, we have a more efficient distributed quantile construction using tree reductions. (12061, 12128, 12171)
Add expectile regression with the reg:expectileerror objective, the expectile metric, and the expectile_alpha parameter. Multiple expectiles are supported. (11988, 12228, 12243)
Enable categorical feature support by default while keeping enable_categorical available for users who need to disable it. CPU hist also gained one-hot categorical split support for the working-in-progress vector leaf. (12015, 12072, 12244)
Deprecate the gblinear booster. Support will be removed in a future release. (12030)
Use a local RNG and serialize RNG state. Training multiple models with sampling within the same session is now reproducible. (12043, 12083)
Optimize CPU histogram building for wide datasets with column block tiling and detect CPU cache sizes via Linux sysfs on aarch64. (12158, 12233)
Use Philox for faster GPU sampling. (12223)
Support customizing worker port for distributed training. In addition, XGBoost now doesn't need all-to-all collective connections for improved scalability. (12010, 12075, 12171, 12082)
Bump the minimum supported Python version to 3.12. (12195)
Add PySpark support for Spark Connect ML. (11970)
Require Enum support from Polars and validate unique pandas column names. (12240, 12199)
Fix the default verbose behavior mismatch between XGBClassifier.fit and XGBRegressor.fit. (12184)
Fix python -OO crashes caused by assigning to missing docstrings (12094)
Handle boolean indicator features in trees_to_dataframe. (12089)
Improve validation and error messages for feature information and deprecated functions. (12142, 12200)
Clean up imports, type checking comments, and legacy compatibility guards. (12027, 12110, 12163)
Document Spark 4.0 compatibility for JVM packages. (12136)
Support regressor and ranker pipelines with columnar input. (12058)
Add automatic module names for Java packages and support xgboost4j on FreeBSD. (12114, 12222)
Support Visual Studio 2026. (12245)
Update CUDA Toolkit support, including CUDA Toolkit 13.3 type updates and default architecture alignment for recent CUDA versions. (12230, 12204)
Support latest RAPIDS. (12140, 12013, 12212, 12144)
Fix CMake export targets and builds with system-installed dmlc-core. (12238, 12123)
Fix macOS build and packaging issues. (12187, 12108)
Improve Linux packaging with versioned shared object. (12055)
Fix out-of-vocabulary categorical encoding and categorical splits with vector-leaf models. (12193, 12244)
Fix SYCL multiclass objective calculation. (12041)
Fix in-place prune aliasing and assorted prediction/documentation typos. (12202, 12076, 12070, 12003)
Add TreeSHAP references, distributed XGBoost on Kubernetes documentation, and updates to competition-winning solution examples. (12207, 12080, 12087, 12109)
Add notes for pickling, expectile margin output, Spark 4.0 compatibility. (12042, 12243, 12136, 12247)
Update LightGBM links, the security disclosure, the xgboost-cpu package note, and the Read the Docs canonical URL. (12084, 12113, 12169, 12246)
Unify CI configure workflows, document the clang-tidy flow, and keep CI images and dependency pins up to date. (12170, 12175, 12165)
Keep GitHub Actions dependency groups and release bookkeeping up to date. (12005, 12029, 12034, 12038, 12057, 12095, 12124, 12134, 12145, 12161, 12178, 12188, 12206, 12231, 12249)
Update CI jobs for cibuildwheel, CRAN, R CI, and documentation tests. (12066, 12125, 12173, 12216)
Continue test cleanup and refactoring across quantile sketching, PySpark, global configuration. (12002, 12007, 12009, 12019, 12141, 12164, 12180, 12190)
Continue cleanup of prediction and DART internals, including moving DART state into GBTree and unifying DART SHAP forwarding. (12068, 12071, 12073, 12078, 12081, 12022)
Always save DART configuration. (12098)
Improved support for using clang-tidy with CUDA code. (12165, 12174)
Various small cleanups. (12053, 12092)
Improve CUDA resource handling and diagnostics, small cleanups for external memory. (12092, 12127, 12185, 12191, 12137, 12069)
https://xgboost.readthedocs.io/en/latest/changes/v3.2.0.html
https://xgboost.readthedocs.io/en/latest/changes/v3.2.0.html
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check16a31dfbc0c54544c9c36ab5f696fa7b646c125f161c52c814d757a58241a404 xgboost-src-3.2.0.tar.gz
41ce6798ed032380d4efed08cb1e4fadb87a5eba401b530fefcb90f1deb367d0 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
We are excited to announce the XGBoost 3.2 release. This release features significant progress on multi-target tree support with vector leaf, enhanced GPU external memory training, various optimizations, and the removal of the deprecated CLI.
The latest XGBoost release features enhanced support for external memory training with GPUs. XGBoost has experimental support for using the CUDA async memory pool, which users can opt in to enable asynchronous memory management for efficient external memory training. Prior to 3.2, the RMM plugin was required. The feature is Linux-only at the moment. (11706, 11715, 11718, 11931, 11865, 11959, 11962)
The adaptive cache is now used for all device types, including devices with full C2C bandwidth, like GH200 and DGX station. Users can continue to specify the cache_host_ratio parameter in case of memory fragmentation. XGBoost now supports devices with mixed GPU models for configuring the host cache (11998). As part of the work for improved NUMA system support, we co-developed the pyhwloc project (11992).
Lastly, the old page-concat option for GPU external memory has been removed. XGBoost will use the full dataset for training. (11882, 11897)
This release brings substantial progress on the vector-leaf-based multi-target tree model, building on the multi-target intercept work from 3.1. The vector leaf tree stores a vector of weights in each leaf node, enabling the model to capture correlations across targets during tree construction. In 3.2, we expanded the feature set to cover most of the commonly used training configurations.
Warning
The vector leaf is still a work in progress. Feedback is welcome.
New features for the multi-target tree include:
Reduced gradient (sketch boost) for the hist tree method, which avoids using the full gradient matrix to find tree structures for improving scalability with the number of targets. Users can use a custom objective to define the tree split gradient in addition to the full leaf gradient. Built-in objectives are not yet supported.
Support for all regression objectives, including MAE and the quantile loss.
GPU hist tree method implementation has features on par with the CPU one.
Regularization parameters including L1/L2, min_split_loss, and max_delta_step.
Row subsampling with both uniform sampling and gradient-based sampling.
Column sampling (feature selection), including feature weights.
Feature importance variants (gain and coverage).
Model dump support for all formats (JSON, text, graphviz).
External memory.
In addition, intercept initialization for the multinomial logistic objective now adheres to GLM semantics.
Related PRs: 11950, 11914, 11913, 11965, 11941, 11967, 11940, 11896, 11894, 11889, 11917, 11883, 11786, 11881, 11862, 11855, 11829, 11825, 11820, 11814, 11729, 11724, 11747, 11798, 11791, 11789, 11781, 11778, 11777, 11744, 11922, 11920
Currently missing features for the hist tree method with vector leaf:
Distributed training
Categorical features
Feature interaction constraints
Monotone constraints, which are not defined when the output is a vector.
Shapley values
As part of the vector leaf work, CPU hist now supports gradient-based sampling.
The deprecated CLI (command line interface) has been removed. It was deprecated in 2.1. (11720)
Expose the categories container to the C API, allowing C users to access category information from the trained model. (11794)
Upgrade to CUDA 12.9. (11972, 11968)
Support oneapi 2026 release. (11994)
Compatibility fixes for the latest versions of nvcomp, RMM, and CCCL. (11930, 11834, 11871, 11995, 11861, 11785, 11997). A nightly CI pipeline was added to test XGBoost with the latest versions of CCCL and RMM. (11863)
Various optimizations for the GPU hist tree method, some of which were done as part of the vector leaf work. (11895)
Enable multi-threaded data initialization for CPU. (11974)
Make the block_size of the CPU histogram building kernel adaptive based on model parameters and CPU cache size, demonstrating up to 2x speedup for certain workloads. (11808)
Small optimizations for some GPU kernels to use TMA. (11841, 11802)
We now use device memory for storing the tree model, which eliminates data copies between host and device during training and inference. (11759, 11735, 11750, 11741, 11752)
Fix logistic regression with constant labels. (11973)
Fix OpenMP configuration for macOS. (11976)
Fix SYCL build. (11844)
Fix memory leak with Python DataFrame inputs where temporary buffers were stored as class variables instead of instance variables. (11961)
Pandas 3.0 support. (11975)
Add Python type hints for tests and demos, various type hint fixes. (11795, 11797)
Add Python 3.14 classifier. (11793)
Maintenance (11717, 11783)
Fix RCHK warnings and memory safety issues. (11938, 11935, 11847)
Error out on factors passed to DMatrix with an informative message. (11810)
Remove calls to R's global RNG that are no longer needed. (11848, 11887)
Various documentation fixes and updates. (11773, 11890, 11732, 11846, 11981, 11842)
Remove synchronized from predict, as internal prediction is already thread-safe, with a concurrency test added to verify. (11746)
Set GPU device ID explicitly at the beginning of training and avoid CUDA API guard for the tracker process, allowing Spark executors to run in exclusive mode. (11939, 11929)
Use inferBatchSizeParameter instead of a hardcoded value. (11745)
Documentation updates, maintenance. (11691, 11915, 11743)
Update references from XGBoost Operator to Kubeflow Trainer. (11710)
Document the categories container and add notes for handling unseen categories. (11788, 11868, 11774)
Add Intel as sponsor. (11850)
Support pre-commit for various linting and formatting tasks. clang-format is now required by the CI. (11984, 11978, 11980, 11958, 11953, 11946, 11993)
We added sccache integration to XGBoost's CI workflows, which brings significant speedup since a majority of the time is spent on compiling variants of XGBoost. In addition, most of the workflows now use GHA container support. (11956, 11952, 11949, 11937, 11934, 11927, 11932, 11924, 11979)
Plenty of optimizations for tests. (11990, 11975, 11964)
Various dependency updates, fixes, test refactoring, and cleanups. (11955, 11957, 11963, 11945, 11912, 11909, 11888, 11898, 11925, 11877, 11824, 11748, 11721, 11705, 11699, 11832, 11796, 11828, 11852, 11800, 11999, 11991)
Scikit-learn 1.8 compatibility fix
max_delta_step with CUDA. (#11916)Full Changelog: v3.1.2...v3.1.3
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check67800a7c1c0455c22c9be73dbf3c39bfd9ac9627b2cb617eb2795fd675a9d49e xgboost-src-3.1.3.tar.gz
f3586dc2da415bba7c3a632b290d653b74eea0caf2ea9e8ffb488cacb57a1dcf xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Fix ordering of Python callbacks.
enable_categorical during model load. (#11816)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check12f2d6f735fa71e007c40171fd926c12306276dd299dc48f6c923e4f3891c33e xgboost-src-3.1.2.tar.gz
2f83f1b24affb50bf65a8dd80d4ac9d19fe95cf181df35fa8a335a06d2eb9cfd xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Emit correct error when performing inplace-predict using a CPU-only version of XGBoost, but with a GPU input.
Full Changelog: v3.1.0...v3.1.1
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --checkb2bb9c93f28fe7e401dbe592eb7990f5382baa712b02301eb8fd4cdb6c676731 xgboost-src-3.1.1.tar.gz
ae6f2f2397aea02c77e77435cd9f617b5990756d5800218ff44f4ff5eba9104a xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
https://xgboost.readthedocs.io/en/latest/changes/v3.1.0.html
https://xgboost.readthedocs.io/en/latest/changes/v3.1.0.html
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check4c42d35976067270a9255bf9ee290a706917bb3929a60cdd74d4dd3f1a9c86cc xgboost-src-3.1.0.tar.gz
79b3407f19ccfa7344ee1a7ae9afb845cff9472c5a736fbdbdf95d98950c8290 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Scikit-learn 1.8 compatibility fix (11858)
Add ARM CUDA wheels for PyPI. (11827) Add nccl as dep for aarch64. (11753)
[R] Fix off-by-one bug: nrounds=0 resulted in 2 iterations 11856
[R] Fix mingw warnings, winbuilder check warnings, memory safety issues. (11859, 11847, 11830, 11906)
Avoid overflow in rounding estimation. (11910)
Workaround compiler issue on Windows, affects the use of max_delta_step with CUDA. (11916)
Fix loading nccl 2.28. (11806)
Fix ordering of Python callbacks. (11812)
Infer the enable_categorical during model load. (11816)
Emit correct error when performing inplace-predict using a CPU-only version of XGBoost, but with a GPU input. (11761)
Enhance the error message for loading the removed binary model format. (11760)
Use the correct group ID for SHAP when the intercept is a vector. (11764)
We are delighted to share the latest 3.1.0 update for XGBoost.
This release features a major update to categorical data support by introducing a re-coder. This re-coder saves categories in the trained model and re-codes the data during inference, to keep the categorical encoding consistent. Aside from primitive types like integers, it also supports string-based categories. The implementation works with all supported Python DataFrame implementations. (11609, 11665, 11605, 11628, 11598, 11591, 11568, 11561, 11650, 11621, 11611, 11313, 11311, 11310, 11315, 11303, 11612, 11098, 11347) See cat-recode for more information. (11297)
In addition, categorical support for Polars data frames is now available (11565).
Lastly, we removed the experimental tag for categorical feature support in this release. (11690)
We continue the work on external memory support on 3.1. In this release, XGBoost features an adaptive cache for CUDA external memory. The improved cache can split the data between CPU memory and GPU memory according to the underlying hardware and data size. (11556, 11465, 11664, 11594, 11469, 11547, 11339, 11477, 11453, 11446, 11458, 11426, 11566, 11497)
Also, there's an optional support (opt-in) for using nvcomp and the GB200 decompression engine to handle sparse data (requires nvcomp as a plugin) (11451, 11464, 11460, 11512, 11520). We improved the memory usage of quantile sketching with external memory (11641) and optimized the predictor for training (11548). To help ensure the training performance, the latest XGBoost features detection for NUMA (Non-Uniform Memory Access) node (11538, 11576) for checking cross-socket data access. We are working on additional tooling to enhance NUMA node performance. Aside from features, we have also added various documentation improvements. (11412, 11631)
Lastly, external memory support with text file input has been removed (11562). Moving forward, we will focus on iterator inputs.
Starting with 3.1, the base-score (intercept) is estimated and stored as a vector when the model has multiple outputs, be it multi-target regression or multi-class classification. This change enhances the initial estimation for multi-output models and will be the starting point for future work on vector-leaf. (11277, 11651, 11625, 11649, 11630, 11647, 11656, 11663)
Support leaf prediction with QDM on CPU. (11620)
Improve seed with mean sampling for the first iteration. (11639)
Optionally include git hash in CMake build. (11587)
This version removes some deprecated features, notably, the binary IO format, along with features deprecated in 2.0.
Binary serialization format has been removed in 3.1. The format has been formally deprecated in 1.6. (11307, 11553, 11552, 11602)
Removed old GPU-related parameters including use_gpu (pyspark), gpu_id, gpu_hist, and gpu_coord_descent. These parameters have been deprecated in 2.0. Use the device parameter instead. (11395, 11554, 11549, 11543, 11539, 11402)
Remove deprecated C functions: XGDMatrixCreateFromCSREx, XGDMatrixCreateFromCSCEx. (11514, 11513)
XGBoost starts emit warning for text inputs. (11590)
Optimize CPU inference with Array-Based Tree Traversal (11519)
Specialize for GPU dense histogram. (11443)
[sycl] Improve L1 cache locality for histogram building. (11555)
[sycl] Reduce predictor memory consumption and improve L2 locality (11603)
Fix static linking C++ libraries on macOS (11522)
Rename param.hh/cc to hist_param.hh/cc to fix xcode build (11378)
[sycl] Fix build with updated compiler (11618)
[sycl] Various fixes for fp32-only devices. (11527, 11524)
Fix compilation on android older than API 26 (11366)
Fix loading Gamma model from 1.3. (11377)
Support mixing Python metrics and built-in metrics for the skl interface. (11536)
CUDA 13 Support for PyPI with the new xgboost-cu13 package. (11677, 11662)
Remove wheels for manylinux2014. (11673)
Initial support for building variant wheels (11531, 11645, 11294)
Minimum PySpark version is now set to 3.4 (11364). In addition, the PySpark interface now checks the validation indicator column type and has a fix for None column input. (11535, 11523)
[dask] Small cleanup for the predict function. (11423)
Now that most of the deprecated features have been removed in this release, we will try to bring the latest R package back to CRAN.
Implement Booster reset. (11357)
Improvements for documentation, including having code examples in XGBoost's sphinx documentation side, and notes for R-universe release. (11369, 11410, 11685, 11316)
Support columnar inputs for cpu pipeline (11352)
Rewrite the LabeledPoint as a Java class (11545)
Various fixes and document updates. (11525, 11508, 11489, 11682)
Changes for general documentation:
Update notes about GPU memory usage. (11375)
Various fixes and updates. (11503, 11532, 11328, 11344, 11626)
Code cleanups. (11367, 11342, 11658, 11528, 11585, 11672, 11642, 11667, 11495, 11567)
Various cleanup and fixes for tests. (11405, 11389, 11396, 11456)
Support CMake 4.0 (11382)
Various CI updates and fixes (11318, 11349, 11653, 11637, 11683, 11638, 11644, 11306, 11560, 11323, 11617, 11341, 11693)
See https://github.com/dmlc/xgboost/issues/11704 for details.
See https://github.com/dmlc/xgboost/issues/11704 for details.
You can verify the downloaded packages by running the following command on your Unix shell:
Full Changelog: v3.0.4...v3.0.5
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check0776b59fad03548c447cb1e188469761241ffb3b36154dc8a59735f11d262dc2 xgboost-src-3.0.5.tar.gz
516759a0dd40da18d46fa84a945dce48a7612c9ddc4cfb3bc99df7575e889318 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Full Changelog: https://github.com/dmlc/xgboost/compare/v3.0.4...v3.0.5
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
0776b59fad03548c447cb1e188469761241ffb3b36154dc8a59735f11d262dc2 xgboost-src-3.0.5.tar.gz
516759a0dd40da18d46fa84a945dce48a7612c9ddc4cfb3bc99df7575e889318 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Remove the use of all __restrict__.
__restrict__. (#11616)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
5388cc28f4f7725edc7d9eed4c4794a818df7c76c2d39652debe6fca7df770cf xgboost-src-3.0.4.tar.gz
e43482127db15039f2ea2eb834adde885fa6a1d685a0526fed4293f863a793d5 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Fix NDCG metric with non-exp gain.
rmsle. (#11588)setNumEarlyStoppingRounds API (#11571)enable_categorical to the sklearn .apply method (#11550)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
6598adf6a073a55cc87a31e6712fc6dab938a5317aeae7134a07067d51acdf3a xgboost-src-3.0.3.tar.gz
162eb7811313eac5c55f686920b32c5c29c929872bdbc65af147c6f4f19bc38d xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Dask 2025.4.0 scheduler info compatibility (#11462) by @jrbourbeau
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
8f909899f5dc64d4173662a3efa307100713e3c2e2b831177c2e56af0e816caf xgboost-src-3.0.2.tar.gz
c169cb92fe378d99f1938da5d2830da1cef731129701db480b03dbbd04333ae2 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Use nvidia-smi to detect the driver version and handle old drivers that don't support virtual memory.
nvidia-smi to detect the driver version and handle old drivers that don't support virtual memory. (#11391)xgboost-cpu for manylinux_2_28_x86_64 (#11406)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
46e6815fd24dec7e17ed6e9327cc062da098387ee36358e3e0a43fc43939a8b1 xgboost-src-3.0.1.tar.gz
c00bc34a070d25557b06ccb684b4dff44a0f578cbe84442957742f3aba4f0c32 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
https://xgboost.readthedocs.io/en/latest/changes/v3.0.0.html
https://xgboost.readthedocs.io/en/latest/changes/v3.0.0.html
You can verify the downloaded packages by running the following command with your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
431222b47085b9c3504d77ef59cfa23ae4fe9d701085313f47217e49e8823326 xgboost-src-3.0.0.tar.gz
a5dafa6ccc1a3df3d7e3c84d61dae4dcc6921b56e0b1932309ebd519253e11b1 xgboost_r_gpu_linux.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Fix NDCG metric with non-exp gain. (11534)
Avoid using mean intercept for rmsle. (11588)
[jvm-packages] add setNumEarlyStoppingRounds API (11571)
Avoid implicit synchronization in GPU evaluation. (11542)
Remove CUDA check in the array interface handler (11386)
Fix check in GPU histogram. (11574)
Support Rapids 25.06 (11504)
Adding enable_categorical to the sklearn .apply method (11550)
Make xgboost.testing compatible with scikit-learn 1.7 (11502)
Add support for building xgboost wheels on Win-ARM64 (11572, 11597, 11559)
Dask 2025.4.0 scheduler info compatibility fix (11462)
Fix CUDA virtual memory fallback logic on WSL2 (11471)
Use nvidia-smi to detect the driver version and handle old drivers that don't support virtual memory. (11391)
Optimize deep trees for GPU external memory. (11387)
Small fix for page concatenation with external memory (11338)
Build xgboost-cpu for manylinux_2_28_x86_64 (11406)
Workaround for different Dask versions (11436)
Output models now use denormal floating-point instead of nan. (11428)
Fix aarch64 CI. (11454)
3.0.0 is a milestone for XGBoost. This note will summarize some general changes and then list package-specific updates. The bump in the major version is for a reworked R package along with a significant update to the JVM packages.
This release features a major update to the external memory implementation with improved performance, a new ~xgboost.ExtMemQuantileDMatrix for more efficient data initialization, new feature coverage including categorical data support and quantile regression support. Additionally, GPU-based external memory is reworked to support using CPU memory as a data cache. Last but not least, we worked on distributed training using external memory along with the spark package's initial support.
A new ~xgboost.ExtMemQuantileDMatrix class for fast data initialization with the hist tree method. The new class supports both CPU and GPU training. (10689, 10682, 10886, 10860, 10762, 10694, 10876)
External memory now supports distributed training (10492, 10861). In addition, the Spark package can use external memory (the host memory) when the device is GPU. The default package on maven doesn't support RMM yet. For better performance, one needs to compile XGBoost from the source for now. (11186, 11238, 11219)
Improved performance with new optimizations for both the hist-specific training and the approx (~xgboost.DMatrix) method. (10529, 10980, 10342)
New demos and documents for external memory, including distributed training. (11234, 10929, 10916, 10426, 11113)
Reduced binary cache size and memory allocation overhead by not writing the cut matrix. (10444)
More feature coverage, including categorical data and all objective functions, including quantile regression. In addition, various prediction types like SHAP values are supported. (10918, 10820, 10751, 10724)
Significant updates for the GPU-based external memory training implementation. (10924, 10895, 10766, 10544, 10677, 10615, 10927, 10608, 10711)
GPU-based external memory supports both batch-based and sampling-based training. Before the 3.0 release, XGBoost concatenates the data during training and stores the cache on disk. In 3.0, XGBoost can now stage the data on the host and fetch them by batch. (10602, 10595, 10606, 10549, 10488, 10766, 10765, 10764, 10760, 10753, 10734, 10691, 10713, 10826, 10811, 10810, 10736, 10538, 11333)
XGBoost can now utilize NVLink-C2C for GPU-based external memory training and can handle up to terabytes of data.
Support prediction cache (10707).
Automatic page concatenation for improved GPU utilization (10887).
Improved quantile sketching algorithm for batch-based inputs. See the section for new features for more info.
Optimization for nearly-dense input, see the section for optimization for more info.
See our latest document for details /tutorials/external_memory. The PyPI package (pip install) doesn't have RMM support, which is required by the GPU external memory implementation. To experiment, you can compile XGBoost from source or wait for the RAPIDS conda package to be available.
Continuing the work from the previous release, we updated the network module to improve reliability. (10453, 10756, 11111, 10914, 10828, 10735, 10693, 10676, 10349, 10397, 10566, 10526, 10349)
The timeout option is now supported for NCCL using the NCCL asynchronous mode (10850, 10934, 10945, 10930).
In addition, a new ~xgboost.collective.Config class is added for users to specify various options including timeout, tracker port, etc for distributed training. Both the Dask interface and the PySpark interface support the new configuration. (11003, 10281, 10983, 10973)
Continuing the work on the SYCL integration, there are significant improvements in the feature coverage for this release from more training parameters and more objectives to distributed training, along with various optimization (10884, 10883).
Starting with 3.0, the SYCL-plugin is close to feature-complete, users can start working on SYCL devices for in-core training and inference. Newly introduced features include:
Dask support for distributed training (10812)
Various training procedures, including split evaluation (10605, 10636), grow policy (10690, 10681), cached prediction (10701).
Updates for objective functions. (11029, 10931, 11016, 10993, 11064, 10325)
On-going work for float32-only devices. (10702)
Other related PRs (10842, 10543, 10806, 10943, 10987, 10548, 10922, 10898, 10576)
This section describes new features in the XGBoost core. For language-specific features, please visit corresponding sections.
A new initialization method for objectives that are derived from GLM. The new method is based on the mean value of the input labels. The new method changes the result of the estimated base_score. (10298, 11331)
The xgboost.QuantileDMatrix can be used with all prediction types for both CPU and GPU.
In prior releases, XGBoost makes a copy for the booster to release memory held by internal tree methods. We formalize the procedure into a new booster method ~xgboost.Booster.reset / XGBoosterReset. (11042)
OpenMP thread setting is exposed to the XGBoost global configuration. Users can use it to workaround hardcoded OpenMP environment variables. (11175)
We improved learning to rank tasks for better hyper-parameter configuration and for distributed training.
In 3.0, all three distributed interfaces, including Dask, Spark, and PySpark, support sorting the data based on query ID. The option for the ~xgboost.dask.DaskXGBRanker is true by default and can be opted out. (11146, 11007, 11047, 11012, 10823, 11023)
Also for learning to rank, a new parameter lambdarank_score_normalization is introduced to make one of the normalizations optional. (11272)
The lambdarank_normalization now uses the number of pairs when normalizing the mean pair strategy. Previously, the gradient was used for both topk and mean. 11322
We have improved GPU quantile sketching to reduce memory usage. The improvement helps the construction of the ~xgboost.QuantileDMatrix and the new ~xgboost.ExtMemQuantileDMatrix.
A new multi-level sketching algorithm is employed to reduce the overall memory usage with batched inputs.
In addition to algorithmic changes, internal memory usage estimation and the quantile container is also updated. (10761, 10843)
The change introduces two more parameters for the ~xgboost.QuantileDMatrix and ~xgboost.DataIter, namely, max_quantile_batches and min_cache_page_bytes.
More work is needed to improve the support of categorical features. This release supports plotting trees with stat for categorical nodes (11053). In addition, some preparation work is ongoing for auto re-coding categories. (11094, 11114, 11089) These are feature enhancements instead of blocking issues.
Implement weight-based feature importance for vector-leaf. (10700)
Reduced logging in the DMatrix construction. (11080)
In addition to the external memory and quantile sketching improvements, we have a number of optimizations and performance fixes.
GPU tree methods now use significantly less memory for both dense inputs and near-dense inputs. (10821, 10870)
For near-dense inputs, GPU training is much faster for both hist (about 2x) and approx.
Quantile regression on CPU now can handle imbalance trees much more efficiently. (11275)
Small optimization for DMatrix construction to reduce latency. Also, C users can now reuse the ProxyDMatrix for multiple inference calls. (11273)
CPU prediction performance for ~xgboost.QuantileDMatrix has been improved (11139) and now is on par with normal DMatrix.
Fixed a performance issue for running inference using CPU with extremely sparse ~xgboost.QuantileDMatrix (11250).
Optimize CPU training memory allocation for improved performance. (11112)
Improved RMM (rapids memory manager) integration. Now, with the help of ~xgboost.config_context, all memory allocated by XGBoost should be routed to RMM. As a bonus, all thrust algorithms now use async policy. (10873, 11173, 10712, 10712, 10562)
When used without RMM, XGBoost is more careful with its use of caching allocator to avoid holding too much device memory. (10582)
This section lists breaking changes that affect all packages.
Remove the deprecated DeviceQuantileDMatrix. (10974, 10491)
Support for saving the model in the deprecated has been removed. Users can still load old models in 3.0. (10490)
Support for the legacy (blocking) CUDA stream is removed (10607)
XGBoost now requires CUDA 12.0 or later.
Fix the quantile error metric (pinball loss) with multiple quantiles. (11279)
Fix potential access error when running prediction in multi-thread environment. (11167)
Check the correct dump format for the gblinear. (10831)
A new tutorial for advanced usage with custom objective functions. (10283, 10725)
The new online document site now shows documents for all packages including Python, R, and JVM-based packages. (11240, 11216, 11166)
Lots of enhancements. (10822, 11137, 11138, 11246, 11266, 11253, 10731, 11222, 10551, 10533)
Consistent use of cmake in documents. (10717)
Add a brief description for using the offset from the GLM setting (like Poisson). (10996)
Cleanup document for building from source. (11145)
Various fixes. (10412, 10405, 10353, 10464, 10587, 10350, 11131, 10815)
Maintenance. (11052, 10380)
The feature_weights parameter in the sklearn interface is now defined as a scikit-learn parameter. (9506)
Initial support for polars, categorical feature is not yet supported. (11126, 11172, 11116)
Reduce pandas dataframe overhead and overhead for various imports. (11058, 11068)
Better xlabel in ~xgboost.plot_importance (11009)
Validate reference dataset for training. The ~xgboost.train function now throws an error if a ~xgboost.QuantileDMatrix is used as a validation dataset without a reference. (11105)
Fix misleading errors when feature names are missing during inference (10814)
Add Stacklevel to Python warning callback. The change helps improve the error message for the Python package. (10977)
Remove circular reference in DataIter. It helps reduce memory usage. (11177)
Add checks for invalid inputs for cv. (11255)
Update Python project classifiers. (10381, 11028)
Support doc link for the sklearn module. Users can now find links to documents in a jupyter notebook. (10287)
Dask
Prevent the training from hanging due to aborted workers. (10985) This helps Dask XGBoost be robust against error. When a worker is killed, the training will fail with an exception instead of hang.
Optional support for client-side logging. (10942)
Fix LTR with empty partition and NCCL error. (11152)
Update to work with the latest Dask. (11291)
See the 3_0_features section for changes to ranking models.
See the 3_0_networking section for changes with the communication module.
PySpark
Expose Training and Validation Metrics. (11133)
Add barrier before initializing the communicator. (10938)
Extend support for columnar input to CPU (GPU-only previously). (11299)
See the 3_0_features section for changes to ranking models.
See the 3_0_networking section for changes with the communication module.
Document updates (11265).
Maintenance. (11071, 11211, 10837, 10754, 10347, 10678, 11002, 10692, 11006, 10972, 10907, 10659, 10358, 11149, 11178, 11248)
Breaking changes
Remove deprecated feval. (11051)
Remove dask from the default import. (10935) Users are now required to import the XGBoost Dask through:
from xgboost import dask as dxgb
instead of:
import xgboost as xgb
xgb.dask
The change helps avoid introducing dask into the default import set.
Bump Python requirement to 3.10. (10434)
Drop support for datatable. (11070)
We have been reworking the R package for a few releases now. In 3.0, we will start publishing a new R package on R-universe, before moving toward a CRAN update. The new package features a much more ergonomic interface, which is also more idiomatic to R speakers. In addition, a range of new features are introduced to the package. To name a few, the new package includes categorical feature support, QuantileDMatrix, and an initial implementation of the external memory training. To test the new package:
install.packages('xgboost', repos = c('https://dmlc.r-universe.dev', 'https://cloud.r-project.org'))
Also, we finally have an online documentation site for the R package featuring both vignettes and API references (11166, 11257). A good starting point for the new interface is the new xgboost() function. We won't list all the feature gains here, as there are too many! Please visit the /R-package/index for more info. There's a migration guide (11197) there if you use a previous XGBoost R package version.
Support for the MSVC build was dropped due to incompatibility with R headers. (10355, 11150)
Maintenance (11259)
Related PRs. (11171, 11231, 11223, 11073, 11224, 11076, 11084, 11081, 11072, 11170, 11123, 11168, 11264, 11140, 11117, 11104, 11095, 11125, 11124, 11122, 11108, 11102, 11101, 11100, 11077, 11099, 11074, 11065, 11092, 11090, 11096, 11148, 11151, 11159, 11204, 11254, 11109, 11141, 10798, 10743, 10849, 10747, 11022, 10989, 11026, 11060, 11059, 11041, 11043, 11025, 10674, 10727, 10745, 10733, 10750, 10749, 10744, 10794, 10330, 10698, 10687, 10688, 10654, 10456, 10556, 10465, 10337)
The XGBoost 3.0 release features a significant update to the JVM packages, and in particular, the Spark package. There are breaking changes in packaging and some parameters. Please visit the migration guide for related changes. The work brings new features and a more unified feature set between CPU and GPU implementation. (10639, 10833, 10845, 10847, 10635, 10630, 11179, 11184)
Automatic partitioning for distributed learning to rank. See the features section above (11023).
Resolve spark compatibility issue (10917)
Support missing value when constructing dmatrix with iterator (10628)
Fix transform performance issue (10925)
Honor skip.native.build option in xgboost4j-gpu (10496)
Support array features type for CPU (10937)
Change default missing value to NaN for better alignment (11225)
Don't cast to float if it's already float (10386)
Maintenance. (10982, 10979, 10978, 10673, 10660, 10835, 10836, 10857, 10618, 10627)
Code maintenance includes both refactoring (10531, 10573, 11069), cleanups (11129, 10878, 11244, 10401, 10502, 11107, 11097, 11130, 10758, 10923, 10541, 10990), and improvements for tests (10611, 10658, 10583, 11245, 10708), along with fixing various warnings in compilers and test dependencies (10757, 10641, 11062, 11226). Also, miscellaneous updates, including some dev scripts and profiling annotations (10485, 10657, 10854, 10718, 11158, 10697, 11276).
Lastly, dependency updates (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).
The CI is reworked to use RunsOn to integrate custom CI pipelines with GitHub action. The migration helps us reduce the maintenance burden and make the CI configuration more accessible to others. (11001, 11079, 10649, 11196, 11055, 10483, 11078, 11157)
Other maintenance work includes various small fixes, enhancements, and tooling updates. (10877, 10494, 10351, 10609, 11192, 11188, 11142, 10730, 11066, 11063, 10800, 10995, 10858, 10685, 10593, 11061)
See https://github.com/dmlc/xgboost/issues/11286 .
See https://github.com/dmlc/xgboost/issues/11286 .
The 2.1.4 patch release incorporates the following fixes on top of the 2.1.3 release:
The 2.1.4 patch release incorporates the following fixes on top of the 2.1.3 release:
Full Changelog: https://github.com/dmlc/xgboost/compare/v2.1.3...v2.1.4
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
b6ce5870d03cc1233cad5ff8460f670a2aff78625adfb578c0b9eec3b8b88406 xgboost-2.1.4.tar.gz
9780ba8314824eac7b8565cc2af8ea692fd4898712052a49132ac3fdf7c0ab2b xgboost_r_gpu_linux_2.1.4.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
The 2.1.3 patch release makes the following bug fixes:
The 2.1.3 patch release makes the following bug fixes:
cudf.pandas proxy objects properly (#11014).You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
90b1b7b770803299b337dd9b9206760d9c16f418403c77acce74b350c6427667 xgboost-2.1.3.tar.gz
96b41da84769920408c5733d05fa2d56b53feeefd209e3d96842cf9c266e27ea xgboost_r_gpu_linux_2.1.3.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
The 2.1.2 patch release makes the following bug fixes:
The 2.1.2 patch release makes the following bug fixes:
pip check does not fail due to a bad platform tag (#10755)poll.h and mmap (#10767)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
a84fc7d9846c24659a2ad16788a7eefa9640b19eea9bbc65f30e0a9d53c52453 xgboost-2.1.2.tar.gz
999eff38533ea79ab3a1f0da524c54f6d0abd2ef220b6dbb9ba1331703e898bc xgboost_r_gpu_linux_2.1.2.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
The 2.1.1 patch release make the following bug fixes:
The 2.1.1 patch release make the following bug fixes:
broadcast in the scatter call so that predict function won't hang (#10632) by @trivialfis/sys/fs/cgroup/cpu.max are not readable by the user (#10623) by @trivialfisIn addition, it contains several enhancements:
xgboost-cpu (#10603) by @hcho3Full Changelog: https://github.com/dmlc/xgboost/compare/v2.1.0...v2.1.1
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
eddbc5200b7c5210f2b8974b9d2a0328a30753416bfb81fdaf5040f4f7abb222 xgboost-2.1.1.tar.gz
3ba5a6e0c609bd5cc0a667d83c57457c06778bece50863e58c8bc1b4eb415fc6 xgboost_r_gpu_linux_2.1.1.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Package-specific breaking changes are outlined in respective sections. Here we list general breaking changes in this release:
We are thrilled to announce the XGBoost 2.1 release. This note will start by summarizing some general changes and then highlighting specific package updates. As we are working on a new R interface, this release will not include the R package. We'll update the R package as soon as it's ready. Stay tuned!
An important ongoing work for XGBoost, which we've been collaborating on, is to support resilience for improved scaling and federated learning on various platforms. The existing networking library in XGBoost, adopted from the RABIT project, can no longer meet the feature demand. We've revamped the RABIT module in this release to pave the way for future development. The choice of using an in-house version instead of an existing library is due to the active development status with frequent new feature requests like loading extra plugins for federated learning. The new implementation features:
Related PRs (#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).
The existing option of using MPI in RABIT is removed in the release. (#9525)
In the previous version, XGBoost statically linked NCCL, which significantly increased the binary size and led to hitting the PyPI repository limit. With the new release, we have made a significant improvement. The new release can now dynamically load NCCL from an external source, reducing the binary size. For the PyPI package, the nvidia-nccl-cu12 package will be fetched during installation. With more downstream packages reusing NCCL, we expect the user environments to be slimmer in the future as well. (#9796, #9804, #10447)
Starting from 2.1.0, XGBoost Python package will be distributed in two variants:
manylinux_2_28: for recent Linux distros with glibc 2.28 or newer. This variant comes with all features enabled.manylinux2014: for old Linux distros with glibc older than 2.28. This variant does not support GPU algorithms or federated learning.The pip package manager will automatically choose the correct variant depending on your system.
Starting from May 31, 2025, we will stop distributing the manylinux2014 variant and exclusively distribute the manylinux_2_28 variant. We made this decision so that our CI/CD pipeline won't have depend on software components that reached end-of-life (such as CentOS 7). We strongly encourage everyone to migrate to recent Linux distros in order to use future versions of XGBoost.
Note. If you want to use GPU algorithms or federated learning on an older Linux distro, you have two alternatives:
We continue the work on multi-target and vector leaf in this release:
XGBoosterTrainOneIter. This new function supports strided matrices and CUDA inputs. In addition, custom objectives now return the correct shape for prediction. (#9508)hinge objective now supports multi-target regression (#9850)Please note that the feature is still in progress and not suitable for production use.
Progress has been made on federated learning with improved support for column-split, including the following updates:
XGBoost is developing a SYCL plugin for SYCL devices, starting with the hist tree method. (#10216, #9800, #10311, #9691, #10269, #10251, #10222, #10174, #10080, #10057, #10011, #10138, #10119, #10045, #9876, #9846, #9682) XGBoost now supports launchable inference on SYCL devices, and work on adding SYCL support for training is ongoing.
Looking ahead, we plan to complete the training in the coming releases and then focus on improving test coverage for SYCL, particularly for Python tests.
Package-specific breaking changes are outlined in respective sections. Here we list general breaking changes in this release:
Universal binary JSON is now the default format for saving models (#9947, #9958, #9954, #9955). See https://github.com/dmlc/xgboost/issues/7547 for more info.XGBoosterGetModelRaw is now removed after deprecation in 1.6. (#9617)XGDMatrixSetDenseInfo and XGDMatrixSetUIntInfo are now deprecated. Use the array interface based alternatives instead.This section lists some new features that are general to all language bindings. For package-specific changes, please visit respective sections.
deviance. (#9757)lambdarank_normalization parameter. (#10094)QuantileDMatrix on CPU. (#10043)FieldEntry constructor specialization syntax error (#9980)lambdarank_pair_method. (#10098)gblinear from treating categorical features as numerical. (#9946)Here is a list of documentation changes not specific to any XGBoost package.
base_score. (#9882)from xgboost import dask instead of import xgboost.dask to avoid drawing in unnecessary dependencies for non-dask users. (#9742)verbosity=3. (#10172)Breaking changes
For the Python package, eval_metric, early_stopping_rounds, and callbacks from now removed from the fit method in the sklearn interface. They were deprecated in 1.6. Use the parameters with the same name in constructors instead. (#9986)
Features Following is a list of new features in the Python package:
cudf.pandas (#9602), torch.Tensor (#9971), and more scipy types (#9881).random_state (#9743)DMatrix with None input. (#10052)enable_categorical (#9877, #9884)Here is a list of JVM-specific changes. Like the PySpark package, the JVM package also gains stage-level scheduling.
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
28bec8e821b1fefcea722d96add66024adba399063f723bc5c815f7af4a5f5e4 xgboost-2.1.0.tar.gz
60c715d8c97ef710185469b27f30303b6efa655600d035963f96e6acf65f4dac xgboost_r_gpu_linux_2.1.0.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
The 2.1.4 patch release incorporates the following fixes on top of the 2.1.3 release:
XGBoost is now compatible with scikit-learn 1.6 (#11021, #11162)
Build wheels with CUDA 12.8 and enable Blackwell support (#11187, #11202)
Adapt to RMM 25.02 logger changes (#11153)
The 2.1.3 patch release makes the following bug fixes:
[pyspark] Support large model size (#10984).
Fix rng for the column sampler (#10998).
Handle cudf.pandas proxy objects properly (#11014).
The 2.1.2 patch release makes the following bug fixes:
Clean up and modernize release-artifacts.py (#10818)
Fix ellpack categorical feature with missing values. (#10906)
Fix unbiased ltr with training continuation. (#10908)
Fix potential race in feature constraint. (#10719)
Fix boolean array for arrow-backed DF. (#10527)
Ensure that pip check does not fail due to a bad platform tag (#10755)
Check cub errors (#10721)
Limit the maximum number of threads. (#10872)
Fixes for large size clusters. (#10880)
POSIX compliant poll.h and mmap (#10767)
The 2.1.1 patch release makes the following bug fixes:
[Dask] Disable broadcast in the scatter call so that predict function won't hang (#10632)
[Dask] Handle empty partitions correctly (#10559)
Fix federated learning for the encrypted GRPC backend (#10503)
Fix a race condition in column splitter (#10572)
Gracefully handle cases where system files like /sys/fs/cgroup/cpu.max are not readable by the user (#10623)
Fix build and C++ tests for FreeBSD (#10480)
Clarify the requirement Pandas 1.2+ (#10476)
More robust endianness detection in R package build (#10642)
In addition, it contains several enhancements:
Publish JVM packages targeting Linux ARM64 (#10487)
Publish a CPU-only wheel under name xgboost-cpu (#10603)
Support building with CUDA Toolkit 12.5 and latest CCCL (#10624, #10633, #10574)
We are thrilled to announce the XGBoost 2.1 release. This note will start by summarizing some general changes and then highlighting specific package updates. As we are working on a new R interface, this release will not include the R package. We'll update the R package as soon as it's ready. Stay tuned!
An important ongoing work for XGBoost, which we've been collaborating on, is to support resilience for improved scaling and federated learning on various platforms. The existing networking library in XGBoost, adopted from the RABIT project, can no longer meet the feature demand. We've revamped the RABIT module in this release to pave the way for future development. The choice of using an in-house version instead of an existing library is due to the active development status with frequent new feature requests like loading extra plugins for federated learning. The new implementation features:
Both CPU and GPU communication (based on NCCL).
A reusable tracker for both the Python package and JVM packages. With the new release, the JVM packages no longer require Python as a runtime dependency.
Supports federated communication patterns for both CPU and GPU.
Supports timeout. The high-level interface parameter is currently hard-coded to 30 minutes, which we plan to improve.
Supports significantly more data types.
Supports thread-based workers.
Improved handling for worker errors, including better error messages when one of the peers dies during training.
Work with IPv6. Currently, this is only supported by the dask interface.
Built-in support for various operations like broadcast, allgatherV, allreduce, etc.
Related PRs (#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).
The existing option of using MPI in RABIT is removed in the release. (#9525)
In the previous version, XGBoost statically linked NCCL, which significantly increased the binary size and led to hitting the PyPI repository limit. With the new release, we have made a significant improvement. The new release can now dynamically load NCCL from an external source, reducing the binary size. For the PyPI package, the nvidia-nccl-cu12 package will be fetched during installation. With more downstream packages reusing NCCL, we expect the user environments to be slimmer in the future as well. (#9796, #9804, #10447)
Starting from 2.1.0, XGBoost Python package will be distributed in two variants:
manylinux_2_28: for recent Linux distros with glibc 2.28 or newer. This variant comes with all features enabled.
manylinux2014: for old Linux distros with glibc older than 2.28. This variant does not support GPU algorithms or federated learning.
The pip package manager will automatically choose the correct variant depending on your system.
Starting from May 31, 2025, we will stop distributing the manylinux2014 variant and exclusively distribute the manylinux_2_28 variant. We made this decision so that our CI/CD pipeline won't have depend on software components that reached end-of-life (such as CentOS 7). We strongly encourage everyone to migrate to recent Linux distros in order to use future versions of XGBoost.
Note. If you want to use GPU algorithms or federated learning on an older Linux distro, you have two alternatives:
Upgrade to a recent Linux distro with glibc 2.28+. OR
Build XGBoost from the source.
We continue the work on multi-target and vector leaf in this release:
Revise the support for custom objectives with a new API, XGBoosterTrainOneIter. This new function supports strided matrices and CUDA inputs. In addition, custom objectives now return the correct shape for prediction. (#9508)
The hinge objective now supports multi-target regression (#9850)
Fix the gain calculation with vector leaf (#9978)
Support graphviz plot for multi-target tree. (#10093)
Fix multi-output with alternating strategies. (#9933)
Please note that the feature is still in progress and not suitable for production use.
Progress has been made on federated learning with improved support for column-split, including the following updates:
Column split work for both CPU and GPU. In addition, categorical data is now compatible with column split. (#9562, #9609, #9611, #9628, #9539, #9578, #9685, #9623, #9613, #9511, #9384, #9595)
The use of UBJson to serialize split entries for column split has been implemented, aiding vector-leaf with column-based data split. (#10059, #10055, #9702)
Documentation and small fixes. (#9610, #9552, #9614, #9867)
XGBoost is developing a SYCL plugin for SYCL devices, starting with the hist tree method. (#10216, #9800, #10311, #9691, #10269, #10251, #10222, #10174, #10080, #10057, #10011, #10138, #10119, #10045, #9876, #9846, #9682) XGBoost now supports launchable inference on SYCL devices, and that work on adding SYCL support for training is ongoing.
Looking ahead, we plan to complete the training in coming releases and then focus on improving test coverage for SYCL, particularly for Python tests.
Implement column sampler in CUDA for GPU-based tree methods. This helps us get faster training time when column sampling is employed (#9785)
CMake LTO and CUDA arch (#9677)
Small optimization to external memory with a thread pool. This reduces the number of threads launched during iteration. (#9605, #10288, #10374)
Package-specific breaking changes are outlined in respective sections. Here we list general breaking changes in this release:
The command line interface is deprecated due to the increasing complexity of the machine learning ecosystem. Building a machine learning model using a command shell is no longer feasible and could mislead newcomers. (#9485)
Universal binary JSON is now the default format for saving models (#9947, #9958, #9954, #9955). See https://github.com/dmlc/xgboost/issues/7547 for more info.
The XGBoosterGetModelRaw is now removed after deprecation in 1.6. (#9617)
Drop support for loading remote files. This feature lacks any test. Users are encouraged to use dedicated libraries to fetch remote content. (#9504)
Remove the dense libsvm parser plugin. This plugin is never tested or documented (#9799)
XGDMatrixSetDenseInfo and XGDMatrixSetUIntInfo are now deprecated. Use the array interface based alternatives instead.
This section lists some new features that are general to all language bindings. For package-specific changes, please visit respective sections.
Adopt a new XGBoost logo (#10270)
Now supports dataframe data format in native XGBoost. This improvement enhances performance and reduces memory usage when working with dataframe-based structures such as pandas, arrow, and R dataframe. (#9828, #9616, #9905)
Change default metric for gamma regression to deviance. (#9757)
Normalization for learning to rank is now optional with the introduction of the new lambdarank_normalization parameter. (#10094)
Contribution prediction with QuantileDMatrix on CPU. (#10043)
XGBoost on macos no longer bundles OpenMP runtime. Users can install the latest runtime from their dependency manager of choice. (#10440). Along with which, JVM packages on MacoOS are now built with OpenMP support (#10449).
Fix training with categorical data from external memory. (#10433)
Fix compilation with CTK-12. (#10123)
Fix inconsistent runtime library on Windows. (#10404)
Fix default metric configuration. (#9575)
Fix feature names with special characters. (#9923)
Fix global configuration for external memory training. (#10173)
Disable column sample by node for the exact tree method. (#10083)
Fix the FieldEntry constructor specialization syntax error (#9980)
Fix pairwise objective with NDCG metric along with custom gain. (#10100)
Fix the default value for lambdarank_pair_method. (#10098)
Fix UBJSON with boolean values. No existing code is affected by this fix. (#10054)
Be more lenient on floating point errors for AUC. This prevents the AUC > 1.0 error. (#10264)
Check support status for categorical features. This prevents gblinear from treating categorical features as numerical. (#9946)
Here is a list of documentation changes not specific to any XGBoost package.
A new coarse map for XGBoost features to assist development. (#10310)
New language binding consistency guideline. (#9755, #9866)
Fixes, cleanups, small updates (#9501, #9988, #10023, #10013, #10143, #9904, #10179, #9781, #10340, #9658, #10182, #9822)
Update document for parameters (#9900)
Brief introduction to base_score. (#9882)
Mention data consistency for categorical features. (#9678)
Other than the changes in networking, we have some optimizations and document updates in dask:
Filter models on workers instead of clients; this prevents an OOM error on the client machine. (#9518)
Users are now encouraged to use from xgboost import dask instead of import xgboost.dask to avoid drawing in unnecessary dependencies for non-dask users. (#9742)
Add seed to demos. (#10009)
New document for using dask XGBoost with k8s. (#10271)
Workaround potentially unaligned pointer from an empty partition. (#10418)
Workaround a race condition in the latest dask. (#10419)
[doc] Add typing to dask demos. (#10207)
PySpark has several new features along with some small fixes:
Support stage-level scheduling for training on various platforms, including yarn/k8s. (#9519, #10209, #9786, #9727)
Support GPU-based transform methods (#9542)
Avoid expensive repartition when appropriate. (#10408)
Refactor the logging and the GPU code path (#10077, 9724)
Sort workers by task ID. This helps the PySpark interface obtain deterministic results. (#10220)
Fix PySpark with verbosity=3. (#10172)
Fix spark estimator doc. (#10066)
Rework transform for improved code reusing. (#9292)
For the Python package, eval_metric, early_stopping_rounds, and callbacks from now removed from the fit method in the sklearn interface. They were deprecated in 1.6. Use the parameters with the same name in constructors instead. (#9986)
Following is a list of new features in the Python package:
Support sample weight in sklearn custom objective. (#10050)
New supported data types, including cudf.pandas (#9602), torch.Tensor (#9971), and more scipy types (#9881).
Support pandas 2.2 and numpy 2.0. (#10266, #9557, #10252, #10175)
Support the latest rapids including rmm. (#10435)
Improved data cache option in data iterator. (#10286)
Accept numpy generators as random_state (#9743)
Support returning base score as intercept in the sklearn interface. (#9486)
Support arrow through pandas ext types. This is built on top of the new DataFrame API in XGBoost. See general features for more info. (#9612)
Handle np integer in model slice and prediction. (#10007)
Improved sklearn tags support. (#10230)
The base image for building Linux binary wheels is updated to rockylinux8. (#10399)
Improved handling for float128. (#10322)
Fix DMatrix with None input. (#10052)
Fix native library discovery logic. (#9712, #9860)
Fix using categorical data with the score function for the ranker. (#9753)
Clarify the effect of enable_categorical (#9877, #9884)
Update the Python introduction. (#10033)
Fixes. (#10058, #9991, #9573)
Use array interface in Python prediction return. (#9855)
Synthesize the AMES housing dataset for tests. (#9963)
linter, formatting, etc. (#10296, #10014)
Tests. (#9962, #10285, #9997, #9943, #9934)
Here is a list of JVM-specific changes. Like the PySpark package, the JVM package also gains stage-level scheduling.
Support stage-level scheduling (#9775)
Allow JVM-Package to access inplace predict method (#9167)
Support JDK 17 for test (#9959)
Various dependency updates.(#10211, #10210, #10217, #10156, #10070, #9809, #9517, #10235, #10276, #9331, #10335, #10309, #10240, #10244, #10260, #9489, #9326, #10294, #10197, #10196, #10193, #10202, #10191, #10188, #9328, #9311, #9951, #10151, #9827, #9820, #10253)
Update and fixes for document. (#9752, #10385)
Remove rabit checkpoint. (#9599)
Fixes memory leak in error handling. (#10307)
Fixes group col for GPU packages (#10254)
Add formatting and linting requirements to the CMake script. (#9653, #9641, #9637, #9728, #9674)
Refactors and cleanups (#10085, #10120, #10074, #9645, #9992, #9568, #9731, #9527).
Update nvtx. (#10227)
Tests. (#9499, #9553, #9737)
Throw error for 32-bit architectures (#10005)
Helpers. (#9505, #9572, #9750, #9541, #9983, #9714)
Fix mingw hanging on regex in context (#9729)
Linters. (#10010, #9634)
Meta info about the Python package is uploaded for easier parsing (#10295)
Various dependency updates (#10274, #10280, #10278, #10275, #10320, #10305, #10267, #9544, #10228, #10133, #10187, #9857, #10042, #10268, #9654, #9835)
GitHub Action fixes (#10067, #10134, #10064)
Improved support for Apple devices. (#10225, #9886, #9699, #9748, #9704, #9749)
Stop Windows pipeline upon a failing pytest (#10003)
Cancel GH Action job if a newer commit is published (#10088)
CI images. (#9666, #10201, #9932)
Test R package with CMake (#10087)
Test building for the 32-bit arch (#10021)
Test federated plugin using GitHub action. (#10336)
See https://github.com/dmlc/xgboost/issues/10356 for details.
See https://github.com/dmlc/xgboost/issues/10356 for details.
The 2.0.3 patch release make the following bug fixes:
The 2.0.3 patch release make the following bug fixes:
Full Changelog: https://github.com/dmlc/xgboost/compare/v2.0.2...v2.0.3
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
7c4bd1cf6162d335fd20a8168a54dd11508342f82fbf381a80c02ac57be0bce4 xgboost-2.0.3.tar.gz
d0c3499504133a8ea0043da2974c51cc71aae792f0719080bc227d7add8fb881 xgboost_r_gpu_win64_2.0.3.tar.gz
ee47da5b21231965b1f054d191a5418543377f4ba0d0615a593a6f99d1832ca1 xgboost_r_gpu_linux_2.0.3.tar.gz
Experimental binary packages for R with CUDA enabled
The 2.0.2 patch releases make the following bug fixes:
The 2.0.2 patch releases make the following bug fixes:
This is a patch release for bug fixes.
This is a patch release for bug fixes.
In addition, this is the first release where the JVM package is distributed with native support for Apple Silicon.
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
529e9d0f88c2a7abae833f05b7d1e7e7ce01de20481ea60f6ebb6eb7fc96ba69 xgboost.tar.gz
25342c91e7cda98b1362b70282b286c2e4f3e996b518fb590c1303f53f39f188 xgboost_r_gpu_win64_2.0.1.tar.gz
3d8cde1160ab135c393b8092ce0475709dff318024022b735a253d968f9711b3 xgboost_r_gpu_linux_2.0.1.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Other than the aforementioned change with the device parameter, here's a list of breaking changes affecting all packages.
We are excited to announce the release of XGBoost 2.0. This note will begin by covering some overall changes and then highlight specific updates to the package.
We have been working on vector-leaf tree models for multi-target regression, multi-label classification, and multi-class classification in version 2.0. Previously, XGBoost would build a separate model for each target. However, with this new feature that's still being developed, XGBoost can build one tree for all targets. The feature has multiple benefits and trade-offs compared to the existing approach. It can help prevent overfitting, produce smaller models, and build trees that consider the correlation between targets. In addition, users can combine vector leaf and scalar leaf trees during a training session using a callback. Please note that the feature is still a working in progress, and many parts are not yet available. See #9043 for the current status. Related PRs: (#8538, #8697, #8902, #8884, #8895, #8898, #8612, #8652, #8698, #8908, #8928, #8968, #8616, #8922, #8890, #8872, #8889, #9509) Please note that, only the hist (default) tree method on CPU can be used for building vector leaf trees at the moment.
device parameter.A new device parameter is set to replace the existing gpu_id, gpu_hist, gpu_predictor, cpu_predictor, gpu_coord_descent, and the PySpark specific parameter use_gpu. Onward, users need only the device parameter to select which device to run along with the ordinal of the device. For more information, please see our document page (https://xgboost.readthedocs.io/en/stable/parameter.html#general-parameters) . For example, with device="cuda", tree_method="hist", XGBoost will run the hist tree method on GPU. (#9363, #8528, #8604, #9354, #9274, #9243, #8896, #9129, #9362, #9402, #9385, #9398, #9390, #9386, #9412, #9507, #9536). The old behavior of gpu_hist is preserved but deprecated. In addition, the predictor parameter is removed.
hist is now the default tree methodStarting from 2.0, the hist tree method will be the default. In previous versions, XGBoost chooses approx or exact depending on the input data and training environment. The new default can help XGBoost train models more efficiently and consistently. (#9320, #9353)
There's initial support for using the approx tree method on GPU. The performance of the approx is not yet well optimized but is feature complete except for the JVM packages. It can be accessed through the use of the parameter combination device="cuda", tree_method="approx". (#9414, #9399, #9478). Please note that the Scala-based Spark interface is not yet supported.
XGBoost has a new parameter max_cached_hist_node for users to limit the CPU cache size for histograms. It can help prevent XGBoost from caching histograms too aggressively. Without the cache, performance is likely to decrease. However, the size of the cache grows exponentially with the depth of the tree. The limit can be crucial when growing deep trees. In most cases, users need not configure this parameter as it does not affect the model's accuracy. (#9455, #9441, #9440, #9427, #9400).
Along with the cache limit, XGBoost also reduces the memory usage of the hist and approx tree method on distributed systems by cutting the size of the cache by half. (#9433)
There is some exciting development around external memory support in XGBoost. It's still an experimental feature, but the performance has been significantly improved with the default hist tree method. We replaced the old file IO logic with memory map. In addition to performance, we have reduced CPU memory usage and added extensive documentation. Beginning from 2.0.0, we encourage users to try it with the hist tree method when the memory saving by QuantileDMatrix is not sufficient. (#9361, #9317, #9282, #9315, #8457)
We created a brand-new implementation for the learning-to-rank task. With the latest version, XGBoost gained a set of new features for ranking task including:
lambdarank_pair_method for choosing the pair construction strategy.lambdarank_num_pair_per_sample for controlling the number of samples for each group.lambdarank_unbiased parameter.NDCG using the ndcg_exp_gain parameter.NDCG is now the default objective function.XGBRanker.For more information, please see the tutorial. Related PRs: (#8771, #8692, #8783, #8789, #8790, #8859, #8887, #8893, #8906, #8931, #9075, #9015, #9381, #9336, #8822, #9222, #8984, #8785, #8786, #8768)
In the previous version, base_score was a constant that could be set as a training parameter. In the new version, XGBoost can automatically estimate this parameter based on input labels for optimal accuracy. (#8539, #8498, #8272, #8793, #8607)
The XGBoost algorithm now supports quantile regression, which involves minimizing the quantile loss (also called "pinball loss"). Furthermore, XGBoost allows for training with multiple target quantiles simultaneously with one tree per quantile. (#8775, #8761, #8760, #8758, #8750)
Both objectives use adaptive trees due to the lack of proper Hessian values. In the new version, XGBoost can scale the leaf value with the learning rate accordingly. (#8866)
Using the Python or the C package, users can export the quantile values (not to be confused with quantile regression) used for the hist tree method. (#9356)
We made progress on column-based split for federated learning. In 2.0, both approx, hist, and hist with vector leaf can work with column-based data split, along with support for vertical federated learning. Work on GPU support is still on-going, stay tuned. (#8576, #8468, #8442, #8847, #8811, #8985, #8623, #8568, #8828, #8932, #9081, #9102, #9103, #9124, #9120, #9367, #9370, #9343, #9171, #9346, #9270, #9244, #8494, #8434, #8742, #8804, #8710, #8676, #9020, #9002, #9058, #9037, #9018, #9295, #9006, #9300, #8765, #9365, #9060)
After the initial introduction of the PySpark interface, it has gained some new features and optimizations in 2.0.
use_gpu is deprecated. The device parameter is preferred.Here's a list of new features that don't have their own section and yet are general to all language bindings.
These optimizations are general to all language bindings. For language-specific optimization, please visit the corresponding sections.
array_interface on CPU (like numpy) is significantly improved. (#9090)Other than the aforementioned change with the device parameter, here's a list of breaking changes affecting all packages.
numpy.ndarray instead of relying on text inputs. See https://github.com/dmlc/xgboost/issues/9472 for more info.Some noteworthy bug fixes that are not related to specific language bindings are listed in this section.
inf is checked during data construction. (#8911)updater parameter is used instead of the tree_method parameter (#9355)\t\n in feature names for JSON model dump. (#9474)~ on Unix (#9463). In addition, all path inputs are required to be encoded in UTF-8 (#9448, #9443)Aside from documents for new features, we have many smaller updates to improve user experience, from troubleshooting guides to typo fixes.
plot_importance plot (#8540)__half type, and no data copy is made. (#8487, #9207, #8481)Series and Python primitive types in inplace_predict and QuantileDMatrix (#8547, #8542)sample_weight. (#8706)xgboost.dask.train (#9421)QuantileDMatrix for efficiency. (#8666, #9445)setup.py is now replaced with the new configuration file pyproject.toml. Along with this, XGBoost now supports Python 3.11. (#9021, #9112, #9114, #9115) Consult the latest documentation for the updated instructions to build and install XGBoost.DataIter now accepts only keyword arguments. (#9431)DaskXGBClassifier.classes_ to an array (#8452)best_iteration only if early stopping is used to be consistent with documented behavior. (#9403)device parameter section, the predictor parameter is now removed. (#9129)save_model call for the scikit-learn interface. (#8963)ntree_limit in the python package. This has been deprecated in previous versions. (#8345)black and isort for code formatting (#8420, #8748, #8867)enable_categorical to True in predict. (#8592)NA. (#9522)Following are changes specific to various JVM-based packages.
ResultStage to ShuffleMapStage (#9423)Revised support for flink (#9046)
Breaking changes
DeviceQuantileDmatrix into QuantileDMatrix (#8461)Maintenance (#9253, #9166, #9395, #9389, #9224, #9233, #9351, #9479)
CI bot PRs We employed GitHub dependent bot to help us keep the dependencies up-to-date for JVM packages. With the help from the bot, we have cleared up all the dependencies that are lagging behind (#8501, #8507).
Here's a list of dependency update PRs including those made by dependent bots (#8456, #8560, #8571, #8561, #8562, #8600, #8594, #8524, #8509, #8548, #8549, #8533, #8521, #8534, #8532, #8516, #8503, #8531, #8530, #8518, #8512, #8515, #8517, #8506, #8504, #8502, #8629, #8815, #8813, #8814, #8877, #8876, #8875, #8874, #8873, #9049, #9070, #9073, #9039, #9083, #8917, #8952, #8980, #8973, #8962, #9252, #9208, #9131, #9136, #9219, #9160, #9158, #9163, #9184, #9192, #9265, #9268, #8882, #8837, #8662, #8661, #8390, #9056, #8508, #8925, #8920, #9149, #9230, #9097, #8648, #9203, #8593).
Maintenance work includes refactoring, fixing small issues that don't affect end users. (#9256, #8627, #8756, #8735, #8966, #8864, #8747, #8892, #9057, #8921, #8949, #8941, #8942, #9108, #9125, #9155, #9153, #9176, #9447, #9444, #9436, #9438, #9430, #9200, #9210, #9055, #9014, #9004, #8999, #9154, #9148, #9283, #9246, #8888, #8900, #8871, #8861, #8858, #8791, #8807, #8751, #8703, #8696, #8693, #8677, #8686, #8665, #8660, #8386, #8371, #8410, #8578, #8574, #8483, #8443, #8454, #8733)
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
de3a56c3d08a818bc1ea90c0476e28b937e10e0736b3ed4e27e22b43e8072ec1 xgboost-2.0.0.tar.gz
a23d965005e494ad9147cfaed1153e52ae238a8ad03ae9aa9aed83526ce7e150 xgboost_r_gpu_win64_2.0.0.tar.gz
c1a633a02cd7de14701b7814e9d81220716592d1891a33e265e76e54ce0e8e11 xgboost_r_gpu_linux_2.0.0.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball
Roadmap: https://github.com/dmlc/xgboost/projects/2 Release note: https://github.com/dmlc/xgboost/pull/9484 Release status: https://github.com/dmlc/xg
Roadmap: https://github.com/dmlc/xgboost/projects/2 Release note: https://github.com/dmlc/xgboost/pull/9484 Release status: https://github.com/dmlc/xgboost/issues/9497
This is a patch release for bug fixes. The CRAN package for the R binding is kept at 1.7.5.
This is a patch release for bug fixes. The CRAN package for the R binding is kept at 1.7.5.
QuantileDMatrix. (#9096)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
0a54300dd274b98b7f039acffa006bec4875dace041fd9288422306fe7c379ca xgboost.tar.gz
990fb3c54be7ce53365389f2eb82ce3c1f2e78735b4605ddd2ddb0d47a15d3c3 xgboost_r_gpu_linux_1.7.6.tar.gz
a48fc64bce774bb76eddade6dc6df1d4fc25199a0c17dc66cdfa50cedd3282ad xgboost_r_gpu_win64_1.7.6.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball Link in GitHub release assets
This is a patch release for bug fixes.
This is a patch release for bug fixes.
You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
69a8cf4958e2cea5d492948968d765b856f60d336fbd4367d8176de95898ad7a xgboost.tar.gz
0098f8d1cf5646d75c7d9dafa7e11b8d57441384f86a004b181cd679ef9677d1 xgboost_r_gpu_linux_1.7.5.tar.gz
a23b9744fcff8b53325604935b239c4cfef8a047ca5f4e57ea2b1011382314ee xgboost_r_gpu_win64_1.7.5.tar.gz
Experimental binary packages for R with CUDA enabled
Source tarball Link in GitHub release assets
This is a patch release for bug fixes.
This is a patch release for bug fixes.
xgboost_r_gpu_win64_1.7.4.tar.gz: Download
This is a patch release for bug fixes.
This is a patch release for bug fixes.
get_params no longer returns internally configured values. (#8634)You can verify the downloaded packages by running the following command on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
0b6aa86b93aec2b3e7ec6f53a696f8bbb23e21a03b369dc5a332c55ca57bc0c4 xgboost.tar.gz
This is a patch release for bug fixes.
This is a patch release for bug fixes.
Work with newer thrust and libcudacxx (#8432)
Support null value in CUDA array interface namespace. (#8486)
Use getsockname instead of SO_DOMAIN on AIX. (#8437)
[pyspark] Make QDM optional based on a cuDF check (#8471)
[pyspark] sort qid for SparkRanker. (#8497)
[dask] Properly await async method client.wait_for_workers. (#8558)
[R] Fix CRAN test notes. (#8428)
[doc] Fix outdated document [skip ci]. (#8527)
[CI] Fix github action mismatched glibcxx. (#8551)
You can verify the downloaded packages by running this on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
15be5a96e86c3c539112a2052a5be585ab9831119cd6bc3db7048f7e3d356bac xgboost_r_gpu_linux_1.7.2.tar.gz
0dd38b08f04ab15298ec21c4c43b17c667d313eada09b5a4ac0d35f8d9ba15d7 xgboost_r_gpu_win64_1.7.2.tar.gz
This is a patch release to incorporate the following hotfix:
This is a patch release to incorporate the following hotfix:
Nothing published for this version
Breaking changes made in the 1.7 release are summarized below.
Note. The source distribution of Python XGBoost 1.7.0 was defective (#8415). Since PyPI does not allow us to replace existing artifacts, we released 1.7.0.post0 version to upload the new source distribution. Everything in 1.7.0.post0 is identical to 1.7.0 otherwise.
We are excited to announce the feature packed XGBoost 1.7 release. The release note will walk through some of the major new features first, then make a summary for other improvements and language-binding-specific changes.
XGBoost 1.7 features initial support for PySpark integration. The new interface is adapted from the existing PySpark XGBoost interface developed by databricks with additional features like QuantileDMatrix and the rapidsai plugin (GPU pipeline) support. The new Spark XGBoost Python estimators not only benefit from PySpark ml facilities for powerful distributed computing but also enjoy the rest of the Python ecosystem. Users can define a custom objective, callbacks, and metrics in Python and use them with this interface on distributed clusters. The support is labeled as experimental with more features to come in future releases. For a brief introduction please visit the tutorial on XGBoost's document page. (#8355, #8344, #8335, #8284, #8271, #8283, #8250, #8231, #8219, #8245, #8217, #8200, #8173, #8172, #8145, #8117, #8131, #8088, #8082, #8085, #8066, #8068, #8067, #8020, #8385)
Due to its initial support status, the new interface has some limitations; categorical features and multi-output models are not yet supported.
More progress on the experimental support for categorical features. In 1.7, XGBoost can handle missing values in categorical features and features a new parameter max_cat_threshold, which limits the number of categories that can be used in the split evaluation. The parameter is enabled when the partitioning algorithm is used and helps prevent over-fitting. Also, the sklearn interface can now accept the feature_types parameter to use data types other than dataframe for categorical features. (#8280, #7821, #8285, #8080, #7948, #7858, #7853, #8212, #7957, #7937, #7934)
An exciting addition to XGBoost is the experimental federated learning support. The federated learning is implemented with a gRPC federated server that aggregates allreduce calls, and federated clients that train on local data and use existing tree methods (approx, hist, gpu_hist). Currently, this only supports horizontal federated learning (samples are split across participants, and each participant has all the features and labels). Future plans include vertical federated learning (features split across participants), and stronger privacy guarantees with homomorphic encryption and differential privacy. See Demo with NVFlare integration for example usage with nvflare.
As part of the work, XGBoost 1.7 has replaced the old rabit module with the new collective module as the network communication interface with added support for runtime backend selection. In previous versions, the backend is defined at compile time and can not be changed once built. In this new release, users can choose between rabit and federated. (#8029, #8351, #8350, #8342, #8340, #8325, #8279, #8181, #8027, #7958, #7831, #7879, #8257, #8316, #8242, #8057, #8203, #8038, #7965, #7930, #7911)
The feature is available in the public PyPI binary package for testing.
Before 1.7, XGBoost has an internal data structure called DeviceQuantileDMatrix (and its distributed version). We now extend its support to CPU and renamed it to QuantileDMatrix. This data structure is used for optimizing memory usage for the hist and gpu_hist tree methods. The new feature helps reduce CPU memory usage significantly, especially for dense data. The new QuantileDMatrix can be initialized from both CPU and GPU data, and regardless of where the data comes from, the constructed instance can be used by both the CPU algorithm and GPU algorithm including training and prediction (with some overhead of conversion if the device of data and training algorithm doesn't match). Also, a new parameter ref is added to QuantileDMatrix, which can be used to construct validation/test datasets. Lastly, it's set as default in the scikit-learn interface when a supported tree method is specified by users. (#7889, #7923, #8136, #8215, #8284, #8268, #8220, #8346, #8327, #8130, #8116, #8103, #8094, #8086, #7898, #8060, #8019, #8045, #7901, #7912, #7922)
The mean absolute error is a new member of the collection of objectives in XGBoost. It's noteworthy since MAE has zero hessian value, which is unusual to XGBoost as XGBoost relies on Newton optimization. Without valid Hessian values, the convergence speed can be slow. As part of the support for MAE, we added line searches into the XGBoost training algorithm to overcome the difficulty of training without valid Hessian values. In the future, we will extend the line search to other objectives where it's appropriate for faster convergence speed. (#8343, #8107, #7812, #8380)
With the help of the pyodide project, you can now run XGBoost on browsers. (#7954, #8369)
With the growing adaption of the new internet protocol, XGBoost joined the club. In the latest release, the Dask interface can be used on IPv6 clusters, see XGBoost's Dask tutorial for details. (#8225, #8234)
We have new optimizations for both the hist and gpu_hist tree methods to make XGBoost's training even more efficient.
Hist Hist now supports optional by-column histogram build, which is automatically configured based on various conditions of input data. This helps the XGBoost CPU hist algorithm to scale better with different shapes of training datasets. (#8233, #8259). Also, the build histogram kernel now can better utilize CPU registers (#8218)
GPU Hist
GPU hist performance is significantly improved for wide datasets. GPU hist now supports batched node build, which reduces kernel latency and increases throughput. The improvement is particularly significant when growing deep trees with the default depthwise policy. (#7919, #8073, #8051, #8118, #7867, #7964, #8026)
Breaking changes made in the 1.7 release are summarized below.
grow_local_histmaker updater is removed. This updater is rarely used in practice and has no test. We decided to remove it and focus have XGBoot focus on other more efficient algorithms. (#7992, #8091)rabit module is replaced with the new collective module. It's a drop-in replacement with added runtime backend selection, see the federated learning section for more details (#8257)Before diving into package-specific changes, some general new features other than those listed at the beginning are summarized here.
DMatrix and QuantileDMatrix can get the data from XGBoost. In previous versions, only getters for meta info like labels are available. The new method is available in Python (DMatrix::get_data) and C. (#8269, #8323)Some noteworthy bug fixes that are not related to specific language binding are listed in this section.
Python 3.8 is now the minimum required Python version. (#8071)
More progress on type hint support. Except for the new PySpark interface, the XGBoost module is fully typed. (#7742, #7945, #8302, #7914, #8052)
XGBoost now validates the feature names in inplace_predict, which also affects the predict function in scikit-learn estimators as it uses inplace_predict internally. (#8359)
Users can now get the data from DMatrix using DMatrix::get_data or QuantileDMatrix::get_data.
Show libxgboost.so path in build info. (#7893)
Raise import error when using the sklearn module while scikit-learn is missing. (#8049)
Use config_context in the sklearn interface. (#8141)
Validate features for inplace prediction. (#8359)
Pandas dataframe handling is refactored to reduce data fragmentation. (#7843)
Support more pandas nullable types (#8262)
Remove pyarrow workaround. (#7884)
Binary wheel size We aim to enable as many features as possible in XGBoost's default binary distribution on PyPI (package installed with pip), but there's a upper limit on the size of the binary wheel. In 1.7, XGBoost reduces the size of the wheel by pruning unused CUDA architectures. (#8179, #8152, #8150)
Fixes Some noteworthy fixes are listed here:
Fix potential error in DMatrix constructor on 32-bit platform. (#8369)
Maintenance work
isort and black for selected files. (#8137, #8096)use_label_encoder in XGBClassifier. The label encoder has already been deprecated and removed in the previous version. These changes only affect the indicator parameter (#7822)Documents
We summarize improvements for the R package briefly here:
The consistency between JVM packages and other language bindings is greatly improved in 1.7, improvements range from model serialization format to the default value of hyper-parameters.
timeoutRequestWorkers is now removed. With the support for barrier mode, this parameter is no longer needed. (#7839)pytest-timeout is added as an optional dependency for running Python tests to keep the test time in check. (#7772, #8291, #8286, #8276, #8306, #8287, #8243, #8313, #8235, #8288, #8303, #8142, #8092, #8333, #8312, #8348)Roadmap: https://github.com/dmlc/xgboost/issues/8282 Release note: https://github.com/dmlc/xgboost/pull/8374
Roadmap: https://github.com/dmlc/xgboost/issues/8282 Release note: https://github.com/dmlc/xgboost/pull/8374
Release status: https://github.com/dmlc/xgboost/issues/8366
This is a patch release for bug fixes.
This is a patch release for bug fixes.
This is a patch release for bug fixes and Spark barrier mode support. The R package is unchanged.
This is a patch release for bug fixes and Spark barrier mode support. The R package is unchanged.
We replaced the old parallelism tracker with spark barrier mode to improve the robustness of the JVM package and fix the GPU training pipeline.
You can verify the downloaded packages by running this on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
2633f15e7be402bad0660d270e0b9a84ad6fcfd1c690a5d454efd6d55b4e395b ./xgboost.tar.gz
Remove jackson from dependency, which fixes CVE-2020-36518.
After a long period of development, XGBoost v1.6.0 is packed with many new features and improvements. We summarize them in the following sections starting with an introduction to some major new features, then moving on to language binding specific changes including new features and notable bug fixes for that binding.
This version of XGBoost features new improvements and full coverage of experimental
categorical data support in Python and C package with tree model. Both hist, approx
and gpu_hist now support training with categorical data. Also, partition-based
categorical split is introduced in this release. This split type is first available in
LightGBM in the context of gradient boosting. The previous XGBoost release supported one-hot
split where the splitting criteria is of form x \in {c}, i.e. the categorical feature x is tested
against a single candidate. The new release allows for more expressive conditions: x \in S
where the categorical feature x is tested against multiple candidates. Moreover, it is now
possible to use any tree algorithms (hist, approx, gpu_hist) when creating categorical splits.
For more information, please see our tutorial on categorical data, along with
examples linked on that page. (#7380, #7708, #7695, #7330, #7307, #7322, #7705,
#7652, #7592, #7666, #7576, #7569, #7529, #7575, #7393, #7465, #7385, #7371, #7745, #7810)
In the future, we will continue to improve categorical data support with new features and optimizations. Also, we are looking forward to bringing the feature beyond Python binding, contributions and feedback are welcomed! Lastly, as a result of experimental status, the behavior might be subject to change, especially the default value of related hyper-parameters.
XGBoost 1.6 features initial support for the multi-output model, which includes multi-output regression and multi-label classification. Along with this, the XGBoost classifier has proper support for base margin without to need for the user to flatten the input. In this initial support, XGBoost builds one model for each target similar to the sklearn meta estimator, for more details, please see our quick introduction.
(#7365, #7736, #7607, #7574, #7521, #7514, #7456, #7453, #7455, #7434, #7429, #7405, #7381)
External memory support for both approx and hist tree method is considered feature
complete in XGBoost 1.6. Building upon the iterator-based interface introduced in the
previous version, now both hist and approx iterates over each batch of data during
training and prediction. In previous versions, hist concatenates all the batches into
an internal representation, which is removed in this version. As a result, users can
expect higher scalability in terms of data size but might experience lower performance due
to disk IO. (#7531, #7320, #7638, #7372)
The approx tree method is rewritten based on the existing hist tree method. The
rewrite closes the feature gap between approx and hist and improves the performance.
Now the behavior of approx should be more aligned with hist and gpu_hist. Here is a
list of user-visible changes:
max_leaves and max_depth.grow_policy.max_bin to replace sketch_eps.depthwise policy is used.Based on the existing JSON serialization format, we introduce UBJSON support as a more
efficient alternative. Both formats will be available in the future and we plan to
gradually phase out support for the old
binary model format. Users can opt to use the different formats in the serialization
function by providing the file extension json or ubj. Also, the save_raw function in
all supported languages bindings gains a new parameter for exporting the model in different
formats, available options are json, ubj, and deprecated, see document for the
language binding you are using for details. Lastly, the default internal serialization
format is set to UBJSON, which affects Python pickle and R RDS. (#7572, #7570, #7358,
#7571, #7556, #7549, #7416)
Aside from the major new features mentioned above, some others are summarized here:
seed_per_iteration is removed, now distributed training should
generate closer results to single node training when sampling is used. (#7009)huber_slope is introduced for the Pseudo-Huber objective.aucpr is rewritten for better performance and GPU support. (#7297, #7368)max_leave and max_depth is now unified (#7302, #7551).gpu_hist. (#7507)Most of the performance improvements are integrated into other refactors during feature
developments. The approx should see significant performance gain for many datasets as
mentioned in the previous section, while the hist tree method also enjoys improved
performance with the removal of the internal pruner along with some other
refactoring. Lastly, gpu_hist no longer synchronizes the device during training. (#7737)
This section lists bug fixes that are not specific to any language binding.
num_parallel_tree is now a model parameter instead of a training hyper-parameter,
which fixes model IO with random forest. (#7751)iteration_range is provided. (#7409)Other than the changes in Dask, the XGBoost Python package gained some new features and improvements along with small bug fixes.
pip install xgboost to install XGBoost.libomp from Homebrew, as the XGBoost wheel now
bundles libomp.dylib library.fit that are not related to input data are moved into the constructor
and can be set by set_params. (#6751, #7420, #7375, #7369)get_group is introduced for DMatrix to allow users to get the group
information in the custom objective function. (#7564)**kwargs. (#7629)feature_names_in_ is defined for all sklearn estimators like
XGBRegressor to follow the convention of sklearn. (#7526)DMatrix construction in dask now honers thread configuration. (#7337)nthread configuration using the Dask sklearn interface. (#7633)This section summarizes the new features, improvements, and bug fixes to the R package.
load.raw can optionally construct a booster as return. (#7686)Some new features for JVM-packages are introduced for a more integrated GPU pipeline and better compatibility with musl-based Linux. Aside from this, we have a few notable bug fixes.
DeviceQuantileDMatrix to Scala binding (#7459)multi:softmax (#7694)Other than the changes in the Python package and serialization, we removed some deprecated features in previous releases. Also, as mentioned in the previous section, we plan to phase out the old binary format in future releases.
This section lists some of the general changes to XGBoost's document, for language binding specific change please visit related sections.
This is a summary of maintenance work that is not specific to any language binding.
Some fixes and update to XGBoost's CI infrastructure. (#7739, #7701, #7382, #7662, #7646, #7582, #7407, #7417, #7475, #7474, #7479, #7472, #7626)
Roadmap: https://github.com/dmlc/xgboost/issues/7726 Release note: https://github.com/dmlc/xgboost/pull/7746
Roadmap: https://github.com/dmlc/xgboost/issues/7726 Release note: https://github.com/dmlc/xgboost/pull/7746
This is a patch release for compatibility with latest dependencies and bug fixes.
This is a patch release for compatibility with latest dependencies and bug fixes.
num_boosted_rounds for linear model.This is a patch release for compatibility with the latest dependencies and bug fixes. Also, all GPU-compatible binaries are built with CUDA 11.0.
This is a patch release for compatibility with the latest dependencies and bug fixes. Also, all GPU-compatible binaries are built with CUDA 11.0.
[Python] Handle missing values in dataframe with category dtype. (#7331)
[R] Fix R CRAN failures about prediction and some compiler warnings.
[JVM packages] Fix compatibility with latest Spark (#7438, #7376)
Support building with CTK11.5. (#7379)
Check user input for iteration in inplace predict.
Handle OMP_THREAD_LIMIT environment variable.
[doc] Fix broken links. (#7341)
You can verify the downloaded packages by running this on your Unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
3a6cc7526c0dff1186f01b53dcbac5c58f12781988400e2d340dda61ef8d14ca xgboost_r_gpu_linux_afb9dfd4210e8b8db8fe03380f83b404b1721443.tar.gz
6f74deb62776f1e2fd030e1fa08b93ba95b32ac69cc4096b4bcec3821dd0a480 xgboost_r_gpu_win64_afb9dfd4210e8b8db8fe03380f83b404b1721443.tar.gz
565dea0320ed4b6f807dbb92a8a57e86ec16db50eff9a3f405c651d1f53a259d xgboost.tar.gz
n_gpus was deprecated in 1.0 release and is now removed.
This release comes with many exciting new features and optimizations, along with some bug fixes. We will describe the experimental categorical data support and the external memory interface independently. Package-specific new features will be listed in respective sections.
In version 1.3, XGBoost introduced an experimental feature for handling categorical data
natively, without one-hot encoding. XGBoost can fit categorical splits in decision
trees. (Currently, the generated splits will be of form x \in {v}, where the input is
compared to a single category value. A future version of XGBoost will generate splits that
compare the input against a list of multiple category values.)
Most of the other features, including prediction, SHAP value computation, feature
importance, and model plotting were revised to natively handle categorical splits. Also,
all Python interfaces including native interface with and without quantized DMatrix,
scikit-learn interface, and Dask interface now accept categorical data with a wide range
of data structures support including numpy/cupy array and cuDF/pandas/modin dataframe. In
practice, the following are required for enabling categorical data support during
training:
gpu_hist to train the model.Once the model is trained, it can be used with most of the features that are available on the Python package. For a quick introduction, see https://xgboost.readthedocs.io/en/latest/tutorials/categorical.html
Related PRs: (#7011, #7001, #7042, #7041, #7047, #7043, #7036, #7054, #7053, #7065, #7213, #7228, #7220, #7221, #7231, #7306)
Next steps
x \in S
where the input is compared with multiple category values. split. (#7081)This release features a brand-new interface and implementation for external memory (also
known as out-of-core training). (#6901, #7064, #7088, #7089, #7087, #7092, #7070,
#7216). The new implementation leverages the data iterator interface, which is currently
used to create DeviceQuantileDMatrix. For a quick introduction, see
https://xgboost.readthedocs.io/en/latest/tutorials/external_memory.html#data-iterator
. During the development of this new interface, lz4 compression is removed. (#7076).
Please note that external memory support is still experimental and not ready for
production use yet. All future development will focus on this new interface and users are
advised to migrate. (You are using the old interface if you are using a URL suffix to use
external memory.)
DMatrix
construction and inplace_predict (#6998, #7003). Now XGBoost no longer makes data
copy when input is numpy array view.min_delta parameter to control the
stopping behavior (#7137)iteration_range for the predict function is available, which can be
used for specifying the range of trees for running prediction. (#6819, #7126)nthread parameter in DMatrix construction. (#7127)DeviceQuantileDMatrix (#7195). Constructing DMatrix
with GPU data structures and the interface for quantized DMatrix were first
introduced in the Python package and are now available in the xgboost4j package.The performance for both hist and gpu_hist has been significantly improved in 1.5
with the following optimizations:
deterministic_histogram and now
the GPU algorithm is always deterministic.n_gpus was deprecated in 1.0 release and is now removed.gpu_id is specified (#6891,
#6987)gamma negative likelihood evaluation metric. (#7275)verbose_eal for xgboost.cv function in Python. (#7291)UINT32_MAX with missing
values. (#7026)softmax objective. (#7104)Other than the items mentioned in the previous sections, there are some Python-specific improvements.
dev (#6988)__sklearn_is_fitted__ is
implemented as part of the changes (#7130, #7230)DaskDMatrix with iteration_range. (#7005)Improvements other than new features on R package:
Improvements other than new features on JVM packages:
process_type. (#7135)use_rmm. (#6808)Some refactoring around CPU hist, which lead to better performance but are listed under general maintenance tasks:
Others
gpu_id with custom objective. (#7015)dh::CopyIf. (#6828)ncclUnhandledCudaError. (#7190)You can verify the downloaded packages by running this on your unix shell:
echo "<hash> <artifact>" | shasum -a 256 --check
2c63e8abd3e89795ac9371688daa31109a9514eebd9db06956ba5aa41d0c0e20 xgboost_r_gpu_linux_1.5.0.tar.gz
8b19f817dcb6b601b0abffa9cf943ee92c3e9a00f56fa3f4fcdfe98cd3777c04 xgboost_r_gpu_win64_1.5.0.tar.gz
25ee3adb9925d0529575c0f00a55ba42202a1cdb5fdd3fb6484b4088571326a5 xgboost.tar.gz
Roadmap: https://github.com/dmlc/xgboost/issues/6846 RC: https://github.com/dmlc/xgboost/issues/7260 Release note: https://github.com/dmlc/xgboost/pul
Roadmap: https://github.com/dmlc/xgboost/issues/6846 RC: https://github.com/dmlc/xgboost/issues/7260 Release note: https://github.com/dmlc/xgboost/pull/7271
This is a patch release for Python package with following fixes:
This is a patch release for Python package with following fixes:
cupy.ndarray in inplace_predict. https://github.com/dmlc/xgboost/pull/6933predict_leaf is (n_samples, ) when there's only 1 tree. 1.4.0 outputs (n_samples, 1). https://github.com/dmlc/xgboost/pull/6889inplace_predict. https://github.com/dmlc/xgboost/pull/6927You can verify the downloaded source code xgboost.tar.gz by running this on your unix shell:
echo "3ffd4a90cd03efde596e51cadf7f344c8b6c91aefd06cc92db349cd47056c05a *xgboost.tar.gz" | shasum -a 256 --check
This is a patch release for Python package with following fixes:
Fix GPU implementation of AUC on some large datasets.
This is a bug fix release.
You can verify the downloaded source code xgboost.tar.gz by running this on your unix shell:
echo "f3a37e5ddac10786e46423db874b29af413eed49fd9baed85035bbfee6fc6635 *xgboost.tar.gz" | shasum -a 256 --check
Breaking change: All data parameters in prediction functions are renamed to X for better compliance to sklearn estimator interface guidelines.
Starting with release 1.4.0, users now have the option of installing {xgboost} without
having to build it from the source. This is particularly advantageous for users who want
to take advantage of the GPU algorithm (gpu_hist), as previously they'd have to build
{xgboost} from the source using CMake and NVCC. Now installing {xgboost} with GPU
support is as easy as: R CMD INSTALL ./xgboost_r_gpu_linux.tar.gz. (#6827)
See the instructions at https://xgboost.readthedocs.io/en/latest/build.html
XGBoost has many prediction types including shap value computation and inplace prediction. In 1.4 we overhauled the underlying prediction functions for C API and Python API with an unified interface. (#6777, #6693, #6653, #6662, #6648, #6668, #6804)
dart booster and enable GPU acceleration just
like gbtree.base_margin support.strict_shape. See
https://xgboost.readthedocs.io/en/latest/prediction.html for more details.Starting with 1.4, the Dask interface is considered to be feature-complete, which means all of the models found in the single node Python interface are now supported in Dask, including but not limited to ranking and random forest. Also, the prediction function is significantly faster and supports shap value computation.
DaskDMatrix (and device quantile dmatrix) now accepts all meta-information. (#6601)Prediction optimization. We enhanced and speeded up the prediction function for the Dask interface. See the latest Dask tutorial page in our document for an overview of how you can optimize it even further. (#6650, #6645, #6648, #6668)
Bug fixes
distributed.MultiLock is
present, XGBoost supports training multiple models on the same cluster in
parallel. (#6743)dask.client to launch async task, XGBoost might use a
different client object internally. (#6722)Other improvements on documents, blogs, tutorials, and demos. (#6389, #6366, #6687, #6699, #6532, #6501)
With changes from Dask and general improvement on prediction, we have made some
enhancements on the general Python interface and IO for booster information. Starting
from 1.4, booster feature names and types can be saved into the JSON model. Also some
model attributes like best_iteration, best_score are restored upon model load. On
sklearn interface, some attributes are now implemented as Python object property with
better documents.
Breaking change: All data parameters in prediction functions are renamed to X
for better compliance to sklearn estimator interface guidelines.
Breaking change: XGBoost used to generate some pseudo feature names with DMatrix
when inputs like np.ndarray don't have column names. The procedure is removed to
avoid conflict with other inputs. (#6605)
Early stopping with training continuation is now supported. (#6506)
Optional import for Dask and cuDF are now lazy. (#6522)
As mentioned in the prediction improvement summary, the sklearn interface uses inplace prediction whenever possible. (#6718)
Booster information like feature names and feature types are now saved into the JSON model file. (#6605)
All DMatrix interfaces including DeviceQuantileDMatrix and counterparts in Dask
interface (as mentioned in the Dask changes summary) now accept all the meta-information
like group and qid in their constructor for better consistency. (#6601)
Booster attributes are restored upon model load so users don't have to call attr
manually. (#6593)
On sklearn interface, all models accept base_margin for evaluation datasets. (#6591)
Improvements over the setup script including smaller sdist size and faster installation if the C++ library is already built (#6611, #6694, #6565).
Bug fixes for Python package:
_estimator_type. (#6582)We re-implemented the ROC-AUC metric in XGBoost. The new implementation supports multi-class classification and has better support for learning to rank tasks that are not binary. Also, it has a better-defined average on distributed environments with additional handling for invalid datasets. (#6749, #6747, #6797)
Starting from 1.4, XGBoost's Python, R and C interfaces support a new global configuration
model where users can specify some global parameters. Currently, supported parameters are
verbosity and use_rmm. The latter is experimental, see rmm plugin demo and
related README file for details. (#6414, #6656)
__array_interface__. For some
data types including GPU inputs and scipy.sparse.csr_matrix, XGBoost employs
__array_interface__ for processing the underlying data. Starting from 1.4, XGBoost
can accept arbitrary array strides (which means column-major is supported) without
making data copies, potentially reducing a significant amount of memory consumption.
Also version 3 of __cuda_array_interface__ is now supported. (#6776, #6765, #6459,
#6675)~ are supported.dart booster support. (#6508, #6693)qid parameter for
query groups. (#6576)DMatrix.slice can now consume a numpy array. (#6368)hist is improved. (#6410)These fixes do not reside in particular language bindings:
gpu_hist might generate low accuracy in previous versions. (#6755)SparsePage exclusively to avoid some data access races. (#6590)This release will be the last release to support CUDA 10.0. (#6642)
Starting in the next release, the Python package will require Pip 19.3+ due to the use of manylinux2014 tag. Also, CentOS 6, RHEL 6 and other old distributions will not be supported.
MacOS build of the JVM packages doesn't support multi-threading out of the box. To enable multi-threading with JVM packages, MacOS users will need to build the JVM packages from the source. See https://xgboost.readthedocs.io/en/latest/jvm/index.html#installation-from-source
tree_method parameter is added. (#6564, #6633)versionadded (#6458)You can verify the downloaded source code xgboost.tar.gz by running this on your unix shell:
echo "ff77130a86aebd83a8b996c76768a867b0a6e5012cce89212afc3df4c4ee6b1c *xgboost.tar.gz" | shasum -a 256 --check
Nothing published for this version
Fix regression on best_ntree_limit.
best_ntree_limit. (#6616)Fix compatibility with newer scikit-learn.
best_ntree_limit in multi-class. (https://github.com/dmlc/xgboost/pull/6569)best_ntree_limit for linear and dart. (https://github.com/dmlc/xgboost/pull/6579)evals_result in XGBRanker. (#https://github.com/dmlc/xgboost/pull/6594)Enable loading model from <1.0.0 trained with objective='binary:logitraw'
objective='binary:logitraw' (#6517)EvaluationMonitor (#6499)save_best early stopping option (#6523)cupy.array_equal, since it's not compatible with cuPy 7.8 (#6528)You can verify the downloaded source code xgboost.tar.gz by running this on your unix shell:
echo "fd51e844dd0291fd9e7129407be85aaeeda2309381a6e3fc104938b27fb09279 *xgboost.tar.gz" | shasum -a 256 --check
Nothing published for this version
R package: xgboost_1.3.0.1.tar.gz
#6422
R package: xgboost_1.3.0.1.tar.gz
This patch release applies the following patches to 1.2.0 release:
This patch release applies the following patches to 1.2.0 release:
Nothing published for this version
…predict() returns class predictions. We make a breaking change in 1.2.0 release so that DaskXGBClassifier.predict() now correctly produces class predi…
xgb.save() and xgb.save.raw() instead of saveRDS(). This is so that the persisted models can be accessed with future releases of XGBoost.saveRDS(). This release adds a compatibility layer to restore access to the old RDS files. Note that this is meant to be a temporary measure; users are advised to stop using saveRDS() and migrate to xgb.save() and xgb.save.raw().reg:pseudohubererror is added (#5647). The corresponding metric is mphe. Right now, the slope is hard-coded to 1.survival:aft) is now accelerated on GPUs (#5714, #5716). The survival metrics aft-nloglik and interval-regression-accuracy are also accelerated on GPUs.n_features_in_ attribute to the scikit-learn interface to store the number of features used (#5780). This is useful for integrating with some scikit-learn features such as StackingClassifier. See this link for more details.XGBoostError now inherits ValueError, which conforms scikit-learn's exception requirement (#5696).DaskDeviceQuantileDMatrix (#5623, #5799, #5800, #5803, #5837, #5874, #5901): Previously, the Dask interface had to make 2 data copies: one for concatenating the Dask partition/block into a single block and another for internal representation. To save memory, we introduce DaskDeviceQuantileDMatrix. As long as Dask partitions are resident in the GPU memory, DaskDeviceQuantileDMatrix is able to ingest them directly without making copies. This matrix type wraps DeviceQuantileDMatrix.DeviceQuantileDMatrix)single_precision_histogram to use 32 bit histogram instead for faster training performance. (#5624, #5811)XGBoosterGetNumFeature is added for getting number of features in booster (#5856).predict() method of DaskXGBClassifier now produces class predictions (#5986). Use predict_proba() to obtain probability predictions.DaskXGBClassifier.predict() produced probability predictions. This is inconsistent with the behavior of other scikit-learn classifiers, where predict() returns class predictions. We make a breaking change in 1.2.0 release so that DaskXGBClassifier.predict() now correctly produces class predictions and thus behave like other scikit-learn classifiers. Furthermore, we introduce the predict_proba() method for obtaining probability predictions, again to be in line with other scikit-learn classifiers.IsDense (#5702)setAllowZeroForMissingValue (#5740)raise from syntax to preserve full stacktrace (#5787).dump_model() function from breaking. See this document to understand the difference between saving and dumping models.max.depth in the R gblinear example. (#5753)silent parameter from R demos. (#5675)n_estimators in the docstring of the scikit-learn interface (#6041)hypothesis package for testing (#5759, #5835, #5849)._CRT_SECURE_NO_WARNINGS to remove unneeded warnings in MSVC (#5434)gpu_hist split evaluation in preparation for batched nodes enumeration. (#5610)c_api.h in header files. (#5782)Empty method for host device vector. (#5781)Contributors: Nan Zhu (@CodingCat), @LionOrCatThatIsTheQuestion, Dmitry Mottl (@Mottl), Rory Mitchell (@RAMitchell), @ShvetsKS, Alex Wozniakowski (@a-wozniakowski), Alexander Gugel (@alexanderGugel), @anttisaukko, @boxdot, Andy Adinets (@canonizer), Ram Rachum (@cool-RR), Elliot Hershberg (@elliothershberg), Jason E. Aten, Ph.D. (@glycerine), Philip Hyunsu Cho (@hcho3), @jameskrach, James Lamb (@jameslamb), James Bourbeau (@jrbourbeau), Peter Jung (@kongzii), Lorenz Walthert (@lorenzwalthert), Oleksandr Kuvshynov (@okuvshynov), Rong Ou (@rongou), Shaochen Shi (@shishaochen), Yuan Tang (@terrytangyuan), Jiaming Yuan (@trivialfis), Bobby Wang (@wbo4958), Zhang Zhang (@zhangzhang10)
Reviewers: Nan Zhu (@CodingCat), @LionOrCatThatIsTheQuestion, Hao Yang (@QuantHao), Rory Mitchell (@RAMitchell), @ShvetsKS, Egor Smirnov (@SmirnovEgorRu), Alex Wozniakowski (@a-wozniakowski), Amit Kumar (@aktech), Avinash Barnwal (@avinashbarnwal), @boxdot, Andy Adinets (@canonizer), Chandra Shekhar Reddy (@chandrureddy), Ram Rachum (@cool-RR), Cristiano Goncalves (@cristianogoncalves), Elliot Hershberg (@elliothershberg), Jason E. Aten, Ph.D. (@glycerine), Philip Hyunsu Cho (@hcho3), Tong He (@hetong007), James Lamb (@jameslamb), James Bourbeau (@jrbourbeau), Lee Drake (@leedrake5), DougM (@mengdong), Oleksandr Kuvshynov (@okuvshynov), RongOu (@rongou), Shaochen Shi (@shishaochen), Xu Xiao (@sperlingxx), Yuan Tang (@terrytangyuan), Theodore Vasiloudis (@thvasilo), Jiaming Yuan (@trivialfis), Bobby Wang (@wbo4958), Zhang Zhang (@zhangzhang10)
R package: xgboost_1.2.0.1.tar.gz (Manual: xgboost_1.2.0.1-manual.pdf)
#5970
R package: xgboost_1.2.0.1.tar.gz (Manual: xgboost_1.2.0.1-manual.pdf)
R package: xgboost_1.2.0.1.tar.gz (Manual: xgboost_1.2.0.1-manual.pdf)
#5970
R package: xgboost_1.2.0.1.tar.gz (Manual: xgboost_1.2.0.1-manual.pdf)
This patch release applies the following patches to 1.1.0 release:
This patch release applies the following patches to 1.1.0 release:
Remove f-string, since it's not supported by Python 3.5 (#5330). Note that Python 3.5 support is deprecated and schedule to be dropped in the upcoming…
hist algorithm for multi-core CPUs has been under investigation (#3810). #5244 concludes the ongoing effort to improve performance scaling on multi-CPUs, in particular Intel CPUs. Roadmap: #5104hist tree method on CPU.inplace_predict() that is thread-safe. It is now possible to serve concurrent requests for prediction using a shared model object.numpy.ndarray / scipy.sparse.csr_matrix / cupy.ndarray / cudf.DataFrame / pd.DataFrame) without creating a DMatrix object.survival:aft to support survival analysis. Also added is the new API to specify the ranged labels. Check out the tutorial and the demos.brew install libomp followed by pip install xgboost. The installed XGBoost will use all CPU cores. Even better, starting with this release, we distribute pre-compiled binary wheels targeting Mac OSX. Now the install command pip install xgboost finishes instantly, as it no longer compiles the C++ source of XGBoost. The last three Mac versions (High Sierra, Mojave, Catalina) are supported.Initializing libomp.dylib, but found libomp.dylib already initialized (#5701)DeviceQuantileDMatrix) so that it can ingest data from GPU memory directly. The result is that XGBoost interoperates better with GPU-accelerated data science libraries, such as cuDF, cuPy, and PyTorch.Booster) object in R as a JSON string (#5123, #5217).verbose parameter for dask fit (#5413)DMLC_TASK_ID. (#5415)nthreads from dask worker. (#5414)DMatrix classmanylinux2010 tag in the binary wheel release. Ensure you have Pip 19.0 or newer by running python3 -m pip -V to check the version. Upgrade Pip with commandpython3 -m pip install --upgrade pip
Upgrading to latest pip allows us to depend on newer versions of system libraries. TensorFlow also requires Pip 19.0+.
silent parameter is now removed (#5476)verbosity instead.output_margin to True for custom objectives (#5564)Makefile is now removed. We use CMake exclusively to build XGBoost (#5513)distcol updater is now removed (#5507)distcol updater has been long broken, and currently we lack resources to implement a working implementation from scratch.early_stopping_rounds at training time, the prediction method (xgb.predict()) behaves in a surprising way. If XGBoost runs for M rounds and chooses iteration N (N < M) as the best iteration, then the prediction method will use M trees by default. To use the best iteration (N trees), users will need to manually take the best iteration field bst.best_iteration and pass it as the ntree_limit argument to xgb.predict(). See #5209 and #4052 for additional context.reg_lambda is set to zero, some leaf nodes may be assigned a NaN value. (See discussion.) For now, please set reg_lambda to a nonzero value.class() (#5426)std::max) on a GPU device (#5453)WQSummary::SetPrune() (#5493)dmlc/build_config.h is picked up by Rabit and XGBoost, to fix build on Alpine (#5514)uint for threads (#5542)vector<bool>::iterator (#5642)cudaDeviceGetAttribute() instead of cudaGetDeviceProperties() for speed (#5570)HostDeviceVector (vector shared between CPU and GPU memory) now exposes HostSpan interface, to enable access on the CPU side with bound check (#5459)SplitEntry (#5467)JVM_CHECK_CALL to prevent C++ exceptions from leaking into the JVM layer (#5199)training parameter in the C API function XGBoosterPredict() (#5604)process_type is set to update.scikit-learn in extra dependencies (#5310)LearnerImpl (#5350)Contributors: Nan Zhu (@CodingCat), Rory Mitchell (@RAMitchell), @ShvetsKS, Egor Smirnov (@SmirnovEgorRu), Andrew Kane (@ankane), Avinash Barnwal (@avinashbarnwal), Bart Broere (@bartbroere), Andy Adinets (@canonizer), Chen Qin (@chenqin), Daiki Katsuragawa (@daikikatsuragawa), David Díaz Vico (@daviddiazvico), Darius Kharazi (@dkharazi), Darby Payne (@dpayne), Jason E. Aten, Ph.D. (@glycerine), Philip Hyunsu Cho (@hcho3), James Lamb (@jameslamb), Jan Borchmann (@jborchma), Kamil A. Kaczmarek (@kamil-kaczmarek), Melissa Kohl (@mjkohl32), Nicolas Scozzaro (@nscozzaro), Paul Kaefer (@paulkaefer), Rong Ou (@rongou), Samrat Pandiri (@samratp), Sriram Chandramouli (@sriramch), Yuan Tang (@terrytangyuan), Jiaming Yuan (@trivialfis), Liang-Chi Hsieh (@viirya), Bobby Wang (@wbo4958), Zhang Zhang (@zhangzhang10)
Reviewers: Nan Zhu (@CodingCat), @LeZhengThu, Rory Mitchell (@RAMitchell), @ShvetsKS, Egor Smirnov (@SmirnovEgorRu), Steve Bronder (@SteveBronder), Nikita Titov (@StrikerRUS), Andrew Kane (@ankane), Avinash Barnwal (@avinashbarnwal), @brydag, Andy Adinets (@canonizer), Chandra Shekhar Reddy (@chandrureddy), Chen Qin (@chenqin), Codecov (@codecov-io), David Díaz Vico (@daviddiazvico), Darby Payne (@dpayne), Jason E. Aten, Ph.D. (@glycerine), Philip Hyunsu Cho (@hcho3), James Lamb (@jameslamb), @johnny-cat, Mu Li (@mli), Mate Soos (@msoos), @rnyak, Rong Ou (@rongou), Sriram Chandramouli (@sriramch), Toby Dylan Hocking (@tdhock), Yuan Tang (@terrytangyuan), Oleksandr Pryimak (@trams), Jiaming Yuan (@trivialfis), Liang-Chi Hsieh (@viirya), Bobby Wang (@wbo4958)
Your coding agent can read these notes before it upgrades. Set up the MCP server →