在两台主机上运行MPI(Running MPI on two hosts)

2019-07-20 12:42发布

我已经通过很多例子看,我仍然感到困惑。 我从编一个简单的延迟检查程序在这里 ,它完美地运行在一台主机上,但是当我尝试在它挂两台主机上运行它。 然而,运行像hostname运行正常:

[hamiltont@4 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

但这里是编译程序的等待时间:

[hamiltont@4 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)

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

[hamiltont@4 latency]$ cat rankfile
rank 0=10.0.2.4 slot=0
rank 1=10.0.2.5 slot=0
[hamiltont@4 latency]$ cat hostfile 
10.0.2.4 slots=2
10.0.2.5 slots=2

Answer 1:

有两种通信方式参与运行的开放MPI作业。 首先,职业都有推出。 打开MPI采用了特殊的架构,支持多种的推出和你可能使用rsh通过SSH远程登录启动机制。 显然,你的防火墙设置正确,以允许SSH连接。

当打开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通过列出它们(作为接口的名称或CIDR网络地址)在跳过这些接口btl_tcp_if_exclude MCA参数,如:

$ 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地址在HOSTFILE你的第二个主机的地址相匹配,那么这个问题必须来自一个活跃的防火墙规则。



文章来源: Running MPI on two hosts