我遵循本教程机器学习简介使用R和插入符号(https://www.youtube.com/watch?v=z8PRU46I3NY)并在与macOS上的doSNOW并行运行R时获得不同的机器行为:
cl = makeCluster(4, type = 'SOCK')
registerDoSNOW(cl)
# build model
caret.cv = train(Survived ~ .,
data = titanic.train,
method = 'xgbTree',
tuneGrid = tune.grid,
trControl = train.control)
stopCluster(cl)
在macOS上运行时,每个1个线程创建4个进程,因此运行4 @> 99%(xgbTree,约6分钟)。在centOS上,它创建4个进程,每个进程运行24个线程,因此总共24个@> 99%(xgbTree未完成>> 30分钟)。即使只在centOS上创建一个或两个集群,也会使用所有线程并且服务器完全忙。
更新:使用doSNOW集群运行非插入符代码时,一切正常 - 每个进程运行1个线程,即使在centOS上也是如此。
我有什么遗失的吗? 我是否应该期望这些系统使用相同的脚本有不同的行为?我是否需要指定在centOS上使用的内容?
我对插入符号非常陌生。并行R和目前为止我已经读过,mac / linux和windows之间只有更大的区别。
如果我能为您提供更多信息,请告诉我。 感谢您的帮助和建议。
hOS on centOS 60x +: R --slave --no-restore == file = / usr / lib64 / R / library / snow / RSOCKnode.R --args MASTER = localhost PORT = 11326 OUT = / dev / null SNOWLIB = / usr / lib64 / R /文库
R版本3.3.2 :x86_64-redhat-linux-gnu; x86_64-apple-darwin13.4.0 / centOS服务器:2个插槽,每个6个核心,每个2个线程/ macOS MBP :1/8/1
答案 0 :(得分:0)
这解决了我的问题: Parallel processing with xgboost and caret
与我的R / caret macOS安装相比,似乎有必要为centOS安装上的每个xgboost进程指定线程数( nthread = 1 ):
caret.cv = train(yol ~ .,
data = kmer.train,
method = 'xgbTree',
tuneGrid = tune.grid,
trControl = train.control,
nthread = 1)
虽然未能这样做仍然会在macOS上产生1个线程/进程,xgboost将(据我所知)多线程并尝试占用每个进程的所有线程。