Cluster computing 在两台主机上运行MPI

Cluster computing 在两台主机上运行MPI,cluster-computing,mpi,Cluster Computing,Mpi,我已经看了很多例子,但仍然感到困惑。我从编译了一个简单的延迟检查程序,它可以在一台主机上完美运行,但当我尝试在两台主机上运行它时,它会挂起。但是,运行类似于hostname的程序运行良好: [hamiltont@4 latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 hostname [4:16622] [[5908,0],0] odls:default:fork binding chi

我已经看了很多例子,但仍然感到困惑。我从编译了一个简单的延迟检查程序,它可以在一台主机上完美运行,但当我尝试在两台主机上运行它时,它会挂起。但是,运行类似于
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)
我目前的猜测是,我的防火墙规则有问题(例如主机名不在主机之间通信,但延迟程序可以)


运行开放式MPI作业涉及两种通信。首先,这项工作必须启动。OpenMPI使用一个特殊的框架来支持多种启动,您可能正在通过SSH使用
rsh
远程登录启动机制。显然,您的防火墙已正确设置为允许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
上运行的进程无法打开到主机
5
上运行的进程的TCP连接。最常见的原因是防火墙的存在,它限制了入站连接。所以首先要做的是检查防火墙

另一个常见的原因是,如果在两个节点上都配置了额外的网络接口,并且具有兼容的网络地址,但不可能在它们之间建立连接。这通常发生在更新的Linux设置上,默认情况下会启动各种虚拟和/或隧道接口。如果排除MCA参数,则可以通过在
btl\u tcp\u中列出这些接口(作为接口名称或CIDR网络地址),指示Open MPI跳过这些接口,例如:

$ mpirun --mca btl_tcp_if_exclude "127.0.0.1/8,tun0" ...
(如果设置
btl\u tcp\u如果排除
,则必须始终添加环回接口)

或者,可以通过在
btl\u tcp\u(如果包含
MCA参数)中列出用于通信的接口来明确指定这些接口:

$ mpirun --mca btl_tcp_if_include eth0 ...

由于错误消息中的IP地址与主机文件中第二台主机的地址匹配,因此问题一定来自活动的防火墙规则。

运行打开的MPI作业涉及两种通信方式。首先,这项工作必须启动。OpenMPI使用一个特殊的框架来支持多种启动,您可能正在通过SSH使用
rsh
远程登录启动机制。显然,您的防火墙已正确设置为允许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
上运行的进程无法打开到主机
5
上运行的进程的TCP连接。最常见的原因是防火墙的存在,它限制了入站连接。所以首先要做的是检查防火墙

另一个常见的原因是,如果在两个节点上都配置了额外的网络接口,并且具有兼容的网络地址,但不可能在它们之间建立连接。这通常发生在更新的Linux设置上,默认情况下会启动各种虚拟和/或隧道接口。如果排除MCA参数,则可以通过在
btl\u tcp\u中列出这些接口(作为接口名称或CIDR网络地址),指示Open MPI跳过这些接口,例如:

$ mpirun --mca btl_tcp_if_exclude "127.0.0.1/8,tun0" ...
(如果设置
btl\u tcp\u如果排除
,则必须始终添加环回接口)

或者,可以通过在
btl\u tcp\u(如果包含
MCA参数)中列出用于通信的接口来明确指定这些接口:

$ mpirun --mca btl_tcp_if_include eth0 ...

由于错误消息中的IP地址与主机文件中第二台主机的地址相匹配,因此问题一定来自活动的防火墙规则。

这是
tcp
BTL组件试图在节点
4
和节点
5
之间建立连接以开始发送消息,但失败了。您的分析是正确的-
hostname
不进行MPI通信,这就是它工作正常的原因。只要指示您的防火墙都接受来自另一个主机的连接即可。Hristo-如果您愿意回答,我很乐意接受!关闭局域网内的IPTables工作正常!这是对您的特定问题的回答和一些附加信息,这些信息可能对其他遇到相同问题但原因不同的人有用。
tcp
BTL组件试图在节点
4
和节点
5
之间建立连接,以便开始发送消息和弱点。您的分析是正确的-
hostname
不进行MPI通信,这就是它工作正常的原因。只要指示您的防火墙都接受来自另一个主机的连接即可。Hristo-如果您愿意回答,我很乐意接受!关闭局域网内的IPTables工作正常!这就是你的问题的答案和一些额外的信息,这些信息可能会对那些经历相同问题但原因不同的人有用。同意,回答很好!对我们来说,简单的修复方法是在我们的Laname问题中禁用iptables。MPI代码将失败,并抛出关于连接超时的相同错误。在计算机上禁用防火墙的修复解决了问题。包括接口对我来说是可行的,但是有没有办法找出错误使用了哪个接口?@Jounathaen从错误消息中获取IP,并将其与节点的路由表进行比较。同意,和