You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 23:36:05