跳转到主要内容
自动容错用于在符合条件的训练故障后重启进程或重新提交任务,减少长时间训练的人工值守。平台负责检测故障并执行恢复动作;训练程序需要把 checkpoint 写入持久化 Volume,并在新的尝试中正确加载状态。

了解自动容错

了解容错能力

训练任务容错由以下能力组成。不同能力的适用任务和处理目标不同。 容错策略 和 任务挂起(Hang)检测 存在联动关系:关闭 容错策略 会同时关闭 任务挂起(Hang)检测;开启 任务挂起(Hang)检测 会同时开启 容错策略。退出 checkpoint 通知 是独立能力,不属于下方三种容错模式。

选择容错模式

了解每项能力后,根据任务类型、训练时长和需要处理的故障选择基础模式或组合模式。 RayJob 使用基础模式,不套用 PyTorch 专属配置。

理解恢复机制和能力边界

发生符合条件的故障后,平台通常按以下链路处理:
  1. 检测故障:监测进程退出、GPU 或硬件错误、通信挂起等异常,并根据日志和错误信息辅助判断故障类型。开启相关能力后,平台还可能在训练正式开始前执行健康检测。
  2. 选择恢复动作:根据故障类型和当前配置,原地重启进程、重新提交任务、规避疑似故障节点或触发诊断。
  3. 继续训练:如果训练程序已经保存 checkpoint,新的进程或任务可以从 checkpoint 继续训练。
自动容错存在误判和漏判的可能,也不能修复代码错误、数据路径错误、显存不足等确定性问题。人工停止、重试预算耗尽或命中快速失败策略时,任务可能不再自动重提。配置 Hang 检测时,需要考虑模型加载、数据准备、评估和通信初始化等正常长耗时阶段,避免检测窗口过短。

准备 checkpoint

训练进度能否恢复取决于训练程序是否正确保存和加载 checkpoint。配置自动容错前,完成以下准备: checkpoint 保存频率需要平衡存储开销和重跑成本。仅保存模型权重通常只适合初始化或微调,不一定能支持完整续训。

配置自动容错

创建训练任务时,在 高级选项 中配置自动容错。

1. 设置任务重试预算

开启 自动容错,设置 任务最大重启次数。该参数控制任务失败后自动重新提交的次数,与原地进程重启分别计数。 通过 API 配置时,任务重试预算为 0 表示不触发任务级重跑流程;负数不表示无限重试。

2. 按需配置 PyTorch 高级能力

PyTorchJob 可以继续配置 容错策略 和 任务挂起(Hang)检测。 页面当前说明在任务启动 30 分钟后开始 Hang 检测。以上数值用于说明当前配置方式,不代表不同集群和后续版本始终使用相同默认值。

接入退出 checkpoint 通知

退出 checkpoint 通知与自动容错相互独立。如果需要在任务退出前通知训练程序保存状态,需要完成程序接口接入,并在创建 PyTorchJob 时开启对应配置。
  1. 在训练程序中实现 /v1/preempt/notify,用于接收 checkpoint 保存通知。
  2. 实现 /v1/preempt/status,用于返回保存结果。
  3. 在 PyTorchJob 创建页开启 退出ckpt通知,并配置程序监听端口。页面当前默认端口为 9000,取值范围为 9000 到 9999。
  4. 使用测试任务验证通知接收、保存结果上报和恢复逻辑。
接入后,相应退出流程会等待保存完成、保存失败或等待时间耗尽。页面当前显示的最长等待时间为 600 秒;抢占、手动停止或删除可能因此延后完成,可结合训练程序的保存日志判断进度。
退出 checkpoint 通知不能替代周期性 checkpoint。节点断电、进程异常退出等场景可能无法完成退出前通知;正式长时间训练仍应定期将续训所需状态写入持久化 Volume。

查看并验证恢复结果

1. 查看容错记录

如果任务开启了自动容错,或任务状态出现容错相关子状态,可进入 容错详情 页签查看恢复过程。
  1. 单击任务名称,进入训练任务详情页。
  2. 打开 容错详情 页签。
  3. 查看重试链路、故障说明和重试任务状态。
容错详情 用于判断平台是否已触发自动恢复、是否达到重试上限,以及是否需要手动重提、Debug 重提或调整任务配置。 如果平台已重新提交关联任务,请按关联任务 ID 进入最新尝试,确认其是否已获得资源、是否加载 checkpoint,以及新的输出或 checkpoint 是否继续写入。 进入原训练任务详情页,在 容错详情 中查看原任务和各次重试任务的状态、故障说明、起止时间和处理结果。原任务的汇总状态可能与最新尝试不同,请根据关联任务 ID 定位当前正在运行或恢复的尝试。

2. 判断恢复动作

先确认平台执行了哪类恢复动作,再确定下一步。 如果 容错详情 中显示故障类型,可使用下表理解分类结果。故障类型来自日志和错误信息匹配,用于辅助解释恢复记录,不等同于确诊根因。 需要进一步定位原因时,请参见 排查训练任务问题;多机训练需要定位疑似故障节点时,可使用Bisect Diagnose。

3. 验证训练进度

平台重新拉起进程或提交任务,不等于业务训练进度已经恢复。进入最新一次尝试后,继续确认:
  • 任务已经获得资源,相关实例已就绪。
  • 日志显示训练程序加载了预期 checkpoint。
  • 恢复前后的训练步、loss 或业务指标能够连续推进。
  • 新的 checkpoint 和输出文件写入成功,没有产生异常重复输出或数据处理。
保留原任务 ID、最新尝试 ID、恢复动作、checkpoint 路径和关键日志,便于后续排查。

常见问题

先查看 容错详情,确认平台是否执行了原地重启、是否达到 任务最大重启次数,以及是否因人工停止或快速失败策略停止恢复。原地重启不会生成新的任务记录。
不一定。Hang 检测适用于 PyTorch GPU 任务,并依赖当前集群的检测和恢复组件。低 GPU 利用率不能单独判定 Hang;请结合训练步、日志、堆栈、监控和正常耗时阶段判断。
新尝试仍需要重新获得资源。请查看关联任务的 事件,核对资源配额、资源池可用量、节点规避策略和调度约束。容错动作规避疑似故障节点后,可用节点范围可能缩小。
检查恢复命令、checkpoint 挂载路径、文件完整性和读写权限。平台可以重新拉起任务,但训练程序需要主动加载 checkpoint 并从正确的训练步继续。
如果任务每次都在相同步骤发生 OOM、路径错误或依赖失败,应先修正 batch size、资源配置、数据路径、镜像或程序问题。增加重试次数通常无法解决确定性错误。
对照 容错详情 中的故障分类和训练阶段,检查 Hang 检测窗口是否覆盖模型加载、数据准备、评估等正常长耗时阶段。窗口设置过短可能增加误判风险。
任务级重新提交和原地进程重启分别计数,诊断过程还可能产生关联记录。请在 容错详情 中区分任务重跑、原地重启和诊断动作,不要仅按任务列表数量推算容错次数。

相关文档