MPI多节点运行时阻塞/连接拒绝等问题(已解决)

        最近在搞mpi4py + 多节点运行并行运算,结果本地单机跑得好好的,提交到linux上多机集群后的连接问题困扰了我许久,最后去官方看文档找到了答案!!

运行代码:(这是一个mpi4py计算pi的栗子)

#pi_test.py
from mpi4py import MPI

comm = MPI.COMM_WORLD
comm_rank = comm.Get_rank()
comm_size = comm.Get_size()


k = (1.0 if comm_rank % 2 == 0 else -1.0)/(2 * comm_rank +1)

# data = 1 - 1/3 + 1/5 - 1/7 + 1/9 -............ = pi/4
data = comm.reduce(k,root=0,op=MPI.SUM)

if comm_rank == 0:
    pi = data * 4
    print('pi%f' % pi)

 本地执行(单机开9个进程完美运行):

提交到linux多机运行:

先设置hostfile: 执行命令:mpiexec --allow-run-as-root --hostfile mpi_config_file python pi_test.py  

结果出现了连接问题并且阻塞了:

[controller][[29731,1],4][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_recv_connect_ack] received unexpected process identifier [[29731,1],7]
[controller][[29731,1],8][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_recv_connect_ack] received unexpected process identifier [[29731,1],7]

有时候还会出现:

[localhost][[30780,1],2][btl_tcp_endpoint.c:796:mca_btl_tcp_endpoint_complete_connect] connect() to 172.17.0.1 failed: Connection refused (111)


连接不到172.17.0.1的错误

解决:

最终在官方的技术文档中,找到了答案。

意思就是说,openMPI会贪婪地寻找两台机器的所有IP接口,但是我们不会用到所有的IP接口,并且有的IP接口可能是不能用的(上面连接不上127.17.0.1可能就是不能用的接口),所以我们要去用 --mca btl_tcp_if_include 接口1,接口2 来限制他用的接口。

步骤一:用ip addr 命令找到master的接口列表

步骤二:我们选用em1接口的10.10.20.19/24 来作为本次通信的IP接口

大功告成!

小弟不才,有错请大佬斧正!

官网参考:https://www.open-mpi.org/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值