2

我正在尝试构建一个集群来并行化 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 是本地主机)

4

0 回答 0