控制registerDoParallel使用的CPU数量

时间:2018-04-16 08:16:34

标签: r doparallel rparallel

我最近继承了一个传统的R脚本,在某些时候训练一个带有大回归矩阵的梯度增强模型。使用doParallel::registerDoParallel函数并行化此任务。最初,该脚本启动了并行后端:

cl = makeCluster(10)
doParallel::registerDoParallel(c)

工作站有12个CPU和28 GB RAM。回归矩阵刚刚超过2 GB,我认为这个设置是可管理的,然而,它会启动几十个子进程,耗尽内存并在几秒钟内崩溃R.最后我理解在Linux上,使用cores参数可以实现更可预测的设置:

doParallel::registerDoParallel(cores = 1)

其中cores实际上是每个CPU的子进程数,即cores = 2,它在这12个CPU架构中启动了24个子进程。问题在于,如此庞大的回归矩阵,甚至12个子过程就太多了。

registerDoParallel启动的子流程数量如何限制在8?它会帮助使用不同的并行化库吗?

更新:为了确定每个子流程所需的内存,我运行了脚本而没有启动群集或使用registerDoParallel;然而,产生了12个后端子流程。罪魁祸首是caret::train 功能,它似乎是在没有疏忽的情况下管理并行化。我打开a new issue at GitHub询问有关如何限制此函数使用的资源的说明。

0 个答案:

没有答案