2

我最近继承了一个遗留的 R 脚本,它在某些时候训练了一个带有大回归矩阵的梯度提升模型。此任务使用该doParallel::registerDoParallel函数并行化。最初,脚本以以下方式启动并行后端:

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

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

doParallel::registerDoParallel(cores = 1)

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

启动的子进程的数量如何registerDoParallel限制为 8 个?使用不同的并行化库会有所帮助吗?

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

4

0 回答 0