安装docker后导致intel mpi拉不起多机运行的问题解决记录
问题
在安装docker环境后 mpi 多机并行环境运行程序失效,mpi 程序拉起后无后续执行的信息,导致进程卡住
排查思路
- 检查 ssh 均正常,可以免密登陆
- 通过 pstree 查看 mpi 进程树,可以看到主副节点均能发现有进程占用
- 打开 mpi 详细调试日志
a.export I_MPI_DEBUG=5
b.export I_MPI_HYDRA_DEBUG=on
可以看到输出如下启动时的网卡信息输出后卡住:
1 | [0] MPI startup(): ===== NIC pinning on ubuntu04 ===== |
网卡名 br-0718f8abdfbb 即是 docker 的虚拟网卡名称,显然与指定的 mpi 网卡不一致,但是执行 mpirun 给的参数 -iface eno8403,此时怀疑 mpi 网卡调用发生错误。
问题原因
IntelMPI OFI (libfabric) 网卡自动选择问题:
Intel MPI 基于 OFI 时,I_MPI_OFI_PROVIDER 会自动选择第一个可用的网络接口(如 Docker 网桥),而非你指定的物理网卡。
运行以下命令查看系统支持的 OFI 驱动接口:
1 | fi_info -p tcp; fi_info -p verbs |
1 | provider: tcp |
可以看到第一个接口即是 docker 的接口,而不是物理网卡接口,由此判定是此原因导致了MPI未使用正确的网卡引起MPI进程无法正常通信。
解决办法
通过环境变量明确要求 OFI 使用物理网卡
1 | export FI_TCP_IFACE=eno8403 # 强制指定mpi 接口为物理网卡 |
再次执行:
1 | fi_info -p tcp; fi_info -p verbs |
1 | # 第一个接口已更改为物理网卡接口 |
此时再通过 mpirun 执行程序已恢复正常,且能看到调式日志:
1 | [0] MPI startup(): Number of NICs: 1 |