mpi4py集群测试脚本执行结果异常,如何解决?
问题描述
使用mpi4py搭建MPI集群时,运行基础测试脚本得到异常结果,预期效果为C语言MPI脚本的执行结果。
测试代码
from mpi4py import MPI world_comm = MPI.COMM_WORLD world_size = world_comm.Get_size() name = MPI.Get_processor_name() my_rank = world_comm.Get_rank() print('World Size: {0} | Name: {1} | Rank: {2}'.format(world_size,name,my_rank))
hostfile配置
no02 slots=3 no01 slots=5
排查与解决步骤
检查MPI启动命令
启动mpi4py脚本时必须正确指定hostfile,使用类似命令:mpirun --hostfile hostfile -n 8 python your_script.py注意
-n指定的总进程数不能超过hostfile中所有slots总和(此处为3+5=8),若进程数小于总和,MPI会按节点顺序分配进程。验证节点环境一致性
- 确保所有节点能无密码SSH互访,执行
ssh no01、ssh no02测试连通性。 - 所有节点的MPI版本、mpi4py版本必须完全一致,执行以下命令验证:
若输出不一致,需在所有节点重装相同版本的MPI和mpi4py。mpirun --hostfile hostfile which mpirun mpirun --hostfile hostfile python -c "import mpi4py; print(mpi4py.__version__)"
- 确保所有节点能无密码SSH互访,执行
修复输出同步问题
mpi4py的print可能因缓冲区未刷新导致显示错乱,修改代码强制刷新输出:from mpi4py import MPI world_comm = MPI.COMM_WORLD world_size = world_comm.Get_size() name = MPI.Get_processor_name() my_rank = world_comm.Get_rank() print('World Size: {0} | Name: {1} | Rank: {2}'.format(world_size,name,my_rank), flush=True)确认hostfile格式正确性
确保hostfile每行格式为主机名 slots=可用进程数,无多余空格或特殊字符,且主机名能被正确解析(执行ping no01、ping no02验证)。测试集群基础功能
先运行C语言MPI基础测试(比如mpirun --hostfile hostfile -n 8 hostname),确认集群本身工作正常后,再测试mpi4py脚本,排除集群基础环境问题。
内容的提问来源于stack exchange,提问作者Matheus William
相关产品推荐
相关产品推荐

