任务生命周期
本指南解释了 gflow 中任务的完整生命周期,包括状态转换、状态检查和恢复操作。
任务状态
gflow 任务可以处于以下七种状态之一:
| 状态 | 简写 | 描述 |
|---|---|---|
| Queued | PD | 任务正在等待运行(等待依赖或资源) |
| Hold | H | 任务被用户暂停 |
| Running | R | 任务正在执行 |
| Finished | CD | 任务成功完成 |
| Failed | F | 任务因错误终止 |
| Cancelled | CA | 任务被用户或系统取消 |
| Timeout | TO | 任务超过时间限制 |
状态分类
活动状态(任务尚未完成):
- Queued、Hold、Running
完成状态(任务已结束):
- Finished、Failed、Cancelled、Timeout
状态转换图
下图只保留核心状态转换。完成态均为终态。
右上角工具栏支持放大、适配、下载和全屏查看。
状态转换规则
从 Queued:
- → Running:当依赖满足且资源可用时
- → Hold:用户运行
gjob hold <job_id> - → Cancelled:用户运行
gcancel <job_id>或依赖失败(启用自动取消时)
从 Hold:
- → Queued:用户运行
gjob release <job_id> - → Cancelled:用户运行
gcancel <job_id>
从 Running:
- → Finished:任务脚本/命令以代码 0 退出
- → Failed:任务脚本/命令以非零代码退出
- → Cancelled:用户运行
gcancel <job_id> - → Timeout:任务超过时间限制(使用
--time设置)
从完成状态:
- 无转换(最终状态)
- 使用
gjob redo <job_id>创建具有相同参数的新任务
自动重试
- 用
gbatch --max-retries <N>或gjob update <job_id> --max-retries <N>为任务设置自动重试次数。 - 当运行中的任务以非零退出时,gflow 会在额度内提交新的重试任务。
- 仍在排队的下游依赖会自动改挂到最新一次重试任务上。
- 当前超时和显式 fail 仍然是终态。
- 手动
gjob redo与自动重试分开计数。
任务状态原因
某些状态的任务有关联的原因,提供更多上下文:
| 状态 | 原因 | 描述 |
|---|---|---|
| Queued | WaitingForDependency | 任务正在等待父任务完成 |
| Queued | WaitingForGpu (Resources) | 任务正在等待可用 GPU |
| Queued | WaitingForMemory (Resources) | 任务正在等待可用主机内存 |
| Queued | WaitingForResources | 任务正在等待其他调度器管理的资源或限制 |
| Hold | JobHeldUser | 任务被用户暂停 |
| Cancelled | CancelledByUser | 用户明确取消了任务 |
| Cancelled | DependencyFailed:<job_id> | 任务因任务 <job_id> 失败而自动取消 |
| Cancelled | SystemError:<msg> | 任务因系统错误而取消 |
使用 gjob show <job_id> 或 gqueue -f JOBID,ST,REASON 查看原因。
状态检查工作流
下图将流程收敛为“检查 -> 操作 -> 再检查”的循环: