我将 open-mpi
更新为 3.0.0,重新加载 Rmpi
和 doMPI
,现在在 Ubuntu Linux R 3.4.2 上执行 startCluster
时出现此错误。
Error in mpi.comm.spawn(slave = rscript, slavearg = args, nslaves = count, :
MPI_ERR_SPAWN: could not spawn processes
如何诊断问题?
最佳答案
要测试您的 MPI 安装,请执行以下操作:
/* Put this text inside hello.c file */
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
int rank;
int world;
MPI_Init(NULL, NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &world);
printf("Hello: rank %d, world: %d\n",rank, world);
MPI_Finalize();
}
然后编译
mpicc -o hello ./hello.c
然后,尝试运行它
mpirun -np 2 ./hello
如果你得到
Hello: rank 0, world: 2
Hello: rank 1, world: 2
这意味着您的 MPI 安装没有问题,您必须查看 R 内部,否则意味着 MPI 配置不正确,并且继续前进的机会很小。
更新
它看起来像 R3.4 + OpenMPI 3.0.0 + Rmpi 错误行为 ;)
如果您尝试在 R 之外运行 slaves,它会起作用。所以,我猜 Rmpi 的 native 代码内部存在一些问题。
> cp -r /Library/Frameworks/R.framework/Versions/3.4/Resources/library/Rmpi ~
> cd ~/Rmpi
> mpirun -np 2 ./Rslaves.sh `pwd`/slavedaemon.R tmp needlog /Library/Frameworks/R.framework/Versions/3.4/Resources/
# if you put
# localhost slots=25
# inside ~/.hostfile, you can acquire more resources
> mpirun --hostfile=~/.hostfile -np 4 ./Rslaves.sh `pwd`/slavedaemon.R tmp needlog /Library/Frameworks/R.framework/Versions/3.4/Resources/
更新并正确修复 R 3.4 和 OpenMPI 3.0.0
创建文件:
~/.openmpi/mca-params.conf
并放入orte_default_hostfile=YOUR_USER_HOME/default_host
创建文件:带有内容的
~/default_host
localhost slots=25
运行 R,加载 RMpi 并运行代码
> library(Rmpi)
> mpi.spawn.Rslaves()
4 slaves are spawned successfully. 0 failed.
master (rank 0, comm 1) of size 5 is running on: pi
slave1 (rank 1, comm 1) of size 5 is running on: pi
slave2 (rank 2, comm 1) of size 5 is running on: pi
slave3 (rank 3, comm 1) of size 5 is running on: pi
slave4 (rank 4, comm 1) of size 5 is running on: pi
有关完整故事,请看这里:R3.4 + OpenMPI 3.0.0 + Rmpi inside macOS - little bit of mess ;)
关于r - 新安装 doMPI 抛出 MPI_ERR_SPAWN 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46541301/