我正在尝试构建一个集群来并行化 R 函数。我在 Ubuntu 和 R 包(Rmpi 和 Snow)中使用 Open MPI。我正在运行的测试代码是:
cl <- makeMPIcluster(8)
fun <- function(){
Sys.info()[c("nodename")]
}
clusterCall(cl,fun)
stopCluster(cl)
mpi.quit()
命令是:
mpirun -H localhost,node2 -n 1 R --slave -f testSnowMPI.R
问题是所有返回都是本地主机名。我也观察了 localhost 和 node2 中的进程,并且该进程似乎开始了(localhost 中的 4 个,node2 中的 4 个)但很快 node2 处的从属进程停止并且一切都在 localhost 中执行。
我为每个节点使用不同的脚本(testSnowMPI.R)进行了另一项测试,当我将参数-n 1 更改为 -n 2时,我得到了不同的返回值,但两个脚本都是由 localhost 执行的。
另一个有趣的测试是当我在 localhost 中执行mpirun命令时,我只是设置了 node2 主机来执行(-H node2)。我得到的答案是为这个作业分配的所有节点都已经填满了。
我可以从 node2 ping localhost,从 localhost ping node2。而且我已经设置了没有密码的 ssh 连接。
似乎node2中的进程正常启动,但它无法将返回写入master,然后localhost完成所有工作。
我使用 node2 作为 localhost 进行了相同的测试,并且行为完全相同。
您对这些测试的奇怪行为有任何想法吗?
编辑
我只使用 Rmpi 函数(没有 Snow 函数)做了一些测试。我写了这个脚本:
mpi.spawn.Rslaves()
mpi.close.Rslaves()
命令是:
mpirun -H localhost,node2,node2 -n 1 R --slave -f testSnowMPI.R
我得到了这个输出:
master (rank 0, comm 1) of size 3 is running on: node1
slave1 (rank 1, comm 1) of size 3 is running on: node1
slave2 (rank 2, comm 1) of size 3 is running on: node1
(node1 是本地主机)