XGBoost机器学习技术中的并行性

时间:2017-02-09 17:15:19

标签: r machine-learning parallel-processing xgboost

它与

有关
  

XGBoost的并行实现

我试图通过给出参数 nthread = 16来优化XGBoost执行,其中我的系统有24个核心。但是当我训练我的模型时,在模型训练的任何时间点,它似乎甚至不会超过大约20%的CPU利用率。 代码段如下: -

param_30 <- list("objective" = "reg:linear",    # linear 
               "subsample"= subsample_30,
               "colsample_bytree" = colsample_bytree_30,
               "max_depth" = max_depth_30,    # maximum depth of tree 
               "min_child_weight" = min_child_weight_30,
               "max_delta_step" = max_delta_step_30,
               "eta" = eta_30,    # step size shrinkage 
               "gamma" = gamma_30,  # minimum loss reduction 
               "nthread" = nthreads_30,   # number of threads to be used
               "scale_pos_weight" = 1.0
)
model <- xgboost(data = training.matrix[,-5], 
              label = training.matrix[,5], 
              verbose = 1, nrounds=nrounds_30, params = param_30, 
              maximize = FALSE, early_stopping_rounds = searchGrid$early_stopping_rounds_30[x])

请解释我(如果可能)如何提高CPU利用率并加快模型培训以实现高效执行。 R中的代码有助于进一步理解。

假设: - 它是关于XGBoost的R包中的执行

2 个答案:

答案 0 :(得分:0)

这是一个猜测......但我发生了这件事......

您在并行操作期间花费了很多时间进行通信并且不会受到CPU限制。 https://en.wikipedia.org/wiki/CPU-bound

底线是您的数据不够大(行和列),和/或您的树不够深max_depth以保证许多核心。开销太大了。 xgboost并行化拆分评估,因此大数据上的深层树可以使CPU保持最大值。

我已经培训了许多模型,其中单线程优于8/16核心。切换时间过长而工作量不足。

**更多数据,更深的树木或更少的核心:) **

答案 1 :(得分:0)

我试图回答这个问题,但我的帖子被版主删除了。请参阅https://stackoverflow.com/a/67188355/5452057,我相信它也可以帮助您,它与 CRAN 提供的用于 Windows 的 xgboost R 包中缺少 MPI 支持有关。

相关问题