Prhub

#2376 docs(developer): rewrite the developer guide against the code

原始 PR 作者 Zhichenzzz 合并时间 2026-08-12 05:50 文件变更 7 提交数 4 评论 5 代码增减 +608 / -289

执行摘要

按代码重写开发者文档并新增版本页

PR body 明确指出旧文档“actively mislead a new contributor”:它记录了项目并未使用的 black 行宽 100、已随 #2272 消失的 backends/experimental/fsdp_utils/ 目录,以及 arguments.py 中从未存在的 --debug-determinism--debug-weight-sync--debug-rollout-print-every 等 flag;同时缺少贡献者最需要的“如何让 CI 运行我的测试”和“依赖版本如何配合”两件事。重写目标就是让每一句陈述都能从代码、workflows 或 .claude 中找到依据。

值得精读,尤其适合两类读者:新贡献者应细读 contributor-guide 的 Running CI 与 code style 章节,按文档步骤验证测试注册;维护者应阅读 versions.md 的 bumping principle 与镜像标签规则,这是全仓库版本管理策略第一次被系统化写成文字。可以借鉴的做法:文档中每个结论都标注来源(代码文件、workflow、.claude),并将“如何验证”写进文档(如 run_suite.py --list-only、dev 标签时间戳),值得在后续文档维护中推广。

讨论亮点

Review 由 Shi-Dong 完成,共 5 条评论后 APPROVED(LGTM!),全部在最后提交中处理:

  • architecture.md:对“reached by name from a flag”的表述提出疑问“I'm not sure what 'reached by name from a flag' means.”,最终改为更直白的“a plugin is loaded only when a run names its import path in a flag”。
  • debug.md:认为 page description“过于详细”,建议“Probably just replace it with 'Useful tips for debugging'”,已采纳。
  • debug.md:在 --debug-rollout-only 行建议“Add FSDP alongside Megatron?”,已改为“The training backend (Megatron or FSDP) is never initialized”。
  • versions.md:两处大小写规范“miles -> Miles”,均已修改(标题与 three-trees 表格)。
  • 无未解决疑虑;PR body 中作者主动指出与 #2375 的 docs.json / developer 页冲突需合并时解决,以及 contributor-guide 与 docs/ci/contributor-guide.md 的 CI 内容重叠留作后续。

实现拆解

  1. 重写贡献指南 contributor-guide.md:从仓库树重新生成 Repository layout(移除 backends/experimental/,补充 dashboard、true_on_policy、miles_plugins/optimizers/);代码风格改为基于 .pre-commit-config.yaml 的 hook 说明,纠正 black 行宽为 119,并首次记录三条 pygrep 禁令(mpu.get_、裸 AutoConfig/AutoTokenizer、huggingface-cli)及替代 API;新增 .claude 目录说明与 doc-dev sentinel 表;大量补充 Running CI 章节,包括 tests/fast/ 自动注册、register__ci 的 AST 解析机制、run_suite.py --list-only 验证、各 run-ci-* label 含义,以及首次文档化的 PR-description CI tags(ci-image-tag、ci-sglang-pr、ci-megatron-pr)。

  2. 重写调试文档 debug.md:删除不存在的 debug flags 和信号短语,改为从代码中提取的真实调试面:--debug-rollout-only / --debug-train-only(互斥断言)、--save/load-debug-rollout-data--ci-inject-rollout-data-path(保留引擎并在丢弃前比对生成结果,min-match-ratio 默认 0.9)、--debug-skip-weight-update--debug-disable-optimizer--debug-exit-after-rollout--debug-deterministic-collective(det_nccl 固定树序归约);并逐一文档化 --ci-test 断言 harness 的每个 checker 及其阈值、逃生舱口和 --ci-save/load-grad-norm、--ci-save/check-model-hash 等参数。

  3. 新增 versions.md:说明 miles、sglang-miles 分支、miles-main 分支三棵可编辑安装源码树;列出 docker/Dockerfile build-args 默认值(SGLANG_IMAGE_TAG v0.5.16、SGLANG_COMMIT 空等)、build.py 变体表、requirements.txt 内联 pin 约定、TE 2.17.0 三元组断言与 cu13 补丁;整理发布镜像与标签规则、dev 标签的 24h check-upstream 自动构建机制;总结 bumping principle:只改 pin 所在处一次、优先移动分支、镜像相关 bump 必须在对应 PR 内验证(pr- 镜像高于 ci-image-tag)、ref bump 用 PR 描述指令验证,并给出 cuDNN 降级(CUDNN_STATUS_BAD_PARAM)、TE 补丁失效等失败模式表。

  4. 修正 architecture.md 与 index.md,删除 migration.md,更新 docs.json 导航:包树重新生成(backends/experimental/ 移除、fsdp_utils/ 与 megatron_utils/ 并列、miles_plugins/ 四子目录、测试树新增 manual/ 与 snapshots/);“Where common changes go”增加 FSDP 行,weight sync 指向 megatron_utils/update_weight/ 或 fsdp_utils/update_weight_utils.py;删除记录 sync→async 旧迁移的 migration.md(同步从导航和卡片移除);docs.json 将 migration 页替换为 versions 页。

  5. 配套调整:仅涉及文档导航配置(docs.json 2+/2-)与索引卡片文案,无源码、测试或部署改动;PR body 明确说明未给 /developer/migration 加 redirect,留待 #2375 的 redirects 块落地后补。

文件 模块 状态 重要度
docs/developer/contributor-guide.md 贡献指南 modified 4.94
docs/developer/debug.md 调试指南 modified 4.66
docs/developer/versions.md 版本说明 added 5.15
docs/developer/migration.md 迁移指南 removed 4.94
docs/developer/architecture.md 架构说明 modified 3.09
docs/docs.json 文档导航 modified 3.13
docs/developer/index.md 文档索引 modified 2.92

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

评论区精华

miles_plugins 加载方式表述不清 documentation

Shi-Dong 在 architecture.md 评论“I'm not sure what 'reached by name from a flag' means.”,要求解释 miles_plugins 如何被加载。

结论:最终提交改为直白表述:“a plugin is loaded only when a run names its import path in a flag (--spec, or one of the --custom-*-path flags)”。 · 已解决

debug 页 description 过于详细 style

Shi-Dong 评论“I think this description is overly detailed. Probably just replace it with 'Useful tips for debugging'.”

结论:已采纳,page description 缩短为“Useful tips for debugging.”。 · 已解决

debug-rollout-only 描述补充 FSDP documentation

Shi-Dong 在 --debug-rollout-only 行评论“Add FSDP alongside Megatron?”,指出该 flag 对 FSDP 后端同样生效。

结论:已修改为“The training backend (Megatron or FSDP) is never initialized.”。 · 已解决

versions.md 标题大小写(miles → Miles) style

Shi-Dong 评论“Miles, SGLang, and Megatron-LM”,要求标题中 miles 大写。

结论:已修改为“Miles, SGLang, and Megatron-LM”。 · 已解决

versions.md 正文大小写(miles → Miles) style

Shi-Dong 评论“miles -> Miles”,针对 three-trees 表格中第一行树名。

结论:已修改为“Miles”。 · 已解决

风险与影响

纯文档变更,无代码回归风险,但存在以下具体风险:

  • 版本信息漂移:versions.md 记录了 Dockerfile build-args 当前默认值(如 SGLANG_IMAGE_TAG v0.5.16、WHEELS_TAG cu130-x86_64 等)和 dev 标签更新节奏,这些内容会随构建配置变化而过时,需要后续维护者同步更新。
  • 删除页面无重定向:migration.md 被直接删除且未设置 redirect,若外部或历史链接指向 /developer/migration 将 404;PR body 说明等 #2375 落地后补,存在窗口期。
  • 与 #2375 合并冲突:两个 PR 都改动 docs.json 和 docs/developer/index.md,且 #2375 还触及 architecture.md,后合入方需要解决冲突,否则可能破坏导航 JSON。
  • CI 约定变更:contributor-guide 首次固化了 run-ci-* label、PR-description tags、注册机制等行为描述,若 CI 工作流后续调整而文档未同步,会再次造成误导。

影响范围集中在开发者体验与文档站结构:新贡献者 onboarding 路径(仓库布局、风格、.claude、CI 触发)从错误信息修正为可执行指南;调试文档从虚假 flag 变为真实可用的调试面,有助于快速定位 rollout/training 问题;新增 versions.md 让涉及依赖升级、镜像构建的维护者有单一依据来源。对团队而言,文档导航减少了一个页面(migration)、新增一个页面(versions),Developer Guide 卡片顺序调整;对 CI 使用有直接帮助(PR 标签、注册验证)。影响程度中等偏上,因为它是新贡献者的第一手资料,但无运行时影响。

文档与代码漂移风险 删除页面无重定向 与 #2375 合并冲突

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论