在 macOS 和 CentOS 上与 doSNOW 集群并行插入
Parallel Caret with doSNOW clusters on macOS and CentOS
我正在学习本教程 R 和插入符号机器学习简介 (https://www.youtube.com/watch?v=z8PRU46I3NY) 并在 运行 R 并行时获得不同的机器行为与 centOS 相比,在 macOS 上使用 doSNOW:
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 上时,它会创建 4 个进程,每个进程有 1 个线程,因此 运行 4@>99%(xgbTree 在 ~6 分钟内)。在 centOS 上,它创建了 4 个进程,每个进程 运行 24 个线程,因此总共 24@>99%(xgbTree 未完成 >>30 分钟)。即使在 centOS 上只创建一个或两个集群,所有线程都被使用,服务器完全繁忙。
更新:当 运行 非脱字符代码使用 doSNOW 集群时,一切正常 - 运行 每个进程 1 个线程,即使在 centOS 上也是如此。
有什么我遗漏的吗? 我是否应该期望在这些具有相同脚本的系统上有不同的行为?我是否需要指定一些东西才能在 centOS 上使用?
我对插入符和并行 R 还很陌生,到目前为止,我了解到 mac/linux 和 windows 之间只有更大的区别。
如果我能为您提供更多信息,请告诉我。
感谢您的帮助和建议。
centOS 60x+ 上的 htop:
R --slave --no-restore ==file=/usr/lib64/R/library/snow/RSOCKnode.R --args MASTER=localhost PORT=11326 OUT=/dev/null SNOWLIB=/usr/lib64/R/library
R 版本 3.3.2: x86_64-redhat-linux-gnu ; x86_64-apple-darwin13.4.0 /
centOS server: 2 sockets each 6 cores, each 2 threads /
macOS MBP:1/8/1
这解决了我的问题:
与我的 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 将(据我所知)多线程并尝试占用每个进程的所有线程。
我正在学习本教程 R 和插入符号机器学习简介 (https://www.youtube.com/watch?v=z8PRU46I3NY) 并在 运行 R 并行时获得不同的机器行为与 centOS 相比,在 macOS 上使用 doSNOW:
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 上时,它会创建 4 个进程,每个进程有 1 个线程,因此 运行 4@>99%(xgbTree 在 ~6 分钟内)。在 centOS 上,它创建了 4 个进程,每个进程 运行 24 个线程,因此总共 24@>99%(xgbTree 未完成 >>30 分钟)。即使在 centOS 上只创建一个或两个集群,所有线程都被使用,服务器完全繁忙。
更新:当 运行 非脱字符代码使用 doSNOW 集群时,一切正常 - 运行 每个进程 1 个线程,即使在 centOS 上也是如此。
有什么我遗漏的吗? 我是否应该期望在这些具有相同脚本的系统上有不同的行为?我是否需要指定一些东西才能在 centOS 上使用?
我对插入符和并行 R 还很陌生,到目前为止,我了解到 mac/linux 和 windows 之间只有更大的区别。
如果我能为您提供更多信息,请告诉我。 感谢您的帮助和建议。
centOS 60x+ 上的 htop: R --slave --no-restore ==file=/usr/lib64/R/library/snow/RSOCKnode.R --args MASTER=localhost PORT=11326 OUT=/dev/null SNOWLIB=/usr/lib64/R/library
R 版本 3.3.2: x86_64-redhat-linux-gnu ; x86_64-apple-darwin13.4.0 / centOS server: 2 sockets each 6 cores, each 2 threads / macOS MBP:1/8/1
这解决了我的问题:
与我的 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 将(据我所知)多线程并尝试占用每个进程的所有线程。