设置超过 3 个主机的集群时出现 MPI 错误

Cho*_*ith 0 c linux openmpi

我们不能在超过 3 台机器的Open MPI集群中运行程序。

如果我们运行:

mpirun --host master,slave5,slave3 ./cluster
Run Code Online (Sandbox Code Playgroud)

有用。

如果我们运行:

mpirun --host master,slave4,slave3,slave5 ./cluster 
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误:

ssh: Could not resolve hostname slave5: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)

尽管它看起来像一个名称解析错误,但事实并非如此,因为 slave5 在第一个命令上工作。

到目前为止,我们已经看到其他人报告了同样的错误而没有任何解决方案。例子:

有任何想法吗?

Jef*_*res 5

问题很可能是因为 Open MPI 默认为基于树的生成,这意味着它从节点 A 到节点 B,然后 ssh 从节点 B 到节点 C。请参阅https://blogs.cisco.com/performance/tree -based-launch-in-open-mpihttps://blogs.cisco.com/performance/tree-based-launch-in-open-mpi-part-2了解更多详情。

因此,如果您禁用基于树的生成(通过“mpirun --mca plm_rsh_no_tree_spawn 1”——这将导致所有 ssh 从节点 A 发生),您的启动将按预期工作。

但是,更好的解决方案是让所有集群机器名称都可以从所有机器解析。例如,当您可以成功运行这样的程序时,Open MPI 的启动应该会成功运行:

foreach node (Node1 Node2 Node3 Node4 ...)
    foreach other (Node1 Node2 Node3 Node4 ...)
        echo from $node to $other
        ssh $node ssh $other hostname
Run Code Online (Sandbox Code Playgroud)