Skip to content

任务依赖

任务依赖用于构建工作流:一个任务会等待其他任务完成后才开始运行。

快速开始

bash
gbatch --time 10 python preprocess.py
gbatch --depends-on @ --gpus 1 --time 4:00:00 python train.py
gbatch --depends-on @ --time 10 python evaluate.py

依赖方式

单依赖

bash
gbatch --depends-on <job_id|@|@~N> python next.py

语法糖:

  • @:最近一次提交的任务
  • @~N:倒数第 N+1 次提交的任务(例如 @~1 是上一次提交)

多依赖(AND / OR)

bash
# AND:所有父任务都必须成功完成
gbatch --depends-on-all 101,102,103 python merge.py

# OR:任意一个父任务成功完成即可继续
gbatch --depends-on-any 201,202,203 python process_first_success.py

@ 语法同样可用于列表(例如 --depends-on-all @,@~1,@~2)。

脚本指令

脚本指令只支持 --depends-on(单依赖):

bash
#!/bin/bash
# GFLOW --depends-on=123

python next.py

自动取消

默认情况下,当依赖任务失败/取消/超时,依赖它的任务会被自动取消。若希望它们继续保持排队状态,可禁用自动取消:

bash
gbatch --depends-on <job_id> --no-auto-cancel python next.py

禁用后,即使父任务失败,依赖任务也不会自动继续运行;你需要手动取消或重新提交。

监控依赖

bash
# 树视图
gqueue -t

示例输出:

JOBID  NAME   ST  TIME      NODES  NODELIST(REASON)
1      prep   CD  00:02:15  0      -
├─2    train  R   00:10:03  1      0
└─3    eval   PD  -         0      (WaitingForDependency)
bash
# 只看部分任务
gqueue -j <job_id>,<job_id> -t

# 查看排队原因(通常是等待依赖或资源)
gqueue -s Queued -f JOBID,NAME,ST,NODELIST(REASON)

故障排除

依赖任务未启动

bash
gqueue -t
gqueue -j <parent_job_id> -f JOBID,ST
ginfo

修复失败后重做整条链

bash
gjob redo <job_id> --cascade

另见

Released under the MIT License.