跳转到正文

保留并恢复 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 完整。

只有目标 RLinf 版本和入口明确支持时,才能使用 runner.resume_dir: auto。

停止前保留运行 ​

  1. 找到 RLinf 实际写入的完整 checkpoint 目录,不要只依据当前工作目录。
  2. 确认该目录位于能够保留数据的挂载中。需要在 Pod 重建或重新调度后恢复时,使用经过验证的对象存储;主机目录只有在新 Pod 回到保留原目录的节点时才有效。写入容器根文件系统的数据会随 Pod 消失。
  3. 让应用完成一次 checkpoint 保存;依据该 runner 的成功日志和完整性规则等待所有分片、状态文件和元数据落盘。
  4. 使用对象存储时,从文件浏览器或经批准的存储工具核对完整对象前缀、文件数量、大小和最后修改时间;对象较多时不要依赖控制台首批 100 项。使用主机目录时,请管理员在实际节点核对 checkpoint 文件、大小、时间和备份结果。
  5. 记录训练后端、global step、RLinf 代码 ref、镜像地址和版本、实际 digest、脱敏最终配置、Job YAML、数据版本和 checkpoint 完整路径。恢复训练需要精确识别原镜像;提交时只填写了 tag 时,应使用提交前保存的仓库或构建记录确认它当时对应的 digest。无法确认时,不要把这次恢复记录为精确复现。
  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,不要在同一目录上连续试错或清理旧数据。