Prhub

#2375 docs: reorganize the Training Backends section, drop the experimental FSDP framing

原始 PR 作者 Zhichenzzz 合并时间 2026-08-12 10:49 文件变更 15 提交数 14 评论 0 代码增减 +525 / -465

执行摘要

重组训练后端文档,FSDP 升为一等后端

PR body 指出,FSDP 文档把后端描述成实验性项目:它位于 developer/experimental-features,写着“no TP/PP/CP/EP, small dense models only”,并指向已不存在的代码路径 miles/backends/experimental/fsdp_utils/——而 #2272 早已把 backend 移出 experimental/,该描述不再成立。同时 advanced/architecture-support(“Backends Beyond Megatron”)实际讲的是把 HF 实现嵌入 Megatron 内部的机制,页面名与内容不符。本次变更将整个 Training Backends section 重写为围绕真实存在的两个后端,并删除误导页面。

值得精读。对使用者,training-backend.md 是选型和配置 Megatron/FSDP 的权威入口,尤其 FSDP 一节此前从未按代码事实完整写过;对维护者,建议把该页纳入涉及 FSDP 参数、并行或 checkpoint 的 PR 的改动清单。更值得借鉴的是本 PR 的工作方式:以代码为唯一事实源撰写文档,并在写作过程中反哺修复了 4 个真实缺陷。注意页面按修复后的状态编写,阅读时需结合 #2384/#2386 的变更理解 flag 现状。

讨论亮点

本 PR 没有公开 review 评论,唯一 review 来自 Shi-Dong 的 APPROVED(无文字)。技术讨论沉淀在 commit 信息中:

  • 提交 5863d07(follow #2384)解释为何删除 --fsdp-state-dict-cpu-offload 行:字段声明在 FSDPArgs 上但全树无读者,紧挨着真实生效的 --fsdp-cpu-offload 排列会“invites setting the wrong flag”。
  • merge commit f6a0c93(与 #2376 冲突):developer/architecture.md 目录树整体取 main 的版本,因为 #2376 已把 fsdp_utils 移出 experimental/ 并给出更好的分目录描述;本分支只保留“Experimental Features 卡片替换为 Training Backends 卡片”的改动。
  • merge commit 1b95dd9(redirect 冲突):与 #2391 在 redirects 数组同位置冲突时“Left as authored rather than normalizing one side to the other”,保留 #2391 的 permanent: true 与本分支三条不带 permanent 的条目,并人工验证 80 个 nav 条目和所有 redirect 目标无死链。

实现拆解

  1. 信息架构调整:将 user-guide/usage.md(仅 Megatron)重写并重命名为 user-guide/training-backend.md(双后端),删除 developer/experimental-features.md 和 advanced/architecture-support.md;docs/docs.json 更新用户指南导航顺序、移除 Advanced/Backends 分组和 experimental-features 条目,并新增 3 条 redirect(/user-guide/usage、/advanced/architecture-support、/developer/experimental-features),其中 architecture-support 与 experimental-features 的 redirect 带锚点指向新页对应小节。

  2. 新页面内容结构:按读者自上而下的决策路径组织——先讲“后端是什么”(TrainRayActor 子类 + init/train/update_weights/save_model/sleep/wake_up 契约方法,由 --train-backend 在 miles/ray/train/actor_factory.py 中选择),再给“选哪个”(Megatron-LM 用于大模型与真实并行,FSDP 用于原样训练 HF 实现),随后分别按“六步决策”展开 Megatron 与 FSDP 的配置,最后保留 SGLang 推理半边。新增两节:GPU layout(disaggregated 与 --colocate 两种布局,以及布局如何决定 weight-sync 路径)和 Fitting it in memory(拆分为 layout-agnostic 旋钮与 colocate 专属 offload 族)。

  3. 按代码事实逐条纠错:对照 fsdp_utils/parallel.py 修正并行维度描述(dp_replicate × dp_shard,TP/PP/CP/EP/ETP 在 FSDP ParallelState 中固定为 1);明确 MoE 受支持(fsdp_utils/kernels/ 的 fused expert kernels、weight sync 时 batched-expert unfusing、--use-rollout-routing-replay);检查点改为 PyTorch DCP 目录 + latest_checkpointed_iteration.txt;说明 fp32 master copy(--no-keep-fp32-master)是 weight sync 位精确的原因;--attn-implementation 是透传字符串,flash_attention_3 也可用,并同步修正 cli-reference.md 中错误的枚举描述。

  4. 联动修复 4 个代码缺陷:写文档时发现的 bug 在 main 上各自独立修复——#2384(build_fsdp_parser 的 store_true 静默翻转 FSDPArgs 布尔默认值,改用 BooleanOptionalAction 并把 --disable-fp32-master 更名为 --no-keep-fp32-master)、#2386(删除从未可达的 FSDP 上下文并行分支)、#2382(删除重复的 _validate_rematerialize_param_from_master_weight 调用)、#2390(修正 --offload-train/--offload-rollout 的 help 文本)。提交 5863d07 跟进 #2384 更新 precision/memory 表,并删除无读者的 --fsdp-state-dict-cpu-offload 行。

  5. 全站同步与合并冲突处理:docs/index.md、developer/index.md、developer/debug.md、getting-started/installation.md、getting-started/quick-start.md、user-guide/argument-groups.md、user-guide/cli-reference.md、user-guide/concepts.md、user-guide/index.md、user-guide/training-script-walkthrough.md 等 10 余处链接统一指向 /user-guide/training-backend。多次 merge main 处理与 #2366、#2359、#2376、#2391、#2395、#2354 的冲突;无测试配套,合并时由作者人工核查全部 80 个 nav 条目、redirect 目标与站内死链。

文件 模块 状态 重要度
docs/user-guide/training-backend.md 用户指南 added 5.6
docs/user-guide/usage.md 用户指南 removed 4.56
docs/advanced/architecture-support.md 高级主题 removed 5.98
docs/developer/experimental-features.md 开发指南 removed 4.22
docs/docs.json 文档配置 modified 4.18
docs/index.md 站点首页 modified 2.02
docs/user-guide/cli-reference.md 用户指南 modified 2.12

关键符号

TrainRayActor MegatronTrainRayActor FSDPTrainRayActor init train update_weights save_model sleep wake_up get_miles_extra_args_provider

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  1. 文档与代码强耦合:新页面的 FSDP 叙述逐条对齐 fsdp_utils/parallel.py、FSDPArgs、actor_factory.py,代码演进后页面会再次过时;后续任何改动 FSDP 参数解析或并行结构的 PR 都应同步该页,否则会重新出现本次修复的脱节。
  2. 三条新 redirect(/user-guide/usage、/advanced/architecture-support、/developer/experimental-features)均未带 permanent: true,而既有条目都带;若站点按 301/302 区分处理,旧 URL 的 SEO 权重迁移与缓存行为会不一致。
  3. 删除 architecture-support.md 后,Qwen3-Next/Gated-Delta-Net 的 HF 桥接、mbridge 权重转换、fp32 参数保持等深度内容只剩新页一段短指针;在模型支持文档专项 pass 落地前,新架构接入者会缺少参考资料。
  4. 无自动化校验:合并时仅靠人工检查 nav 条目与 redirect 目标,后续其他 PR 改名页面时仍可能引入死链。

用户侧:FSDP 用户首次在正式文档中获得与 Megatron 并列的选型矩阵,“实验特性”的警告框架被移除;收藏旧 URL 的用户通过 redirect 到达新页(architecture-support 带锚点跳转)。团队侧:该页成为两后端契约的文档基线,任何后端接口改动都有了核对清单;同时本 PR 触发的 4 个修复改变了 FSDP 参数解析行为——#2384 将 --disable-fp32-master 更名为 --no-keep-fp32-master(breaking,但仅影响两个测试),#2386 删除了从未生效的 CP 分支,属于用户不可见的清理。系统侧:纯文档变更,不触碰源码、测试与部署产物。

旧 URL 依赖重定向 文档与代码强耦合 新增 redirect 未标 permanent 技术内容过渡期精简

关联 Issue

#2382 fix: drop duplicated rematerialize validation call
#2384 fix(fsdp): stop store_true from shadowing bool defaults in FSDPArgs
#2386 fix: drop context parallelism from the FSDP backend
#2390 docs(args): correct the offload flags' help text

完整报告

参与讨论