首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带xgboost和插入符号的并行处理

带xgboost和插入符号的并行处理
EN

Stack Overflow用户
提问于 2016-09-16 09:45:46
回答 1查看 5.2K关注 0票数 12

在使用插入符号时,我想并行化xgboost的模型拟合过程。从我在xgboost的文档中看到的情况来看,nthread参数在拟合模型时控制要使用的线程数,也就是说,以并行的方式构建树。卡雷特的train函数将执行并行化,例如,为k折叠CV中的每一次迭代运行一个进程。如果是,这种理解是否正确,最好是:

  1. 注册核数(例如,使用doMC包和registerDoMC函数),通过插入符号的train函数设置nthread=1,以便将该参数传递给xgboost,在trainControl中设置allowParallel=TRUE,并让caret处理交叉验证的并行化;或
  2. 禁用插入并行化(allowParallel=FALSE和无并行后端注册),并将nthread设置为物理核数,因此并行化只包含在xgboost中。

或者没有“更好”的方法来执行并行化?

编辑:我使用tuneLength = 10search="random"运行了@topepo建议的代码,并在最后一行指定了nthread=1 (否则我理解xgboost将使用多线程)。我得到的结果是:

代码语言:javascript
复制
xgb_par[3]
elapsed  
283.691 
just_seq[3]
elapsed 
276.704 
mc_par[3]
elapsed 
89.074 
just_seq[3]/mc_par[3]
elapsed 
3.106451 
just_seq[3]/xgb_par[3]
elapsed 
0.9753711 
xgb_par[3]/mc_par[3]
elapsed 
3.184891

最后,对于我的数据和这个测试用例,让插入符号处理并行化在运行时是一个更好的选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 17:39:24

要预测出最佳战略是什么并不简单。我的(有偏见的)想法是,您应该并行化花费时间最长的进程。在这里,这将是重采样循环,因为打开的线程/工作者将多次调用该模型。并行化模型fit的相反方法将反复启动和停止工人,理论上也会减慢速度。你的里程可能会不同。

我没有安装OpenMP,但下面有代码需要测试(如果您能够报告结果,这将是有帮助的)。

代码语言:javascript
复制
library(caret)
library(plyr)
library(xgboost)
library(doMC)

foo <- function(...) {
  set.seed(2)
  mod <- train(Class ~ ., data = dat, 
               method = "xgbTree", tuneLength = 50,
               ..., trControl = trainControl(search = "random"))
  invisible(mod)
}

set.seed(1)
dat <- twoClassSim(1000)

just_seq <- system.time(foo())


## I don't have OpenMP installed
xgb_par <- system.time(foo(nthread = 5))

registerDoMC(cores=5)
mc_par <- system.time(foo())

我的结果(没有OpenMP)

代码语言:javascript
复制
> just_seq[3]
elapsed 
326.422 
> xgb_par[3]
elapsed 
319.862 
> mc_par[3]
elapsed 
102.329 
> 
> ## Speedups
> xgb_par[3]/mc_par[3]
elapsed 
3.12582 
> just_seq[3]/mc_par[3]
 elapsed 
3.189927 
> just_seq[3]/xgb_par[3]
 elapsed 
1.020509 
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39528392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档