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

Slurm GPU集群批量提交实验并保障连续执行的问题咨询

现有脚本的调度逻辑
  • 你通过sbatch提交的外层批量执行脚本,会被Slurm识别为1个独立作业,仅会在squeue中生成1条排队记录。脚本内调用的所有srun命令属于该作业下的子作业步,不会单独进入调度队列。
  • 当这个作业被调度、分配到对应的资源后,脚本内的srun命令会按照编写顺序依次串行执行。只要你不主动终止作业、且作业没有触发集群的超时规则,所有实验会连续执行完成,中间不会被其他用户的作业抢占资源,不存在“跑完一组要等其他用户作业”的问题。
公共集群批量实验的优化方案

根据你的实验规模和集群规则,可以选择以下更灵活的方案,都可以实现实验连续执行不被插队的需求:

方案1:单作业串行/并行执行(最简便)

就是你当前写法的优化版本,适合总耗时不超过集群单作业最长时限的场景:

  • 在外层sbatch脚本头部正确声明需要的资源和总运行时长即可,比如申请单卡、总运行时长48小时的配置如下:
# 外层sbatch脚本头部配置
#SBATCH --partition=你的分区名称
#SBATCH --gres=gpu:1
#SBATCH --time=48:00:00 # 需大于所有实验的总耗时之和

# 按顺序执行所有训练脚本
bash training_1.sh
bash training_2.sh
...
bash training_n.sh
  • 如果你申请了多卡资源,想同时并行跑多组实验,可以调整为以下写法,充分利用资源:
# 外层sbatch申请4卡:#SBATCH --gres=gpu:4
for i in {1..4}; do
    # 每个srun分配1张卡,后台执行
    srun --gres=gpu:1 --exclusive bash training_${i}.sh &
done
# 等待所有后台任务执行完成
wait

方案2:Slurm作业数组(适合大规模/长耗时实验)

如果你的实验总耗时超过集群单作业最长时限,或者实验数量较多,推荐使用作业数组方案,避免单作业超时被强制终止:

  • 编写作业数组提交脚本如下,配置%1参数控制同时仅跑1个任务,结合singleton依赖保证任务按顺序执行,不会被其他用户作业插队:
# submit_array.sh
#SBATCH --partition=你的分区名称
#SBATCH --gres=gpu:1
#SBATCH --time=24:00:00 # 单组实验的最长耗时
#SBATCH --array=1-20%1 # 1-20为实验序号范围,%1表示同时仅调度1个任务
#SBATCH --dependency=singleton # 同组作业数组任务按顺序执行

bash training_${SLURM_ARRAY_TASK_ID}.sh
  • 提交时直接执行sbatch submit_array.sh即可,20组实验会按序号依次执行,每组实验是独立作业,不会触发单作业超时规则。

注意:无论选择哪种方案,都需要提前评估实验的运行时长,给--time参数预留足够的冗余量,避免作业运行到一半被集群自动终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:02