跳转到正文

工作流

Workflow 用有向无环图(DAG)定义多个 Job 的创建顺序。每个模板通过 dependencies 指定前置节点;没有依赖的 Job 会先创建,后续 Job 只有在前置 Job 进入 Succeeded 后才会创建。

text
Workflow
├─ collect(无依赖)→ 子 Job: <workflow>-collect
├─ train(依赖 collect)→ collect 成功后创建
└─ evaluate(依赖 train)→ train 成功后创建

每个节点内嵌完整 JobSpec。子 Job 带有 rlinf.io/workflow 标签,并由 Workflow 管理。详情页会展示 DAG、各节点的阶段、依赖和消息;已创建的节点可以跳转到对应 Job 详情。

使用前确认 Job 能进入终态

StatefulSet Job 无法可靠推进依赖节点

Web 控制台创建的子 Job 使用 StatefulSet Task。这类 Task 只会上报 Pending、Running 或 Stopped,不会上报 Succeeded 或 Failed。依赖节点需要等待前置 Job 进入 Succeeded,因此带依赖的 Workflow 可能一直停在前置节点,也无法可靠进入成功或失败终态。

只有目标环境已经用相同工作负载类型验证终态状态可以正常上报时,才能把 Workflow 用于生产流程。不要将未完成这项验证的 Workflow 用于真实机器人操作。

Workflow 只表达 Job 的创建依赖,不会自动完成以下工作:

  • 从指定失败节点重新运行或继续;
  • 为节点设置 attempt、重试策略、超时或人工审批;
  • 固定 Git commit、镜像 digest、Hydra 最终配置、数据集或 checkpoint;
  • 说明并验证节点之间传递的输入和输出产物;
  • 从已有 Job 导入模板、编辑已提交的 Workflow,或把一次运行克隆为新版本。

要获得可复现结果,请为每个模板记录输入、配置、镜像和输出。参见保留并恢复 RLinf 运行

查看节点状态

  • Workflow 创建后先进入 Pending,再进入 Running。
  • 没有依赖的根节点会先创建子 Job。
  • 只有 Succeeded 的前置 Job 会解除后续依赖。
  • 任一子 Job 上报 Failed 时,Workflow 进入 Failed;所有子 Job 上报 Succeeded 时,Workflow 进入 Succeeded。
  • 停止某个子 Job 不会暂停整个 DAG。
  • Succeeded 和 Failed 是 Workflow 终态,不能从终态恢复或为既有子 Job 增加 attempt。

这些状态受 Job 生命周期限制,参见状态与生命周期

删除前停止子任务并保存输出

删除 Workflow 前,先记录并停止已经启动的子 Job,确认 Pod、外部设备和业务连接已经退出,并检查持久输出已经保存。删除 Workflow 不会清理对象存储、hostPath、checkpoint 或外部追踪记录。