Open MPI 1.8.8下节点数超3时MPI程序执行挂起问题问询
Open MPI 1.8.8多节点运行异常
运行现象
- 3节点部署场景下程序可正常运行,对应执行命令与输出:
[changmx@gpu02 mpiTest]$ mpiexec -n 4 -host gpu02,gpu03,gpu04 helloworld [gpu04:16537] [[37424,0],2] remote spawn is NULL! [gpu03:01562] [[37424,0],1] remote spawn is NULL! Hello World! Process 1 of 4 on gpu02 Hello World! Process 3 of 4 on gpu04 Hello World! Process 0 of 4 on gpu02 Hello World! Process 2 of 4 on gpu03 [changmx@gpu02 mpiTest]$ mpiexec -n 4 -host gpu02,gpu03,gpu05 helloworld [gpu03:01597] [[37381,0],1] remote spawn is NULL! [gpu05:26312] [[37381,0],2] remote spawn is NULL! Hello World! Process 0 of 4 on gpu02 Hello World! Process 1 of 4 on gpu02 Hello World! Process 2 of 4 on gpu03 Hello World! Process 3 of 4 on gpu05
- 4节点部署场景下程序执行后无正常输出,无主动退出信号,需手动按
Ctrl+C终止进程,对应执行命令与输出:
[changmx@gpu02 mpiTest]$ mpiexec -n 4 -host gpu02,gpu03,gpu04,gpu05 helloworld [gpu04:16671] [[37833,0],2] remote spawn is NULL! [gpu03:01731] [[37833,0],1] remote spawn is NULL!
测试程序源代码
#include <stdio.h> #include <string.h> #include <math.h> #include <mpi.h> #include <cuda_runtime.h> #include <device_launch_parameters.h> int main(int argc, char *argv[]) { int myrank, numprocs; int namelen = 20; char process_name[namelen]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Get_processor_name(process_name, &namelen); printf("Hello World! Process %d of %d on %s\n", myrank, numprocs, process_name); MPI_Finalize(); }
排查与处理方案
输出中的remote spawn is NULL!是Open MPI 1.8.8版本的已知非致命告警,由orted进程初始化时未正确绑定spawn句柄导致,不会直接引发程序hang。可按以下步骤定位解决问题:
- 核查节点间双向SSH连通性:此前3节点测试未同时覆盖gpu04与gpu05的直连场景,需逐一验证所有节点两两之间的SSH免密登录是否正常,重点测试
ssh gpu04到gpu05、ssh gpu05到gpu04的连通性,排除因双向免密配置缺失导致的通信阻塞。 - 延长TCP通信超时时间:执行命令时添加通信超时参数,排除短时间内节点未响应导致的初始化卡住问题,示例命令:
mpiexec -n 4 -host gpu02,gpu03,gpu04,gpu05 -mca btl_tcp_connect_timeout 100 -mca btl_tcp_accept_timeout 100 helloworld - 显式指定节点slots配置:不依赖Open MPI默认的slots识别逻辑,明确每个节点的进程分配数量,排除拓扑识别异常引发的初始化问题,示例命令:
mpiexec -n 4 -host gpu02:1,gpu03:1,gpu04:1,gpu05:1 helloworld - 禁用不兼容的通信组件:若节点无InfiniBand网卡设备,执行时添加参数禁用openib、usnic等不适用的BTL组件,避免Open MPI探测不存在的硬件设备导致初始化超时,示例命令:
mpiexec -n 4 -host gpu02,gpu03,gpu04,gpu05 -mca btl ^openib,usnic helloworld - 排查节点防火墙规则:临时关闭所有节点的firewalld/iptables规则后重新测试,排除因4节点通信时端口触发量增多、被防火墙拦截导致的通信阻塞。
内容的提问来源于stack exchange,提问作者changmx
相关产品推荐
相关产品推荐

