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

Slurm异构多测试作业执行失败问题排查求助

Slurm异构作业报错排查与解决方案

问题背景

在HPC集群通过Slurm异构作业开展多资源规模测试时,提交任务后出现崩溃,返回Exit Code 8,同时报错包含:

  • /scratch_local/slurm_job.xxxxxx 目录创建权限拒绝
  • script.sh: Exec format error

相关脚本与报错详情

Slurm提交脚本(slurm_script.sh)

#!/bin/bash 

#SBATCH -p my_partition
#SBATCH --exclusive
#SBATCH --time 16:00:00          # format: HH:MM:SS
#SBATCH -N 1                     # 1 node
#SBATCH --ntasks-per-node=32     # tasks out of 128
#SBATCH --gres=gpu:4             # gpus per node out of 4
#SBATCH --mem=246000             # memory per node out of 246000MB

#SBATCH hetjob

#SBATCH -p my_partition
#SBATCH --exclusive
#SBATCH --time 16:00:00          # format: HH:MM:SS
#SBATCH -N 2                     # 2 nodes
#SBATCH --ntasks-per-node=32     # tasks out of 128
#SBATCH --gres=gpu:4             # gpus per node out of 4
#SBATCH --mem=246000             # memory per node out of 246000MB

#SBATCH hetjob

#SBATCH -p my_partition
#SBATCH --exclusive
#SBATCH --time 16:00:00          # format: HH:MM:SS
#SBATCH -N 4                     # 4 nodes
#SBATCH --ntasks-per-node=32     # tasks out of 128
#SBATCH --gres=gpu:4             # gpus per node out of 4
#SBATCH --mem=246000             # memory per node out of 246000MB

#SBATCH hetjob

#SBATCH -p my_partition
#SBATCH --exclusive
#SBATCH --time 16:00:00          # format: HH:MM:SS
#SBATCH -N 8                     # 8 nodes
#SBATCH --ntasks-per-node=32     # tasks out of 128
#SBATCH --gres=gpu:4             # gpus per node out of 4
#SBATCH --mem=246000             # memory per node out of 246000MB

#SBATCH hetjob

#SBATCH -p my_partition
#SBATCH --exclusive
#SBATCH --time 16:00:00          # format: HH:MM:SS
#SBATCH -N 16                    # 16 nodes
#SBATCH --ntasks-per-node=32     # tasks out of 128
#SBATCH --gres=gpu:4             # gpus per node out of 4
#SBATCH --mem=246000             # memory per node out of 246000MB

srun --job-name=job1 --output=4cpu_%N_%j.out --het-group=0 script.sh 4

srun --job-name=job2 --output=8cpu_%N_%j.out --het-group=0 script.sh 8

srun --job-name=job3 --output=16cpu_%N_%j.out --het-group=0 script.sh 16

srun --job-name=job4 --output=32cpu_%N_%j.out --het-group=0 script.sh 32

srun --job-name=job5 --output=64cpu_%N_%j.out --het-group=1 script.sh 64

srun --job-name=job6 --output=128cpu_%N_%j.out --het-group=2 script.sh 128

srun --job-name=job7 --output=256cpu_%N_%j.out --het-group=3 script.sh 256

srun --job-name=job8 --output=512cpu_%N_%j.out --het-group=4 script.sh 512

执行脚本(script.sh)

make cpp_program_I_need_to_run
mkdir -p my_results

mpirun -n $1 cpp_program_I_need_to_run

# other tasks 

报错信息

cat slurm-8482798.out 
srun: error: r242n13: tasks 0-31: Exited with exit code 8
srun: launch/slurm: _step_signal: Terminating StepId=8482798.0

同时出现:

slurmstepd: error: Unable to create TMPDIR [/scratch_local/slurm_job.8482798]: Permission denied
slurmstepd: error: execve(): /cluster/home/userexternal/username/myfolder/script.sh: Exec format error

分步解决方案

1. 修复script.sh的Exec格式错误

  • 在script.sh第一行添加shebang头:#!/bin/bash
  • 赋予脚本执行权限:chmod +x script.sh

2. 解决TMPDIR权限问题

两种可行方案:

  • 方案一:自定义临时目录
    在Slurm脚本开头添加以下内容,指定自己有权限的临时目录:
    export TMPDIR=$HOME/tmp/slurm_$SLURM_JOBID
    mkdir -p $TMPDIR
    
  • 方案二:联系集群管理员
    如果/scratch_local是集群共享临时目录,申请对应权限或确认目录配置。

3. 修正MPI启动的冗余问题(Exit Code 8核心原因)

Slurm环境下无需使用mpirun,直接用srun启动MPI程序更适配资源调度,避免冲突:
修改script.sh中的MPI启动命令为:

srun -n $1 cpp_program_I_need_to_run

注:Slurm的srun会自动根据作业分配的资源调度任务,无需额外指定节点/主机列表,避免与异构作业的资源分组冲突。

4. 优化异构作业资源匹配

确保每个srun调用的--het-group对应资源规模与传入的任务数匹配:

  • het-group=0对应1节点32核,任务数不能超过32
  • het-group=1对应2节点64核,任务数不能超过64
  • 以此类推,避免超配资源导致任务崩溃

5. 额外优化建议

  • 将make cpp_program_I_need_to_run移至Slurm脚本开头,仅编译一次,避免每个任务重复编译浪费资源
  • 指定my_results的绝对路径,比如mkdir -p $SLURM_SUBMIT_DIR/my_results,确保不同节点都能写入结果目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:35:28