我们不能在超过 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 在第一个命令上工作。
到目前为止,我们已经看到其他人报告了同样的错误而没有任何解决方案。例子:
有任何想法吗?
问题很可能是因为 Open MPI 默认为基于树的生成,这意味着它从节点 A 到节点 B,然后 ssh 从节点 B 到节点 C。请参阅https://blogs.cisco.com/performance/tree -based-launch-in-open-mpi和https://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 hostnameRun Code Online (Sandbox Code Playgroud)