Skip to content

Releases: dmlc/xgboost

1.7.4 Patch Release

16 Feb 15:22
36ad160
Compare
Choose a tag to compare

1.7.4 (2023 Feb 16)

This is a patch release for bug fixes.

  • [R] Fix OpenMP detection on macOS. #8684
  • [Python] Make sure input numpy array is aligned. #8690
  • Fix feature interaction with column sampling in gpu_hist evaluator. #8754
  • Fix GPU L1 error. #8749
  • [PySpark] Fix feature types param #8772
  • Fix ranking with quantile dmatrix and group weight. #8762
  • Fix CPU bin compression with categorical data. #8809

Artifacts

xgboost_r_gpu_win64_1.7.4.tar.gz: Download

1.7.3 Patch Release

06 Jan 19:03
ccf43d4
Compare
Choose a tag to compare

1.7.3 (2023 Jan 6)

This is a patch release for bug fixes.

  • [Breaking] XGBoost Sklearn estimator method get_params no longer returns internally configured values. (#8634)
  • Fix linalg iterator, which may crash the L1 error. (#8603)
  • Fix loading pickled GPU sklearn estimator with a CPU-only XGBoost build. (#8632)
  • Fix inference with unseen categories with categorical features. (#8591, #8602)
  • CI fixes. (#8620, #8631, #8579)

Artifacts

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

1.7.2 Patch Release

08 Dec 19:41
62ed8b5
Compare
Choose a tag to compare

v1.7.2 (2022 Dec 8)

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)

Artifacts

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

1.7.1 Patch Release

03 Nov 23:39
534c940
Compare
Choose a tag to compare

v1.7.1 (2022 November 3)

This is a patch release to incorporate the following hotfix:

  • Add back xgboost.rabit for backwards compatibility (#8411)

Release 1.7.0 stable

31 Oct 19:29
Compare
Choose a tag to compare

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.

v1.7.0 (2022 Oct 20)

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.

PySpark

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.

Development of categorical data support

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)

Experimental support for federated learning and new communication collective

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.

Quantile DMatrix

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)

Mean absolute error

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)

XGBoost on Browser

With the help of the pyodide project, you can now run XGBoost on browsers. (#7954, #8369)

Experimental IPv6 Support for Dask

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)

Optimizations

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

Breaking changes made in the 1.7 release are summarized below.

  • The 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)
  • Single precision histogram is removed due to its lack of accuracy caused by significant floating point error. In some cases the error can be difficult to detect due to log-scale operations, which makes the parameter dangerous to use. (#7892, #7828)
  • Deprecated CUDA architectures are no longer supported in the release binaries. (#7774)
  • As part of the federated learning development, the 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)

General new features and improvements

Before diving into package-specific changes, some general new features other than those listed at the beginning are summarized here.

  • Users of 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)
  • In previous versions, the GPU histogram tree method may generate phantom gradient for missing values due to floating point error. We fixed such an error in this release and XGBoost is much better equated to handle floating point errors when training on GPU. (#8274, #8246)
  • Parameter validation is no longer experimental. (#8206)
  • C pointer parameters and JSON parameters are vigorously checked. (#8254, #8254)
  • Improved handling of JSON model input. (#7953, #7918)
  • Support IBM i OS (#7920, #8178)

Fixes

Some noteworthy bug fixes that are not related to specific language binding are listed in this section.

  • Rename misspelled config parameter for pseudo-Huber (#7904)
  • Fix feature weights with nested column sampling. (#8100)
  • Fix loading DMatrix binary in distributed env. (#8149)
  • Force auc.cc to be statically linked for unusual compiler platforms. (#8039)
  • New logic for detecting libomp on macos (#8384).

Python Package

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

Read more

Release candidate of version 1.7.0

20 Oct 09:20
463313d
Compare
Choose a tag to compare
Pre-release

Roadmap: #8282
Release note: #8374

Release status: #8366

1.6.2 Patch Release

23 Aug 13:05
b993424
Compare
Choose a tag to compare

This is a patch release for bug fixes.

  • Remove pyarrow workaround. (#7884)
  • Fix monotone constraint with tuple input. (#7891)
  • Verify shared object version at load. (#7928)
  • Fix LTR with weighted Quantile DMatrix. (#7975)
  • Fix Python package source install. (#8036)
  • Limit max_depth to 30 for GPU. (#8098)
  • Fix compatibility with the latest cupy. (#8129)
  • [dask] Deterministic rank assignment. (#8018)
  • Fix loading DMatrix binary in distributed env. (#8149)

1.6.1 Patch Release

09 May 09:08
5d92a7d
Compare
Choose a tag to compare

v1.6.1 (2022 May 9)

This is a patch release for bug fixes and Spark barrier mode support. The R package is unchanged.

Experimental support for categorical data

  • Fix segfault when the number of samples is smaller than the number of categories. (#7853)
  • Enable partition-based split for all model types. (#7857)

JVM packages

We replaced the old parallelism tracker with spark barrier mode to improve the robustness of the JVM package and fix the GPU training pipeline.

  • Fix GPU training pipeline quantile synchronization. (#7823, #7834)
  • Use barrier model in spark package. (#7836, #7840, #7845, #7846)
  • Fix shared object loading on some platforms. (#7844)

Artifacts

You can verify the downloaded packages by running this on your Unix shell:

echo "<hash> <artifact>" | shasum -a 256 --check
2633f15e7be402bad0660d270e0b9a84ad6fcfd1c690a5d454efd6d55b4e395b  ./xgboost.tar.gz

Release 1.6.0 stable

16 Apr 04:02
f75c007
Compare
Choose a tag to compare

v1.6.0 (2022 Apr 16)

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.

Development of categorical data support

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.

Experimental support for multi-output model

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

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)

Rewritten approx

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:

  • Supports both max_leaves and max_depth.
  • Supports grow_policy.
  • Supports monotonic constraint.
  • Supports feature weights.
  • Use max_bin to replace sketch_eps.
  • Supports categorical data.
  • Faster performance for many of the datasets.
  • Improved performance and robustness for distributed training.
  • Supports prediction cache.
  • Significantly better performance for external memory when depthwise policy is used.

New serialization format

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)

General new features and improvements

Aside from the major new features mentioned above, some others are summarized here:

  • Users can now access the build information of XGBoost binary in Python and C
    interface. (#7399, #7553)
  • Auto-configuration of seed_per_iteration is removed, now distributed training should
    generate closer results to single node training when sampling is used. (#7009)
  • A new parameter huber_slope is introduced for the Pseudo-Huber objective.
  • During source build, XGBoost can choose cub in the system path automatically. (#7579)
  • XGBoost now honors the CPU counts from CFS, which is usually set in docker
    environments. (#7654, #7704)
  • The metric aucpr is rewritten for better performance and GPU support. (#7297, #7368)
  • Metric calculation is now performed in double precision. (#7364)
  • XGBoost no longer mutates the global OpenMP thread limit. (#7537, #7519, #7608, #7590,
    #7589, #7588, #7687)
  • The default behavior of max_leave and max_depth is now unified (#7302, #7551).
  • CUDA fat binary is now compressed. (#7601)
  • Deterministic result for evaluation metric and linear model. In previous versions of
    XGBoost, evaluation results might differ slightly for each run due to parallel reduction
    for floating-point values, which is now addressed. (#7362, #7303, #7316, #7349)
  • XGBoost now uses double for GPU Hist node sum, which improves the accuracy of
    gpu_hist. (#7507)

Performance improvements

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)

General bug fixes

This section lists bug fixes that are not specific to any language binding.

  • The num_parallel_tree is now a model parameter instead of a training hyper-parameter,
    which fixes model IO with random forest. (#7751)
  • Fixes in CMake script for exporting configuration. (#7730)
  • XGBoost can now handle unsorted sparse input. This includes text file formats like
    libsvm and scipy sparse matrix where column index might not be sorted. (#7731)
  • Fix tree param feature type, this affects inputs with the number of columns greater than
    the maximum value of int32. (#7565)
  • Fix external memory with gpu_hist and subsampling. (#7481)
  • Check the number of trees in inplace predict, this avoids a potential segfault when an
    incorrect value for iteration_range is provided. (#7409)
  • Fix non-stable result in cox regression (#7756)

Changes in the Python package

Other than the changes in Dask, the XGBoost Python package gained some new features and
improvements along with small bug fixes.

  • Python 3.7 is required as the lowest Python version. (#7682)
  • Pre-built binary wheel for Apple Silicon. (#7621, #7612, #7747) Apple Silicon users will
    now be able to run pip install xgboost to install XGBoost.
  • MacOS users no longer need to install libomp from Homebrew, as the XGBoost wheel now
    bundles libomp.dylib library.
  • There are new parameters for users to specify the custom metric with new
    behavior. XGBoost can now output transformed prediction values when a custom objective is
    not supplied. See our explanation in the
    tutorial
    for details.
  • For the sklearn interface, following the estimator guideline from scikit-learn, all
    parameters in fit that are not related to input data are moved into the constructor
    and can be set by set_params. (#6751, #7420, #7375, #7369)
  • Apache arrow format is now supported, which can bring better performance to users'
    pipeline (#7512)
  • Pandas nullable types are now supported (#7760)
  • A new function get_group is introduced for DMatrix to allow users to get the group
    information in the custom objective function. (#7564)
  • More training parameters are exposed in the sklearn interface instead of relying on the
    **kwargs. (#7629)
  • A new attribute feature_names_in_ is defined for all sklearn estimators like
    XGBRegressor to follow the convention of sklearn. (#7526)
  • More work on Python type hint. (#7432, #7348, #7338, #7513, #7707)
  • Support the latest pandas Index type. (#7595)
  • Fix for Feature shape mismatch error on s390x platform (#7715)
  • Fix using feature names for constraints with multiple groups (#7711)
  • We clarified the behavior of the callback function when it contains mutable
    states. (#7685)
  • Lastly, there are some code cleanups and maintenance work. (#7585, #7426, #7634, #7665,
    #7667, #7377, #7360, #7498, #7438, #7667, #7752, #7749, #7751)

Changes in the Dask interface

  • Dask module now supports user-supplied host IP and port address of scheduler node.
    Please see introduction and
    ...
Read more

Release candidate of version 1.6.0

30 Mar 17:28
4bd5a33
Compare
Choose a tag to compare
Pre-release

Roadmap: #7726
Release note: #7746