[Feat] Support immediate rollout recovery by export hf asynchronously#1966
[Feat] Support immediate rollout recovery by export hf asynchronously#1966YanhuiDua wants to merge 3 commits into
Conversation
|
@claude review |
|
Claude: ## Summary This PR adds an "immediate recovery" mode for rollout workers: instead of restarting crashed workers with empty weights and waiting for the next weight-sync, it exports an HF checkpoint asynchronously after each weight update and lets the health manager reload workers from that checkpoint immediately. The refactoring of IssuesCritical
Warning
Nit
VerdictREQUEST_CHANGES ProduceBatchResult impact: not directly affected — the recovery path rejoins the normal flow before batch accounting. RoutedExperts impact: not affected — no changes to routed-experts plumbing or object-ref ownership. |
|
@claude review |
背景
当 rollout backend 在两次权重同步之间发生故障时,原有流程会先将故障 worker group 标记为 inactive,等到下一次权重同步前再以
skip_load_weights=True的方式重启,并通过本轮update_weights()补齐模型权重。这意味着故障 worker 在下一次权重同步之前无法恢复服务。本 PR 新增一条可选的即时恢复路径:训练侧提前异步导出可用于恢复的 HF 模型;当
RolloutHealthManager检测到 rollout worker故障时,可以直接加载最近一次已经就绪的 HF 模型并恢复 worker group,不必等待下一次权重同步。核心改动
enable_immediate_recovery,默认关闭。TrainingController和TrainingWorker中新增异步 HF 导出接口:start_hf_export()is_hf_export_done()wait_hf_export()RolloutHealthManager中。RolloutWorker.reinit(),支持在重启时覆盖:model_pathtokenizer_pathskip_load_weights当前恢复流程
整体流程如下:
另外,在每次开始下一轮权重同步前,Trainer 都会检查上一次异步 HF 导出:
E2E 测试
新增的 backend crash 接口用于故障注入来跑测试,本e2e测试共运行三步,三步的global batch size分别为8,256,8,第二步需要测试恢复时间,所以将global_batch_size调大
XTUNER_TEST_IMMEDIATE_RECOVERY=1 python .dev_scripts/test_qwen35_vl_moe_async_hf_recovery_e2e.py运行该脚本的异步HF保存与恢复性能如下:
该配置下,恢复完需要110s左右,GPU显存增加相对于普通的 save hf 峰值再高 5.43G,增加的额外显存来自于 HF snapshot 阶段的 FSDP/EP all-gather、flatten output
TODO