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

Slurm salloc分配节点后立即失败,sbatch正常的排查求助

Slurm salloc交互式作业分配节点后立即失败问题排查

问题背景

此前使用salloc分配计算节点一切正常,切换另一用户账号(仅conda路径变更,.bashrc配置相同)后salloc失效,切回原账号问题依旧,但sbatch批处理作业可正常运行。

现象

  • slurm-gpu-avail显示资源充足,请求参数正常
  • 执行命令:
salloc -J debug -p <partition> -t 0-6:00:00 --gres=gpu:4 --nodes=1 --qos=<qos-short>
  • 终端输出:
salloc: [Warning] You can login compute nodes after the job is executed for at least 5min
salloc: Pending job allocation <JOBID>
salloc: job <JOBID> queued and waiting for resources
  • 终端挂起后,squeue --me无作业显示;scontrol show job <JOBID>显示作业已分配至节点(NodeList=r8a30-a07)但立即失败,Start与End时间相同,状态为FAILED,原因是NonZeroExitCode,ExitCode=1:0

已尝试操作

  • 排查.bashrc和.bash_profile未发现异常
  • 添加--no-shell参数后问题依旧
  • 在$HOME目录执行、切换QoS均无效

普通用户可执行的排查命令

  1. 查看作业详细错误日志
sacct -j <JOBID> --format=JobID,JobName,Partition,NodeList,State,ExitCode,Elapsed,Reason,STDERR

重点提取STDERR路径,查看作业启动阶段的具体错误输出。

  1. 精简参数并启用 verbose 模式
salloc -p <partition> -t 1:00 --nodes=1 --no-shell --verbose

通过精简参数排除冗余配置影响,用--verbose获取更详细的作业启动日志。

  1. 对比salloc与sbatch的环境变量差异
  • 编写test_env.sh脚本:
#!/bin/bash
env > $HOME/sbatch_env.log

提交sbatch作业:sbatch -p <partition> -t 1:00 --nodes=1 test_env.sh

  • 用salloc执行同样的环境变量导出:
salloc -p <partition> -t 1:00 --nodes=1 env > $HOME/salloc_env.log

对比两个日志文件,重点关注PATH、LD_LIBRARY_PATH、CONDA相关变量的差异。

  1. 检查计算节点上的用户权限与目录访问性
    编写check_perm.sh脚本:
#!/bin/bash
ls -ld $HOME
id
echo "Home directory access test: $(test -r $HOME && echo OK || echo FAILED)"

提交sbatch作业执行,确认用户在计算节点上的UID/GID正常,且能正常访问home目录。

  1. 测试salloc执行简单命令
salloc -p <partition> -t 1:00 --nodes=1 echo "test"

若能成功输出,说明问题出在shell启动环节;若失败,则指向作业启动流程的基础问题。

故障原因分析

  1. 环境变量初始化冲突
    切换用户后conda路径变更,可能导致计算节点加载环境时触发错误(如conda初始化脚本执行失败)。sbatch默认可能跳过部分交互式shell配置,而salloc会完整加载用户shell的初始化脚本,导致错误触发作业退出。

  2. 计算节点的目录权限/挂载问题
    用户home目录在计算节点上可能出现NFS挂载异常或权限变更,salloc启动交互式shell时需要读取home目录下的配置文件,无法访问则直接退出;而sbatch作业若未依赖这些配置文件,可能不受影响。

  3. shell配置的交互式专属错误
    用户.bashrc或.bash_profile中可能存在仅在交互式环境下执行的代码(如未通过[[ $- == *i* ]]判断是否为交互式shell),这些代码在salloc启动时执行报错,但sbatch的非交互式环境不会触发。

  4. ExitCode=1:0的指向
    主进程退出码为1,说明作业启动时的初始进程(通常是用户shell)执行失败,可能是shell初始化报错、无法找到指定shell、权限不足等直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:12:35