2013-02-25 59 views
1

我已经浏览了很多示例,但我仍然感到困惑。我从here编译了一个简单的延迟检查程序,它在一台主机上完美运行,但是当我尝试在两台主机上运行它时,它会挂起。然而,运行像hostname运行正常:在两台主机上运行MPI

[[email protected] latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 hostname 
[4:16622] [[5908,0],0] odls:default:fork binding child [[5908,1],0] to slot_list 0 
4 
[5:12661] [[5908,0],1] odls:default:fork binding child [[5908,1],1] to slot_list 0 
5 

但这里是编译延迟程序:

[[email protected] latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 latency 
[4:16543] [[5989,0],0] odls:default:fork binding child [[5989,1],0] to slot_list 0 
[5:12582] [[5989,0],1] odls:default:fork binding child [[5989,1],1] to slot_list 0 
[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110) 

我目前的猜测是有什么毛病我的防火墙规则(如主机名不沟通主机之间,但延迟程序)。

[[email protected] latency]$ cat rankfile 
rank 0=10.0.2.4 slot=0 
rank 1=10.0.2.5 slot=0 
[[email protected] latency]$ cat hostfile 
10.0.2.4 slots=2 
10.0.2.5 slots=2 
+0

这就是'tcp' BTL组件试图建立以开始发送邮件和失败的节点'4'和节点'5'之间的连接。你的分析是正确的 - 'hostname'不会进行MPI通信,这就是为什么它能正常工作。只需指示您的防火墙都接受来自其他主机的连接。 – 2013-02-25 18:04:27

+1

Hristo - 如果您想回复作为答案,我会很高兴接受它!关闭LAN内的IPTables工作正常! – Hamy 2013-02-25 18:05:46

+0

你去了哪里 - 回答你的具体问题和一些其他信息,这些信息可能适用于那些遇到同样问题但出于不同原因的其他人。 – 2013-02-25 18:22:47

回答

7

运行Open MPI作业涉及两种通信方式。首先必须启动这项工作。 Open MPI使用特殊框架来支持多种启动,并且您可能通过SSH使用rsh远程登录启动机制。很明显,您的防火墙已正确设置为允许SSH连接。

当启动一个Open MPI作业并且这些进程是真实的MPI程序时,它们连接回mpirun进程,该进程生成作业并了解作业中的所有其他进程,最重要的是每个进程的可用网络端点。此消息:

[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110) 

表明,它运行在主机4过程中无法打开一个TCP连接到运行在主机5过程。最常见的原因是存在一个限制入站连接的防火墙。所以检查你的防火墙是第一件事。

另一个常见的原因是,如果两个节点上有配置的附加网络接口和向上,兼容的网络地址,但没有可能性在它们之间建立连接。这种情况通常发生在新的Linux设置中,其中默认情况下会引入各种虚拟和/或隧道接口。一个可以指示打开MPI由btl_tcp_if_exclude MCA参数列出它们(作为接口的名称或CIDR网络地址),跳过这些接口如:

$ mpirun --mca btl_tcp_if_exclude "127.0.0.1/8,tun0" ... 

(一个总是要添加环回接口,如果设置btl_tcp_if_exclude

或一个可以明确指定由列出他们在btl_tcp_if_include MCA参数用于通信哪些接口:

$ mpirun --mca btl_tcp_if_include eth0 ... 

由于在急诊室的IP地址ror消息与主机文件中第二个主机的地址相匹配,那么问题必须来自活动防火墙规则。

+1

同意,并且甜美的回答!对我们来说简单的解决方法是在我们的局域网内禁用iptables – Hamy 2013-02-25 18:32:45

+0

同样的问题在这里。 MPI代码会失败并且会抛出关于连接超时的相同错误。在机器上禁用防火墙的问题解决了这个问题。 – wandadars 2016-04-12 18:59:35

相关问题