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

使用MPI4PY在多节点运行Python程序遇阻塞问题求助

多节点运行MPI Python程序无输出问题

问题描述

我在多节点集群测试Python MPI程序,先写了一个hello world脚本(代码见下文)。单节点场景下,用swrun或srun申请1个计算节点,加载opence/1.5.1模块后,通过mpirun运行脚本可正常输出结果。但用指定srun命令申请2个节点后,执行mpirun python hello_mpi.py或mpirun -np 2 python hello_mpi.py时,程序既无输出也无报错,一直处于运行状态。

环境信息:

  • mpirun(Open MPI)4.1.1
  • Python 3.9.12

相关代码与命令

hello_mpi.py 代码

from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
print('hello world from process %d/%d' %(rank,size))

申请2节点的srun命令

srun --partition=cpu --time=4:00:00 --nodes=2 --ntasks-per-node=1 --sockets-per-node=1 --cores-per-socket=1 --threads-per-core=1 --mem-per-cpu=1200 --wait=0 --export=ALL --gres=gpu:v100:0 --pty /bin/bash

环境路径验证命令及输出

which python 
/opt/miniconda3/envs/opence-v1.5.1/bin/python
which mpirun 
/opt/miniconda3/envs/opence-v1.5.1/bin/mpirun.
which mpi

/usr/bin/which: no mpi in (/opt/miniconda3/envs/opence-v1.5.1/bin:/opt/miniconda3/condabin:/usr/local/cuda-11.2/bin:/opt/openmpi-v4.1.1/bin:/home/jbtrejo2/.local/bin:/home/jbtrejo2/bin:/opt/swsuite/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin).

排查与解决建议

  1. 避免MPI启动嵌套:用srun申请交互式节点后再执行mpirun,容易出现启动嵌套导致的通信阻塞。建议直接用srun启动MPI程序,比如执行srun python hello_mpi.py。
  2. 指定MPI通信方式:多节点运行时,强制Open MPI使用TCP通信,执行mpirun --mca btl tcp,self -np 2 python hello_mpi.py,避免默认通信组件在跨节点场景下失效。
  3. 验证mpi4py绑定版本:检查mpi4py是否与当前Open MPI版本兼容,执行python -c "from mpi4py import MPI; print(MPI.Get_version())",确认输出的版本为4.1.1。若版本不匹配,需重新编译mpi4py绑定当前集群的Open MPI。
  4. 检查节点连通性:确认两个计算节点之间能正常通信,可通过ping命令测试节点间网络,同时检查集群防火墙是否拦截MPI通信端口。
  5. 显式指定节点列表:在mpirun中通过--host参数指定两个节点的主机名,确保MPI能正确识别并调度到申请的节点上。

内容的提问来源于stack exchange,提问作者Jacob Trejo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:38:22