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

SBATCH脚本多节点并行任务异常:任务串行于单节点的解决方法

修复SBATCH脚本任务分布问题

你的脚本问题在于循环中逐个调用srun的方式没有利用SLURM预先申请的多节点资源,导致所有任务被调度到单个节点。以下是两种可行的修复方案:

方案一:用单个srun批量启动所有任务(推荐)

利用SLURM的任务分配机制,直接一次性启动40个任务,自动分布到8个节点(每个节点5个任务),同时用SLURM内置变量区分每个任务的配置文件:

#SBATCH --job-name=nrm3
#SBATCH --partition=batch
#SBATCH --nodes=8
#SBATCH --ntasks=40
#SBATCH --ntasks-per-node=5
#SBATCH --output=OUTPUTlognrm.3.log

# 批量生成所有配置文件
for ((i = 0; i < 40; ++i)); do
    echo "config_params" > "config_${i}"
done

# 用单个srun启动40个任务,%t代表任务ID(0-39),对应生成的配置文件
srun -n40 --ntasks-per-node=5 java main "config_%t"

方案二:任务内动态生成配置文件(更简洁)

无需提前循环生成配置文件,让每个任务自行生成对应ID的配置文件:

#SBATCH --job-name=nrm3
#SBATCH --partition=batch
#SBATCH --nodes=8
#SBATCH --ntasks=40
#SBATCH --ntasks-per-node=5
#SBATCH --output=OUTPUTlognrm.3.log

# 每个任务生成自己的配置文件并运行Java程序
srun -n40 --ntasks-per-node=5 bash -c '
    task_id=$SLURM_PROCID
    echo "config_params" > "config_${task_id}"
    java main "config_${task_id}"
'

问题根源解释

原脚本中循环调用srun -N1 -n1 &时,每个srun会被SLURM当作独立的作业步调度。由于脚本在提交节点执行,这些作业步大概率会被集中调度到同一个节点(提交节点),且无法利用你预先申请的8节点资源池。而单个srun会直接使用SBATCH申请的全部资源,按照--ntasks-per-node=5的规则自动将任务分布到所有节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:01:09