2017-05-05 55 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