Prhub

#2651 docs: fix stale paths, flags, env vars and metric names

原始 PR 作者 yueming-yuan 合并时间 2026-08-18 23:44 文件变更 28 提交数 2 评论 7 代码增减 +273 / -183

执行摘要

全面校对 docs/ 与 main 的偏差,修复失效命令与过时指标名

PR body 开宗明义:"Audit of docs/ against main. This PR only fixes claims that are wrong — commands that fail as written, symbols that no longer exist, and values that disagree with the code." 背后动因是文档与代码长期漂移,用户按文档执行会直接报错(如 scripts/model_args.py 不存在、--sglang-enable-ep-moe 已从 pinned SGLang ServerArgs 移除),且 --update-weight-buffer-size 默认值 1 GB 与代码中的 512 * 1024**2 不符。作者刻意限定范围:只修"错误陈述",不补"覆盖缺口",后者以 follow-up 清单列出。

值得精读,尤其是三处:其一,argument-groups.md 的重写完整刻画了 Miles launcher 的真实结构(Python 脚本 + execute_train 拼接 + scripts/models/ 注入 model args),是理解整个 recipe 体系的入口;其二,train-infer-mismatch-helper 对"CLI flag vs YAML config key"的厘清,揭示了该功能真实的接入方式(--custom-config-path + --custom-tis-function-path);其三,PR 的"审计-交叉验证-刻意排除 coverage gaps"方法论本身可复用,且 review 中"grep 不到字面量不等于没有 emitter"的教训对任何文档型改动都有借鉴意义。建议关注 eval/skipped_* 删除争议是否会在后续 PR 中被回补。

讨论亮点
  1. eval/skipped_unhealthyeval/skipped_pin_violation 删除与否:nblintao 指出"These two do have emitters — eval_fleet.py raises EvalSkip("unhealthy") / EvalSkip("pin_violation") and metrics.py logs eval/skipped_{reason}",即字面量 grep 不到不代表没有 emitter;claude[bot] 也跟进确认 EvalFleet.pin()--eval-num-gpus > 0 的 Dedicated fleet 路径下确实会抛这两个 reason,建议保留两行并叠加通用行。最终 patch 仍以通用行 eval/skipped_<reason> 替代,该意见未被采纳。
  2. mis_ 前缀缺失:nblintao 指出 compute_mis_weights_with_cpcompute_mis_weights_fsdp 都以 result_metrics[f"mis_{key}"] 收尾,wandb 展示的实际 key 是 train/mis_tis_truncate_fraction 等,且 batch_norm_factor 在 PR 前就是正确的 mis_batch_norm_factor。该意见在第二个 commit 中落实。
  3. --train-deterministic 的默认值框架:claude[bot] 指出 run_deepseek_v4.pyScriptArgstrain_deterministic 默认 True,"Passing" 一词误导为 opt-in,实际 stock run 就会带 --deterministic-mode 与 3 个环境变量,需 --no-train-deterministic 关闭;V4-Pro 页同样问题。已修复。
  4. misc_args 交叉引用:claude[bot] 发现本 PR 新增 ## misc_args 章节后,launch-script.md 仍写"Two blocks have no Argument Groups section",已过时;第二个 commit 将 misc_args 加回 block 表并只保留 wandb 为例外。

实现拆解

以 "docs/ 审计 + 与源码交叉验证" 为方法,按四类问题推进:

  1. 修复会直接失败的命令docs/models/glm/glm4-5glm4-7-flash 的转换命令从已删除的 scripts/model_args.py 改为 miles/utils/external_utils/model_args_utils.py(其余 17 处已有正确路径);ci/02-docker-builddeveloper/versions--variant 取值改为 docker/build.pydocker-build.yml 中真实存在的 rocm700-mi30x / rocm700-mi35x / rocm720-mi35x,并补上此前两表都缺的 rocm700-mi35x
  2. 移除不存在的符号与 flag:删除 --use-rollout-correction(仓库中不存在,改为唯一的 CLI 开关 --use-tis)、MILES_HACK_TRAIN_TORCH_DETERMINISTICrun_deepseek_v4.py 实际设置的是 5 个 SGLANG_* 环境变量,另有 3 个仅在 --train-deterministic 下追加)、with_transformers_patch()(已被 launcher 内的 config.json 就地改写取代);4 个 --sglang-enable-* flag 替换为 recipe 实际传递的 --sglang-ep-size--sglang-moe-a2a-backend--sglang-moe-runner-backend--sglang-deepep-mode
  3. 重写核心概念页docs/user-guide/argument-groups.md 从 "Miles launch scripts are bash arrays" 彻底改为 Python launcher 模型——每个脚本构建 <group>_args 字符串并拼进 train_args 交给 execute_train;新增此前缺失的 misc_args 组(35 个 launcher 使用),并说明 model args 来自 scripts/models/<megatron_model_type>.pyexecute_train 拼接;<a id> 锚点保持不变以保证入链不失效,且同步更新 conceptstraining-backendlaunch-script 等 5 处的引用。
  4. 指标名与源码对齐docs/examples/infra-features/train-infer-mismatch-helper.md 及镜像 README 中,mis_* / mismatch_* 指标改为 mis.py 实际发出的名称,并说明内置 vanilla_tis_function 只输出 tistis_clipfractis_abs,其余指标需 --custom-tis-function-path 指向 compute_mis_weights_with_cp;同时修正 --rm-type 枚举(补 gemma_mathdeterministic_randomboxed_ 前缀修饰,并注明它是自由 str 而非 enum)和 CI 标签列表(补 4 个遗漏的 KNOWN_LABELS 条目)。
  5. 验证与配套pre-commit run --all-files 干净(含 examples→docs 镜像检查)、sync_example_docs.py --check 干净、重跑审计结果为 0 断链、0 缺失图片、0 不存在的仓库路径。第二个 commit 针对 review 补修了 misc_args 交叉引用、--train-deterministic 默认值(ScriptArgs 默认 True,需用 --no-train-deterministic 关闭)和 mis_ 前缀三处。
文件 模块 状态 重要度
docs/examples/infra-features/train-infer-mismatch-helper.md 示例文档 modified 4.51
docs/user-guide/argument-groups.md 参数组 modified 4.04
docs/user-guide/cli-reference.md CLI 参考 modified 2.78
docs/models/thinkingmachines/inkling.md 模型文档 modified 2.87
docs/user-guide/fully-async.md 用户指南 modified 2.22
docs/advanced/fault-tolerance.md 高级指南 modified 2.31

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

评论区精华

`eval/skipped_unhealthy` 与 `eval/skipped_pin_violation` 是否真的没有 emitter 正确性

nblintao:"These two do have emitters — `eval_fleet.py` raises `EvalSkip("unhealthy")` / `EvalSkip("pin_violation")` and `metrics.py` logs `eval/skipped_{reason}`";claude[bot] 补充 `EvalFleet.pin()` 在 `--eval-num-gpus > 0` 的 Dedicated fleet 路径下必然触发,且新通用行把来源归给用户 `CheckpointEvalFn` 也不准确。

结论:删除理由被证伪,但第二个 commit 未回补,最终 patch 仍以 `eval/skipped_<reason>` 通用行替代;意见未采纳。 · unresolved

`mis_` 前缀与 `train/` 命名空间 正确性

nblintao:`compute_mis_weights_with_cp` 与 `compute_mis_weights_fsdp` 都以 `result_metrics[f"mis_{key}"]` 收尾,wandb 实际 key 是 `train/mis_tis_truncate_fraction`、`train/mis_is_ratio_mean_final` 等;claude[bot] 还指出默认 `vanilla_tis_function` 只输出 `tis` / `tis_clipfrac` / `tis_abs`。

结论:第二个 commit 将 `mis_` 前缀与 `vanilla_tis_function` 的差异化说明写入文档,已解决。 · 已解决

`--train-deterministic` 的 opt-in 表述与真实默认值 正确性

claude[bot]:`run_deepseek_v4.py` 的 `ScriptArgs` 中 `train_deterministic` 默认 `True`,"Passing" 一词把默认开启的机制写成可选,stock run 就会收到 `NCCL_ALGO=Ring` 等 3 个环境变量与 `--deterministic-mode`,需 `--no-train-deterministic` 关闭;V4-Pro 页同样问题。

结论:第二个 commit 修正两页表述,改为说明默认开启并点名 `--no-train-deterministic`,已解决。 · 已解决

`misc_args` 章节新增后 `launch-script.md` 的交叉引用过时 documentation

claude[bot]:本 PR 为 `argument-groups.md` 新增 `## misc_args`,但未改动的 `launch-script.md` 仍写 "Two blocks have no Argument Groups section: misc_args...",该说法已为假。

结论:第二个 commit 在 block 表补 `misc_args` 行并只保留 wandb 为例外,已解决。 · 已解决

风险与影响

  1. 事实性风险(已标注)docs/user-guide/fully-async.md 中删除的 eval/skipped_unhealthy / eval/skipped_pin_violation 两行,经 nblintao 与 claude[bot] 共同确认在 miles/ray/rollout/eval_fleet.pyEvalFleet.pin() 路径下确有 emitter(--eval-num-gpus > 0 的 Dedicated fleet 模式),PR 的删除理由("have no emitter")并不成立,且新增的通用行将其归因于用户 CheckpointEvalFn 也不准确。该争议未在最终 commit 中处理,读者仍需依赖这两条 reason。
  2. 缺乏自动化校验:文档与代码的对应关系依赖人工审计,虽然 pre-commit 覆盖了 examples→docs 镜像与链接检查,但 flag 存在性、默认值、指标名没有机器可读的 schema 对照,未来仍会再次漂移。
  3. 范围受限:PR 故意不补 coverage gaps,cli-reference 声称列出全部 flag 但只覆盖 344 个中的 91 个,含 MLflow、TensorBoard、Prometheus 全部未入文档;customization 缺 6 个 hook、Ascend NPU 无任何页面。用户在短期内仍会遭遇"文档没写但 flag 存在"的困惑。

影响范围主要是文档读者(训练工程师与平台使用者):修复的命令可直接执行,flag 枚举与 arguments.py / mis.py / docker/build.py 对齐,减少按文档操作时的报错与误判。对团队而言,这是 v0.1 发布(#2564 已将版本置为 0.1.0)前的文档质量收口,与 #2657 发布公告、#2655 模型索引重构等构成发布前 docs 治理节奏。影响程度中等:纯文档改动、无运行时代码风险,但覆盖面广(28 个文件、跨 user-guide / models / advanced / developer / ci 五个文档分区),并顺带统一了 argument-groups 的命名口径(ckpt_args 等小写组名),后续文档编写需遵循新口径。

指标删除存疑 缺少自动化校验 覆盖缺口有意保留

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论