XGBoost 使用附加训练的方法,在该方法中对先前模型的残差进行建模。
虽然这是顺序的,那么它如何进行并行计算呢?
Xgboost 不会像您提到的那样并行运行多棵树,您需要在每棵树之后进行预测以更新梯度。
相反,它在单个树内进行并行化,我使用 openMP 独立创建分支。
为了观察这一点,构建一个巨大的数据集并以 n_rounds=1 运行。你会看到你所有的核心都在一棵树上开火。这就是为什么它如此快速——精心设计的原因。
您可以使用 Dask 后端并行训练 XGBoost。
简短的解决方案
与 Dask 并行训练 XGBoost 需要对代码进行 2 处更改:
用dtrain = xgb.DMatrix(X_train, y_train)
_dtrain = xgb.dask.DaskDMatrix(X_train, y_train)
用xgb.train(params, dtrain, ...)
_xgb.dask.train(client, params, dtrain, ...)
我在 Coiled 博客上写了一个循序渐进的教程,人们可能会觉得它很有用。