Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Version 0.82 release candidate #4201

Merged
merged 1 commit into from
Mar 5, 2019
Merged

Conversation

hcho3
Copy link
Collaborator

@hcho3 hcho3 commented Mar 4, 2019

v0.82 (2019.03.03)

This release is packed with many new features and bug fixes.

Roadmap: better performance scaling for multi-core CPUs (#3957)

New feature: Distributed Fast Histogram Algorithm (hist) (#4011, #4102, #4140, #4128)

  • It is now possible to run the hist algorithm in distributed setting. Special thanks to @CodingCat. The benefits include:
    1. Faster local computation via feature binning
    2. Support for monotonic constraints and feature interaction constraints
    3. Simpler codebase than approx, allowing for future improvement
  • Depth-wise tree growing is now performed in a separate code path, so that cross-node syncronization is performed only once per level.

New feature: Multi-Node, Multi-GPU training (#4095)

  • Distributed training is now able to utilize clusters equipped with NVIDIA GPUs. In particular, the rabit AllReduce layer will communicate GPU device information. Special thanks to @mt-jones, @RAMitchell, @rongou, @trivialfis, @canonizer, and @jeffdk.
  • Resource management systems will be able to assign a rank for each GPU in the cluster.
  • In Dask, users will be able to construct a collection of XGBoost processes over an inhomogeneous device cluster (i.e. workers with different number and/or kinds of GPUs).

New feature: Multiple validation datasets in XGBoost4J-Spark (#3904, #3910)

  • You can now track the performance of the model during training with multiple evaluation datasets. By specifying eval_sets or call setEvalSets over a XGBoostClassifier or XGBoostRegressor, you can pass in multiple evaluation datasets typed as a Map from String to DataFrame. Special thanks to @CodingCat.
  • See the usage of multiple validation datasets here

New feature: Additional metric functions for GPUs (#3952)

  • Element-wise metrics have been ported to GPU: rmse, mae, logloss, poisson-nloglik, gamma-deviance, gamma-nloglik, error, tweedie-nloglik. Special thanks to @trivialfis and @RAMitchell.
  • With supported metrics, XGBoost will select the correct devices based on your system and n_gpus parameter.

New feature: Column sampling at individual nodes (splits) (#3971)

  • Columns (features) can now be sampled at individual tree nodes, in addition to per-tree and per-level sampling. To enable per-node sampling, set colsample_bynode parameter, which represents the fraction of columns sampled at each node. This parameter is set to 1.0 by default (i.e. no sampling per node). Special thanks to @canonizer.
  • The colsample_bynode parameter works cumulatively with other colsample_by* parameters: for example, {'colsample_bynode':0.5, 'colsample_bytree':0.5} with 100 columns will give 25 features to choose from at each split.

Major API change: consistent logging level via verbosity (#3982, #4002, #4138)

  • XGBoost now allows fine-grained control over logging. You can set verbosity to 0 (silent), 1 (warning), 2 (info), and 3 (debug). This is useful for controlling the amount of logging outputs. Special thanks to @trivialfis.
  • Parameters silent and debug_verbose are now deprecated.
  • Note: Sometimes XGBoost tries to change configurations based on heuristics, which is displayed as warning message. If there's unexpected behaviour, please try to increase value of verbosity.

Major bug fix: external memory (#4040, #4193)

  • Clarify object ownership in multi-threaded prefetcher, to avoid memory error.
  • Correctly merge two column batches (which uses CSC layout).
  • Add unit tests for external memory.
  • Special thanks to @trivialfis and @hcho3.

Major bug fix: early stopping fixed in XGBoost4J and XGBoost4J-Spark (#3928, #4176)

  • Early stopping in XGBoost4J and XGBoost4J-Spark is now consistent with its counterpart in the Python package. Training stops if the current iteration is earlyStoppingSteps away from the best iteration. If there are multiple evaluation sets, only the last one is used to determinate early stop.
  • See the updated documentation here
  • Special thanks to @CodingCat, @yanboliang, and @mingyang.

Major bug fix: infrequent features should not crash distributed training (#4045)

  • For infrequently occuring features, some partitions may not get any instance. This scenario used to crash distributed training due to mal-formed ranges. The problem has now been fixed.
  • In practice, one-hot-encoded categorical variables tend to produce rare features, particularly when the cardinality is high.
  • Special thanks to @CodingCat.

Performance improvements

Bug-fixes

API changes

Maintenance: Refactor C++ code for legibility and maintainability

Maintenance: testing, continuous integration, build system

Usability Improvements

Acknowledgement

Contributors (in no particular order): Jiaming Yuan (@trivialfis), Hyunsu Cho (@hcho3), Nan Zhu (@CodingCat), Rory Mitchell (@RAMitchell), Yanbo Liang (@yanboliang), Andy Adinets (@canonizer), Tong He (@hetong007), Yuan Tang (@terrytangyuan)

First-time Contributors (in no particular order): Jelle Zijlstra (@JelleZijlstra), Jiacheng Xu (@jiachengxu), @ajing, Kashif Rasul (@kashif), @theycallhimavi, Joey Gao (@pjgao), Prabakaran Kumaresshan (@nixphix), Huafeng Wang (@huafengw), @lyxthe, Sam Wilkinson (@scwilkinson), Tatsuhito Kato (@stabacov), Shayak Banerjee (@shayakbanerjee), Kodi Arfer (@Kodiologist), @KyleLi1985, Egor Smirnov (@SmirnovEgorRu), @tmitanitky, Pasha Stetsenko (@st-pasha), Kenichi Nagahara (@keni-chi), Abhai Kollara Dilip (@abhaikollara), Patrick Ford (@pford221), @hshujuan, Matthew Jones (@mt-jones), Thejaswi Rao (@teju85), Adam November (@anovember)

First-time Reviewers (in no particular order): Mingyang Hu (@mingyang), Theodore Vasiloudis (@thvasilo), Jakub Troszok (@troszok), Rong Ou (@rongou), @Denisevi4, Matthew Jones (@mt-jones), Jeff Kaplan (@jeffdk)

@hcho3 hcho3 mentioned this pull request Mar 4, 2019
@thvasilo
Copy link
Contributor

thvasilo commented Mar 4, 2019

Any change in particular you'd like us to try testing @hcho3 ?

@trivialfis
Copy link
Member

One thing I am interested in is, how experimental is our external memory implementation? We can't mark it beta forever...

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 4, 2019

@thvasilo I'm mainly soliciting feedback with regard to the release notes. After a short while, committers will approve the release.

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 4, 2019

@trivialfis I'd like to see external memory implemented for hist, with robust unit tests. Then we can remove the beta label.

@CodingCat
Copy link
Member

LGTM.

Copy link
Member

@terrytangyuan terrytangyuan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great!

@CodingCat
Copy link
Member

CodingCat commented Mar 4, 2019

just noticed one thing, @hcho3

actually the latest code in distributed hist only syncs stats at root level (for both loss-guided and depth-width) and the stats of all other nodes are derived from the cache (https://github.com/dmlc/xgboost/blob/master/src/tree/updater_quantile_hist.cc#L743-L780) (thanks for the suggestion from @RAMitchell )

instead of

"""
Depth-wise tree growing is now performed in a separate code path, so that cross-node synchronization is performed only once per level.
"""

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 4, 2019

@CodingCat Wait, I thought depthwise had fewer sync steps than lossguide?

@CodingCat
Copy link
Member

nvm, I am brain-damaged.....

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 5, 2019

With 5 approvals, I am going to release 0.82. Thanks all!

@hcho3 hcho3 merged commit 3f83dcd into dmlc:master Mar 5, 2019
@hcho3 hcho3 deleted the release_0.82 branch March 5, 2019 02:14
@hlbkin
Copy link

hlbkin commented Mar 5, 2019

When would binary wheels for 0.82 be available? (especially multi-gpu)

https://s3-us-west-2.amazonaws.com/xgboost-wheels/list.html

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 5, 2019

@hlbkin It is already available on PyPI. Run pip install xgboost==0.82. This one will have multi-GPU enabled.

@Kodiologist
Copy link
Contributor

When will CRAN get a new release of the R package?

@hetong007
Copy link
Member

hetong007 commented Mar 8, 2019 via email

@hcho3
Copy link
Collaborator Author

hcho3 commented Mar 13, 2019

@Kodiologist 0.82 is now released on CRAN: https://cran.r-project.org/web/packages/xgboost/index.html

@lock lock bot locked as resolved and limited conversation to collaborators Jun 11, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants