跳转到正文

保留并恢复 RLinf 训练

RLark 的启动操作会重新创建 Job 工作负载和 Ray 进程,不会自动选择 RLinf checkpoint。能否恢复训练取决于外部 RLinf 配置、checkpoint 完整性和持久存储。

了解停止、启动和恢复的区别

动作RLark 行为与 checkpoint 的关系
停止把 Kubernetes Task 副本数协调为 0,终止当前 Pod 和 Ray 进程不写 checkpoint,也不等待应用写完;必须事先由应用完成保存。
启动清除停止标志,按同一 Job 模板重新创建 Pod,并启动新的 Ray 集群runScript 是否设置恢复目录,决定 RLinf 从头开始还是尝试恢复。
删除删除 Job,并清理受控 Task、工作负载、Ray Service 和 Task 创建的 PVCBucket 或主机目录中的数据不一定删除,但 RLark 文件入口、Pod 日志和 PVC 引用可能消失。

容器文件系统、内存中的模型状态和 Ray actor 都不会跨 Pod 重建保留。

RLark 不管理 checkpoint 选择

Job CRD 没有 resume_dir、训练后端或 checkpoint 状态字段。RLark 不会:

  • 识别 FSDP、FSDP2 或 Megatron checkpoint 布局;
  • 判断分片、优化器、RNG、dataloader 或 replay buffer 是否完整;
  • 保证写入原子化;
  • 按 step 列出、比较或选择 checkpoint;
  • 启动自动转换为 runner.resume_dir
  • 验证恢复后的模型、step 或数据迭代位置。

这些行为由目标 RLinf 版本和具体 runner 决定。RLinf 常见 runner 使用 global_step_<N> 目录并从 runner.resume_dir 读取,但所需子目录随 runner 和训练后端不同。例如,FSDP 可包含分布式 checkpoint 分片,Megatron 可包含 iter_*mp_rank_*latest_checkpointed_iteration.txt;部分 runner 还保存 critic 或 dataloader 状态。不能只看到 actor/ 或目录名称就判定 checkpoint 完整。

runner.resume_dir: auto 也不是所有 RLinf runner 的通用能力。只有目标版本和入口明确支持时才能使用。

停止前保留运行

  1. 找到 RLinf 实际写入的完整 checkpoint 目录,不要只依据当前工作目录。
  2. 确认该目录位于能够保留数据的挂载中。需要在 Pod 重建或重新调度后恢复时,使用经过验证的对象存储;主机目录只有在新 Pod 回到保留原目录的节点时才有效。写入容器根文件系统的数据会随 Pod 消失。
  3. 让应用完成一次 checkpoint 保存;依据该 runner 的成功日志和完整性规则等待所有分片、状态文件和元数据落盘。
  4. 使用对象存储时,从文件浏览器或经批准的存储工具核对完整对象前缀、文件数量、大小和最后修改时间;对象较多时不要依赖控制台首批 100 项。使用主机目录时,请管理员在实际节点核对 checkpoint 文件、大小、时间和备份结果。
  5. 记录训练后端、global step、RLinf 代码 ref、镜像 digest、脱敏最终配置、Job YAML、数据版本和 checkpoint 完整路径。
  6. 导出仍需保留的日志。RLark 日志页只提供每个主容器末尾最多 1000 行,Pod 终止后无法通过该页面恢复完整历史。
  7. 确认异步上传、外部 tracker 和视频写入已经完成,再执行停止。

不确定 checkpoint 应该写到哪个路径时,请先阅读在训练任务中使用存储

停止不是 checkpoint 操作

控制台选择停止后没有二次确认,也不会调用 RLinf 保存接口。应用尚未完成写入时停止,可能留下不完整的 checkpoint。请先按训练后端的规则检查完整性,再使用该目录恢复。

选择恢复方式

根据是否需要修改 resume_dir 或其他运行字段选择操作。原 Job 的固定配置已经指向正确 checkpoint 时,可以重新启动;需要改配置时,请创建新 Job。

原 Job 已经设计为从固定配置解析恢复目录

如果原 runScript 每次都会从受版本控制的配置或稳定指针中取得正确 resume_dir,可以在更新该外部输入并确认无误后选择启动。RLark 仍会启动全新的 Pod 和 Ray 进程;这不是进程续跑。

需要修改 resume_dir 或其他运行字段

不要在已停止 Job 上使用编辑弹窗。弹窗重建 CRD 时会清除 spec.stopped,可能在提交时重新启动工作负载;它也不能完整保留所有 Pod 字段。

优先流程是:

  1. 保存原始 Job YAML 和 checkpoint 记录。
  2. 复制为新 Job,并在外部 Hydra 配置或已确认的运行脚本 override 中明确设置 checkpoint 路径。
  3. 重新执行启动前检查
  4. 在 YAML 预览中确认新名称、镜像、角色、资源、挂载和命令;原 Job 含 CPU、内存或其他创建器不支持字段时,不要用控制台复制。
  5. 保留原 Job,直到确认新 Job 已成功恢复。

恢复后验证

  1. 确认各角色落在预期节点,新的 Ray 集群包含全部预期 Worker。
  2. 在脱敏日志中找到 RLinf 明确加载所选 checkpoint 的信号,而不是只看到目录存在。
  3. 核对恢复的 global step、模型/优化器状态和 runner 要求的其他状态。
  4. 确认新指标从预期 step 继续,且没有意外覆盖旧 run。
  5. 等待下一次 checkpoint 完整写出并按同一规则验证。

任一项不符时停止新 Job,保留原 checkpoint,不要在同一目录上连续试错或清理旧数据。