有没有办法结合Rmpi& mclapply?

时间:2017-12-07 14:13:35

标签: r parallel-processing mpi

我有一些R代码将函数应用于对象列表。该函数很简单,但涉及自举计算,可以使用mclapply轻松加速。在单个节点上运行时,一切都很好。

但是,我有一个集群,我一直在尝试将该函数的应用程序分发到跨多个节点的对象列表。要做到这一点,我一直在使用Rmpi(0.6-6)。

以下代码运行良好

library(Rmpi)
cl <- parallel::makeCluster(10, type='MPI')
parallel::clusterExport(cl, varlist=c('as.matrix'), envir=environment())
descriptor <- parallel::parLapply(1:5, function(am) {
    val <- mean(unlist(lapply(1:120, function(x) mean(rnorm(1e7)))))
    return(c(val, Rmpi::mpi.universe.size()))
}, cl=cl)
print(do.call(rbind, descriptor))
snow::stopCluster(cl)

但是,如果我将lapply转换为mclapply并设置mc.cores=10,则MPI会警告分叉会导致错误,并且作业会挂起。

(在所有情况下,工作都是通过SLURM提交的)

根据MPI警告,似乎我不应该在mclapply个工作中使用Rpmi。这是正确的评估吗?

如果是这样,是否有人建议如何并行化每个节点上运行的功能?

0 个答案:

没有答案