【发布时间】:2016-05-30 20:06:25
【问题描述】:
我曾经使用doMC 和foreach 进行并行计算,现在我可以访问集群。我的问题和Going from multi-core to multi-node in R类似,但是这个帖子没有回复。
基本上,我可以向我的批处理排队系统请求多个任务 -n 和每个任务的多个内核 -c。我确实设法使用doMPI 对我请求的任务数量进行并行模拟,但我现在想使用startMPIcluster 的maxcores 选项来使每个MPI 进程都使用多核功能。
我注意到parallel::detectCores() 似乎没有看到我被归属了多少个核心并返回一个节点的最大核心数。
目前我已经尝试过:
ncore = 3 #same number as the one I put with -c option
library(Rmpi)
library(doMPI)
cl <- startMPIcluster(maxcores = ncore)
registerDoMPI(cl)
## now some parallel simulations
foreach(icount(10), .packages = c('foreach', 'iterators', 'doParallel')) %dopar% {
## here I'd like to use the `ncore` cores on each simulation of `myfun()`
registerDoParallel(cores = ncore)
myfun()
}
(myfun 内部确实有一些foreach 循环)但如果我设置ncore > 1 则会出现错误:
{ 中的错误:任务 1 失败 - “'mckill' 失败”
谢谢
编辑
我可以访问的机器是http://www-ccrt.cea.fr/fr/moyen_de_calcul/airain.htm,其中指定了“Librairies MPI: BullxMPI, distribution Bull MPI 优化并与 OpenMPI 兼容”
【问题讨论】:
-
我猜你正在使用 Slurm。您是通过 sbatch 提交作业吗?你是如何执行 R 脚本的?您使用的是 mpirun 还是 srun?
-
是的,我在某处看到过这个词 (slurm)(我绝对不是 HPC 专家)。我正在使用“ccc_mprun -n 10 -c 5 R CMD BATCH --vanilla myscript.R”之类的东西执行脚本。我首先使用 mpirun,但后来有人告诉我改用这个 ccc_mprun。我也尝试过交互模式,但实际上即使没有这种“双重”并行化,我也无法使用 -c 提供的资源
-
我还看到您对另一篇有关 Rmpi::mpi.universe.size() 的相关帖子的评论,在我的情况下,它只返回 -n 中给出的值,而不是产品 -n*- c
-
我的问题确实是一个纯粹的
doMC问题。虽然我已经完成了多核计算机(不是集群),但我不明白为什么它在这里不起作用。我已经看到了一些有关为什么在某些 Linux 发行版上 R 不能并行运行的相关问题;我会尝试以这种方式挖掘一下并关闭这个问题。 -
您的 MPI 实现可能不喜欢工人派生进程,这是由 doMC 使用的 mclapply 函数完成的。当 mclapply 尝试终止分叉的子进程时,您遇到错误似乎很奇怪。我从没见过。
标签: r foreach parallel-processing mpi multicore