[R] Add a compatibility layer to load Booster object from an old RDS file (#5940)
* [R] Add a compatibility layer to load Booster from an old RDS * Modify QuantileHistMaker::LoadConfig() to be backward compatible with 1.1.x * Add a big warning about compatibility in QuantileHistMaker::LoadConfig() * Add testing suite * Discourage use of saveRDS() in CRAN doc
This commit is contained in:
committed by
GitHub
parent
40361043ae
commit
ace7fd328b
@@ -125,7 +125,22 @@ class QuantileHistMaker: public TreeUpdater {
|
||||
void LoadConfig(Json const& in) override {
|
||||
auto const& config = get<Object const>(in);
|
||||
FromJson(config.at("train_param"), &this->param_);
|
||||
FromJson(config.at("cpu_hist_train_param"), &this->hist_maker_param_);
|
||||
try {
|
||||
FromJson(config.at("cpu_hist_train_param"), &this->hist_maker_param_);
|
||||
} catch (std::out_of_range& e) {
|
||||
// XGBoost model is from 1.1.x, so 'cpu_hist_train_param' is missing.
|
||||
// We add this compatibility check because it's just recently that we (developers) began
|
||||
// persuade R users away from using saveRDS() for model serialization. Hopefully, one day,
|
||||
// everyone will be using xgb.save().
|
||||
LOG(WARNING) << "Attempted to load interal configuration for a model file that was generated "
|
||||
<< "by a previous version of XGBoost. A likely cause for this warning is that the model "
|
||||
<< "was saved with saveRDS() in R or pickle.dump() in Python. We strongly ADVISE AGAINST "
|
||||
<< "using saveRDS() or pickle.dump() so that the model remains accessible in current and "
|
||||
<< "upcoming XGBoost releases. Please use xgb.save() instead to preserve models for the "
|
||||
<< "long term. For more details and explanation, see "
|
||||
<< "https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html";
|
||||
this->hist_maker_param_.UpdateAllowUnknown(Args{});
|
||||
}
|
||||
}
|
||||
void SaveConfig(Json* p_out) const override {
|
||||
auto& out = *p_out;
|
||||
|
||||
Reference in New Issue
Block a user