mpirun无调试信息无报错挂起问题求助(重启后失效)
排查与解决mpirun本地挂起问题
1. 验证本地SSH连通性(排除基础依赖问题)
尽管已配置无密码SSH,重启后仍可能出现权限或配置变动,执行以下命令确认:
ssh localhost echo "test"
若命令挂起,需重新检查:
~/.ssh/id_rsa权限设为600,~/.ssh目录权限设为700~/.ssh/authorized_keys已正确添加本地公钥,权限设为600
2. 切换OpenMPI进程启动器(绕开Hydra异常)
直接指定非Hydra的启动器测试,优先用本地fork模式:
# 使用fork模式启动(本地运行无SSH依赖) mpirun --mca plm_rsh_agent fork -np 8 ./_my_code_ # 或强制用rsh模式(依赖本地SSH) mpirun --mca plm rsh --mca plm_rsh_agent ssh -np 8 ./_my_code_
若fork模式正常运行,说明问题出在Hydra配置层面。
3. 配置Hydra优先使用fork模式(永久生效)
创建用户级Hydra配置文件,强制本地启动用fork:
echo "plm_rsh_agent=fork" >> ~/.hydra.conf
该配置会覆盖系统级设置,避免Hydra依赖SSH启动本地进程。
4. 排查OneAPI与OpenMPI环境冲突
同时安装两套MPI环境可能导致变量冲突,清理环境后单独加载OpenMPI测试:
unset I_MPI_ROOT source /etc/profile.d/openmpi.sh mpirun -np 8 echo "hello world"
若恢复正常,后续运行时需确保只加载一套MPI环境(要么用系统OpenMPI,要么用OneAPI自带的MPI)。
5. 检查系统进程限制与安全工具
- 检查用户进程数限制:
ulimit -u
确保数值大于启动进程数(默认一般为1024,满足需求)。
- 检查AppArmor是否限制mpirun/sshd:
systemctl stop apparmor mpirun -np 8 echo "hello world"
若停止后恢复正常,需调整AppArmor规则放行相关进程。
6. 启用PLM模块调试日志
输出进程管理模块的详细日志,定位挂起阶段:
mpirun --mca plm_base_verbose 10 -np 8 echo "hello world"
根据日志信息可进一步定位是进程创建、通信还是权限问题。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

