2017-05-05 51 views
0

我们无法在具有3台以上机器的Open MPI群集中运行程序。使用多于3台主机设置群集时发生MPI错误

如果我们运行:

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工程对第一个命令。

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

任何想法?

+0

你有没有正确设置/ etc/hosts中每个主机上的文件(或DNS)(后所有4个文件在这里)?当'ping'与目标主机的名称(这是目标主机上的'hostname'命令返回)一起使用时,每个主机是否可以ping每个其他主机? – osgx

+0

链接的邮件列表线程中的第一个响应提供了一种解决方法。这是否解决了你的问题? –

+0

这个问题很常见,因为我在一些论坛上看到这里看看https://www.mail-archive.com/[email protected]/msg29784.html 但idont认为这将有所帮助。 –

回答

2

该问题很可能是因为Open MPI默认为基于树的spawn,意思是它从节点A到节点B的ssh,然后是从节点B到节点C的ssh。有关更多详细信息,请参见https://blogs.cisco.com/performance/tree-based-launch-in-open-mpihttps://blogs.cisco.com/performance/tree-based-launch-in-open-mpi-part-2。因此,如果您禁用基于树的spawn(通过“mpirun --mca plm_rsh_no_tree_spawn 1” - 这将导致所有ssh从节点A发生),您的启动将按预期工作。

但是,更好的解决方案是使所有群集机器名都可以从所有机器解析出来。例如,当你可以成功运行这样的事情,然后打开MPI的推出应该成功运行:

foreach node (Node1 Node2 Node3 Node4 ...) 
 
    foreach other (Node1 Node2 Node3 Node4 ...) 
 
     echo from $node to $other 
 
     ssh $node ssh $other hostname