Slurm集群跨节点mpirun报错:ORTE daemon意外失败排查求助
跨节点OpenMPI任务失败的排查步骤
1. 先验证Slurm基础任务可用性
跳过OpenMPI,直接在交互式任务中执行跨节点srun命令,确认Slurm本身能否创建跨节点step:
srun --nodes=2 --ntasks-per-node=1 hostname
如果此命令也失败,说明问题核心在Slurm而非OpenMPI,结合报错Requested node configuration is not available,重点检查:
- 节点状态:执行
sinfo,确认目标节点(如node02)处于idle/alloc状态,无down/drain等异常标记 - 节点资源:执行
scontrol show node node02,检查节点可用CPU、内存等资源是否满足任务请求,同时确认节点未被配置特殊资源约束(如仅允许特定partition任务) - 任务属性:执行
scontrol show job [job_id](替换为实际任务ID,如18),查看任务的partition、约束条件是否与目标节点匹配
2. 确认OpenMPI与Slurm的集成支持
OpenMPI在Slurm环境中依赖plm_slurm模块启动远程daemon,需验证:
- 编译时是否启用Slurm支持:执行
ompi_info | grep plm_slurm,若无输出,说明编译时未包含Slurm支持,需重新编译OpenMPI并添加--with-slurm参数(确保编译环境能找到Slurm头文件与库,通常路径为/usr/include/slurm、/usr/lib64) - 强制使用Slurm PLM:在交互式任务中设置环境变量后重试:
export OMPI_MCA_plm=slurm mpirun hostname
3. 验证UCX网络配置兼容性
尽管编译时禁用了openib/verbs,UCX仍需正确识别集群网络:
- 检查UCX设备检测:执行
ucx_info -d,确认UCX能识别IB或以太网设备 - 节点间连通性:在交互式任务中,双向ping节点的IB IP与以太网IP,确认网络通畅;同时检查防火墙规则,确保节点间TCP端口(包括mpirun随机端口、Slurm step通信端口)未被拦截
- 指定UCX网络设备:设置环境变量指定可用网络接口,例如:
export UCX_NET_DEVICES=mlx5_0:1 # 替换为实际IB设备名 # 或允许UCX自动选择所有设备 export UCX_NET_DEVICES=all
4. 检查Slurm Step创建的权限与配置
报错srun: error: Unable to create step for job 18可能与Slurm配置或权限相关:
- 检查Slurm控制器参数:执行
scontrol show config | grep SlurmctldParameters,确认未禁用step创建 - 验证用户权限:确保任务所属用户在Slurm
AllowedUsers列表中,未被DeniedUsers排除;同时确认用户在节点间的SSH免密登录正常(部分Slurm配置依赖SSH) - 检查Munge服务:所有节点Munge服务需正常运行且使用相同密钥,执行
munge -n | unmunge在每个节点验证,同时查看/var/log/munge/munged.log是否有错误
5. 查看详细Slurm日志定位根因
- 查看Slurm控制器日志(通常路径
/var/log/slurm/slurmctld.log)与目标节点的Slurmd日志(/var/log/slurm/slurmd.log),搜索对应任务ID的日志条目,会包含更具体的错误原因(如资源不足、认证失败、网络通信异常等)
内容的提问来源于stack exchange,提问作者DSX
相关产品推荐
相关产品推荐

