跳转到正文

Job、角色、Worker 与 Task ​

在 Web 控制台中选择创建任务时,创建的是一个 RLark Job,不是一个 RLark Task。日常提交和查看训练任务时,主要关注 Job、角色和 Worker;查看 YAML、状态或排查编排问题时,才需要进一步查看 Task。

区分控制台中的几个对象 ​

名称对用户表示什么
控制台任务 / Job一次训练、评测或数据采集的完整运行定义
角色一组按相同节点选择、资源、镜像、脚本、环境变量和挂载创建的 Worker
Worker控制台显示的实际运行实例;当前 Kubernetes 运行方式下通常对应一个 Pod,并启动一个 Ray 节点
Task 模板Job YAML 的 spec.tasks[] 条目;描述一个角色应如何创建 Worker
Task 资源Job 提交后,RLark 根据 Task 模板创建并管理的独立资源

这里的 Task 资源不是 Kubernetes API 所说的子资源(例如 status 或 scale)。更准确地说,它是 Job 派生并管理的 Task 资源。

理解 Job 提交后的资源关系 ​

text
控制台角色
    │
    ▼
Job.spec.tasks[] 中的 Task 模板
    │
    │ Job Controller 根据模板创建并管理
    ▼
RLark Task 资源
    │
    │ 当前 Web 控制台的 Kubernetes 运行方式
    ▼
StatefulSet
    │
    ▼
Worker Pod(s)
    │
    ▼
Ray 节点

Job YAML 中的 spec.tasks[] 只是模板列表,不表示同名 Task 资源已经存在。Job 提交后,RLark 才会为每个模板创建 Task 资源;数据平面随后根据 Task 创建 StatefulSet 和 Pod。

Task API 还可以表达 Docker、Raw 和其他 Kubernetes 工作负载,但 Web 控制台的创建页面当前生成 Kubernetes StatefulSet 配置。本页后续关于 StatefulSet 和 Pod 的说明只适用于这条控制台创建路径。

理解角色如何产生 Worker ​

一个角色对应一个 Task 模板。角色中的已选节点数会成为该模板的副本数,并决定 RLark 尝试创建多少个 Worker。

角色统一定义这组 Worker 使用的:

  • 节点选择;
  • 单个 Worker 的 GPU 和设备数量;
  • 镜像、准备脚本和环境变量;
  • 主机目录或对象存储挂载。

不同角色可以选择同一批物理节点,但各角色的匹配数量、Worker 和资源申请会分别计算,不会按物理节点去重。一个物理节点上可以运行多个 Worker;这些 Worker 仍是不同的 Pod 和 Ray 节点,并分别获得 RLINF_NODE_RANK。

角色也不是 RLinf 组件。角色名称为 Actor、Rollout 或 Environment,不会让 RLinf 在对应 Worker 中自动启动同名组件。多节点或异构任务先根据已有 RLinf 配置确定 Ray 节点数量和 Worker 分组,再按照规划多节点和异构 Worker填写角色。

Header 角色必须只创建 1 个 Worker

运行脚本写入 Header 角色对应的 Task 模板。该 Task 的每个 Pod 都会启动 Ray Head 并执行同一份运行脚本,因此 Header 角色的已选节点数和 YAML 副本数都必须为 1。

在任务详情中核对 Worker ​

Worker 是控制台根据 Task 和 Pod 状态组成的运行实例视图,不是独立的 RLark 资源。展开 Worker 后可以查看:

  • 所属角色和 Task;
  • Pod 名称、阶段、所在节点和 IP;
  • 日志、WebTerminal 和其他运行时入口。

工作负载尚未产生 Pod 时,页面可能只显示 Task 摘要。此时还不能根据 Worker 行确认实际 Pod、节点或终端是否可用。

结合各层状态判断运行情况 ​

状态大致按以下顺序更新:

  1. StatefulSet 和 Pod 产生运行状态。
  2. 数据面把最近观察到的状态同步到 Task 和 Pod 资源。
  3. RLark 根据各 Task 的阶段更新 Job。
  4. 控制台把 Job、Task 和 Pod 状态组合成 Worker 视图。

刚提交、停止或恢复 Job 后,各层显示可能短暂不同步。等待一次正常同步后,再结合 Worker 日志、Ray 成员、RLinf 业务信号和持久输出判断结果。

当前控制台生成的 StatefulSet Task 不会上报 Failed 或 Succeeded。运行脚本结束、容器重启或日志报错时,Job 和 Task 仍可能显示 Running。各层状态的适用范围见状态与生命周期。