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

Slurm任务调度:如何配置task3在task1和task2完成后启动

Slurm任务依赖配置:让task3等待task1和task2完成后启动

我需要配置Slurm任务依赖,让task3仅在task1和task2均成功完成后再启动。目前采用的链式调度(task1完成后启动task2,task2完成后启动task3)效率较低,想改成task1和task2并行执行,task3等两者都完成再启动。

当前链式调度脚本

task1=$(sbatch --parsable --job-name="${JobID1}" ${Dir}/something.sh)
sleep 2
echo ${task1}
task1=${task1} 

task2=$(sbatch --parsable --dependency=aftercorr:$task1 --job-name="${JobID2}" ${Dir}/somethingelse.sh)
sleep 2
echo ${task2}
task2=${task2} 

task3=$(sbatch --parsable --dependency=aftercorr:$task2 --job-name="${JobID3}" ${Dir}/somethingelse.sh)
sleep 2
echo ${task3}
task3=${task3} 

尝试的并行依赖配置

我尝试了以下代码,但不确定语法是否正确:

task3=$(sbatch --parsable --dependency=aftercorr:$task1,$task2 --job-name="${JobID3}" ${Dir}/somethingelse.sh)
sleep 2
echo ${task3}
task3=${task3} 

语法正确性说明

你尝试的代码完全正确。Slurm的aftercorr依赖支持用逗号分隔多个任务ID,表示所有指定的前置任务都必须成功完成(即退出码为0),才会启动当前任务。

另外可以优化脚本里的冗余部分:

  • sleep 2完全没必要,--parsable参数会立即返回任务ID,不需要等待
  • task1=${task1}这种重复赋值属于无效代码,可以直接删除

优化后的完整脚本示例:

# 提交task1和task2并行执行
task1=$(sbatch --parsable --job-name="${JobID1}" ${Dir}/something.sh)
task2=$(sbatch --parsable --job-name="${JobID2}" ${Dir}/somethingelse.sh)

# 提交task3,等待task1和task2都成功完成
task3=$(sbatch --parsable --dependency=aftercorr:$task1,$task2 --job-name="${JobID3}" ${Dir}/somethingelse.sh)

# 可选:输出任务ID
echo "Task1 ID: $task1"
echo "Task2 ID: $task2"
echo "Task3 ID: $task3"

如果需要task3在task1和task2无论成功失败都启动,只需把aftercorr换成afterany即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:30:50