【问题标题】:Running MPI on two hosts在两台主机上运行 MPI
【发布时间】:2013-02-10 22:14:39
【问题描述】:

我浏览了很多示例,但我仍然感到困惑。我从here 编译了一个简单的延迟检查程序,它可以在一台主机上完美运行,但是当我尝试在两台主机上运行它时它会挂起。但是,运行类似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

【问题讨论】:

  • 那是tcp BTL 组件试图在节点4 和节点5 之间建立连接以开始发送消息并失败。您的分析是正确的 - hostname 不进行 MPI 通信,这就是它工作正常的原因。只需指示您的防火墙都接受来自其他主机的连接。
  • Hristo - 如果您愿意回复我很乐意接受!关闭局域网内的 IPTables 工作正常!
  • 你去吧 - 对您的特定问题的回答和一些额外的信息,对于遇到相同问题但出于不同原因的其他人可能会派上用场。

标签: cluster-computing mpi


【解决方案1】:

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

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

$ 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 地址与主机文件中您的第二台主机的地址匹配,因此问题一定来自活动的防火墙规则。

【讨论】:

  • 同意,甜蜜的回答!对我们来说,简单的解决方法是在我们的 LAN 中禁用 iptables
  • 这里有同样的问题。 MPI 代码将失败并引发有关连接超时的相同错误。在机器上禁用防火墙的修复解决了这个问题。
  • 包括接口对我有用,但是有没有办法找出错误使用的接口?
  • @Jounathaen 从错误消息中取出 IP 并将其与节点的路由表进行比较。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 2012-09-29
  • 2019-11-20
  • 2017-02-04
  • 2018-05-28
  • 2021-03-13
相关资源
最近更新 更多