在macOS和CentOS上使用doSNOW集群进行Parallel Caret

时间:2017-07-18 16:24:45

标签: r machine-learning parallel-processing cpu-usage r-caret

我遵循本教程机器学习简介使用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

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将(据我所知)多线程并尝试占用每个进程的所有线程。