Slurm执行srun -n 2命令报Socket超时错误如何排查解决
问题现象
- 单进程srun任务可正常执行,执行命令:
srun -n 1 /home/user/share/test/hello.o
正常返回:rpi40000: 0 of 1
- 双进程跨节点并行任务执行失败,执行命令:
srun -n 2 /home/user/share/test/hello.o
报错信息如下:
srun: error: slurm_receive_msgs: Socket timed out on send/recv operation srun: error: Task launch for StepId=53.0 failed on node rpi40001: Socket timed out on send/recv operation srun: error: Application launch failed: Socket timed out on send/recv operation srun: Job step aborted: Waiting up to 32 seconds for job step to finish. slurmstepd-rpi40000: error: *** STEP 53.0 ON rpi40000 CANCELLED AT 2022-06-27T01:33:37 *** srun: error: rpi40000: task 0: Killed
故障原因
单进程任务仅调度到本地节点rpi40000运行,不需要跨节点通信所以正常;双进程任务需要分配rpi40000、rpi40001两个节点的资源,控制进程和rpi40001上的任务进程通信超时就会触发该报错,常见触发原因有5类:
- 节点间网络不通:rpi40000和rpi40001之间的Slurm通信端口被防火墙拦截,或三层路由不通
- 异常节点服务异常:rpi40001上的slurmd服务未启动、版本和控制节点不匹配、进程僵死
- 认证不匹配:两个节点的Munge认证密钥不一致,跨节点通信鉴权被拒绝无响应
- 存储挂载异常:/home路径的共享存储未在rpi40001上正常挂载,节点找不到可执行文件导致任务进程无法启动
- 配置不一致:集群内各节点slurm.conf配置不统一,节点地址、端口、集群名配置存在错误
排查与解决步骤
按从易到难顺序排查即可:
- 验证基础网络连通
在rpi40000节点执行ping rpi40001确认IP连通,再执行nc -zv rpi40001 6818验证Slurm默认slurmd服务端口可访问,若端口不通检查两个节点的iptables/firewalld规则,放通6817-6819的Slurm通信端口段。 - 检查异常节点Slurm服务状态
登录rpi40001执行systemctl status slurmd确认服务处于运行状态,查看/var/log/slurm/slurmd.log的最新日志定位启动报错,执行sinfo确认rpi40001节点状态为idle,若处于down/drain状态先根据日志修复服务问题。同时确认两个节点安装的Slurm版本完全一致,版本不兼容会直接导致通信失败。 - 校验Munge认证有效性
先在两个节点分别执行munge -n | unmunge确认本地Munge服务运行正常,再在rpi40000执行munge -n | ssh rpi40001 unmunge,若返回鉴权错误,将控制节点上的/etc/munge/munge.key文件同步到所有计算节点,权限设为0400、属主为munge用户,重启所有节点的munge服务即可。 - 检查共享存储挂载
登录rpi40001执行ls /home/user/share/test/hello.o确认可执行文件存在,若提示文件不存在,检查NFS/其他并行存储的挂载配置,重新挂载存储保证所有计算节点都能通过相同路径访问到作业文件。 - 校验Slurm配置一致性
逐行对比所有节点的/etc/slurm/slurm.conf文件,确认ClusterName、SlurmctldHost地址、节点IP定义、通信端口配置完全一致,配置修改后同步到所有节点,依次重启slurmctld、各节点slurmd服务生效。
修复验证
所有问题修复完成后,先执行srun -N2 -n2 hostname做基础测试,命令正常返回两个节点的主机名即代表跨节点调度通信恢复正常,再执行原hello.o并行任务即可正常运行。
内容的提问来源于stack exchange,提问作者池田直哉
相关产品推荐
相关产品推荐

