设置超过 3 个主机的集群时打开 MPI 错误
Open MPI error when setting up a cluster with more than 3 hosts
我们不能在 Open MPI 超过 3 台机器的集群中 运行 一个程序。
如果我们运行:
mpirun --host master,slave5,slave3 ./cluster
有效。
如果我们运行:
mpirun --host master,slave4,slave3,slave5 ./cluster
我们收到以下错误:
ssh: Could not resolve hostname slave5: Temporary failure in name resolution
尽管它看起来像是名称解析错误,但事实并非如此,因为 slave5 处理第一个命令。
到目前为止,我们已经看到其他人报告了同样的错误,但没有任何解决方案。示例:
有什么想法吗?
问题可能是因为 Open MPI 默认为基于树的生成,这意味着它从节点 A ssh 到节点 B,然后从节点 B 到节点 C。有关更多详细信息,请参阅 https://blogs.cisco.com/performance/tree-based-launch-in-open-mpi and 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 hostname
我们不能在 Open MPI 超过 3 台机器的集群中 运行 一个程序。
如果我们运行:
mpirun --host master,slave5,slave3 ./cluster
有效。
如果我们运行:
mpirun --host master,slave4,slave3,slave5 ./cluster
我们收到以下错误:
ssh: Could not resolve hostname slave5: Temporary failure in name resolution
尽管它看起来像是名称解析错误,但事实并非如此,因为 slave5 处理第一个命令。
到目前为止,我们已经看到其他人报告了同样的错误,但没有任何解决方案。示例:
有什么想法吗?
问题可能是因为 Open MPI 默认为基于树的生成,这意味着它从节点 A ssh 到节点 B,然后从节点 B 到节点 C。有关更多详细信息,请参阅 https://blogs.cisco.com/performance/tree-based-launch-in-open-mpi and 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 hostname