Prhub

#2354 Delete the glm4-9B, mimo-7B, moonlight-16B and deepseek-r1 launch scripts

原始 PR 作者 yueming-yuan 合并时间 2026-08-12 09:22 文件变更 41 提交数 7 评论 2 代码增减 +269 / -3673

执行摘要

删除四个废弃模型启动脚本及配套快照与文档

PR body 明确指出这些模型已被弃用("These four models are being dropped"),因此需要移除对应的 launcher、快照和文档。同时确保不误删仍被引用的模型定义(如 mimo-7B-rl.pymoonlight.pydeepseek-v3.py),并通过 pytest tests/manual/launch_scripts tests/fast/launch_scripts 的 524 个测试证明无残留引用。

值得精读。本 PR 展示了如何在删除旧功能时进行精确的引用分析(区分"真实引用"与"已禁用引用"),以及如何处理文档与代码的联动清理。关键设计决策包括:

  • 通过 disabled 机制判断测试是否真实执行,从而安全删除看似被引用的模型定义;
  • 保留仍被基础设施示例(p2p、low-precision)引用的模型定义,避免过度删除;
  • 重写存活模型文档而非简单删除,保证文档与实际 launcher 对齐。
    对维护大型脚本库的团队有很强的参考价值。
讨论亮点

review 中只有两条评论,集中在 docs/models/deepseek/deepseek.md

  • guapisolo 提出 [P1] 问题:文档化命令在干净主机上会失败,因为 train() 先调用 _prepare_megatron_ckpt()_prepare_cp(),两者最终调用 exec_command_multi_node(),其第一步是 ray.init(address="auto"),需要已存在的 Ray head;而 execute_train() 默认会停止该集群(除非设置 MILES_SCRIPT_EXTERNAL_RAY=1)。建议要么在预处理前建立并保留 Ray,要么文档化外部 Ray 工作流。
  • yueming-yuan 回复 "solved in next PR",即该问题在后续 PR #2355/#2356 中解决,状态为已接受续修。

整体 review 由 guapisolo APPROVED(LGTM),无未解决的争议。

实现拆解

实现按以下步骤推进:

  1. 删除废弃模型启动脚本与快照:删除 scripts/run-glm4-9B.shrun-glm4-9B-4xgpu-radixtree.shrun-mimo-7B-rl-eagle.shrun-moonlight-16B-A3B.shrun-deepseek-r1.sh 及其对应的 tests/snapshots/launch_scripts/sh/scripts/*.txt 快照;同时删除 docs/models/glm/glm4.mddocs/models/mimo/mimo.mddocs/models/kimi/moonlight.md 三个文档页面和 examples/infra_features/low_precision/run-moonlight-16B-A3B-int4.sh

  2. 精确处理仍被引用的模型定义:第一个提交保留 scripts/models/mimo-7B-rl.py(被 tests/e2e/megatron/test_mimo_7B_mtp_only_grad.py 注册使用)、moonlight.py(被 low-precision 示例和 p2p profile 引用)、deepseek-v3.py(被 scripts/run_deepseek.py 和 V3.2 launchers 引用)。第二个提交确认 glm4-9B.py 的唯一引用 tests/e2e/megatron/test_quick_start_glm4_9B.py 注册了 disabled="Not worthy for testing, too naive."run_suite.py 只运行 disabled 为 None 的条目,因此该测试从未执行,故连同 p2p 中的 GLM-Z1-9B profile 一并删除。第三个提交确认 moonlight.py 的所有引用(low-precision 脚本和 p2p profile)都随本 PR 删除,因此一并移除。

  3. 重写 deepseek.md 并同步导航:DeepSeek-V3 仍受支持,页面重写为围绕 scripts/run_deepseek.py 的真实参数(TP/PP/CP/EP 阶梯、deepep low_latency sglang 块、--max-tokens-per-gpu 2048 占位符),删除 R1 专属内容,更新 docs/models/glm/index.mddocs/models/kimi/index.mddocs/models/index.mddocs/docs.json。同时将 docs/user-guide/training-script-walkthrough.md 从引用已删除的 run-glm4-9B.sh 改指仍存活的脚本。

  4. 修复快照漂移:提交 e5a9c267 重新生成了 run-qwen3-4B.sh 的快照,因为 #2300 添加了 --use-miles-dashboard--dump-details 参数但未刷新快照,而 tests/manual 未被 CI 发现,导致差异长期存在于 main 上。

  5. 合并与冲突解决:两次合并 origin/main 解决 docs/index.mddocs/models/deepseek/*docs/models/glm/index.md 等文档冲突;最后一个提交恢复 DeepSeek V3 页面(被 #2391 替换为 V3.2 配方但 V3 仍可训练),并移除 #2391 的 redirect 以避免遮蔽恢复的页面。

  6. 测试验证:运行 pytest tests/manual/launch_scripts tests/fast/launch_scripts 共 524 个测试全部通过,其中快照集合 == 脚本集合的 discovery 测试证明没有悬挂引用。

文件 模块 状态 重要度
scripts/models/glm4-9B.py 模型定义 removed 7.0
tests/e2e/megatron/test_quick_start_glm4_9B.py e2e 测试 removed 6.8
examples/infra_features/p2p_weight_transfer/run.py p2p 示例 modified 6.18
docs/models/deepseek/deepseek.md 模型文档 added 5.22
scripts/run_deepseek.py 启动脚本 modified 4.72
scripts/run-deepseek-r1.sh 启动脚本 removed 5.34
scripts/run-mimo-7B-rl-eagle.sh 启动脚本 removed 5.32
scripts/run-moonlight-16B-A3B.sh 启动脚本 removed 5.31
examples/infra_features/low_precision/run-moonlight-16B-A3B-int4.sh 低精度示例 removed 5.31
scripts/models/moonlight.py 模型定义 removed 7.64

关键符号

model_args prepare execute

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

评论区精华

DeepSeek V3 文档化命令的 Ray 生命周期问题 正确性

guapisolo 指出文档命令在干净主机上会失败:train() 先调用 _prepare_megatron_ckpt() 和 _prepare_cp(),二者通过 exec_command_multi_node() 执行 ray.init(address="auto"),需要已存在 Ray head;而 execute_train() 默认会停止该集群,除非设置 MILES_SCRIPT_EXTERNAL_RAY=1。

结论:作者回复 "solved in next PR",问题延期到后续 PR 修复。 · resolved-in-next-pr

风险与影响

主要风险在于删除引用链的完整性:

  • 如果存在未被发现的 glm4-9B / moonlight 模型类型引用,将导致运行时找不到模型定义。PR 通过快照 discovery 测试(524 个测试)证明脚本集合与快照集合一致,但 e2e 测试未运行,run_suite.pydisabled 过滤逻辑是本 PR 判断的核心依据,若该过滤逻辑变化可能导致误删。
  • examples/infra_features/p2p_weight_transfer/run.py 删除了 GLM-Z1-9B-0414 和 Moonlight-16B-A3B-Instruct 的 prepare/run 配置,若用户仍按旧文档使用该示例将报 KeyError;文档同步更新降低了该风险。
  • low_precision 示例删除后,INT4 覆盖中最便宜的 smoke test(Moonlight 4 GPU 单节点)丢失,剩余最小 INT4 示例需要 8 GPU,可能影响 CI 覆盖效率。
  • docs/models/deepseek/deepseek.md 重写后文档化命令存在 Ray 生命周期问题(guapisolo P1 指出),在下一个 PR 修复前,按文档执行可能失败。
  • run_deepseek.py 的注释变更(移除 --use-kl-loss 的 TODO 描述)是行为相关的文案调整,需确认无实际逻辑变化。

影响范围:

  • 对用户:删除 5 个 shell 启动脚本和 3 个模型文档页,用户如需训练 GLM4-9B、MiMo-7B、Moonlight-16B 或 DeepSeek-R1 将无官方入口;DeepSeek-V3 用户转向 scripts/run_deepseek.py(Python launcher)和重写后的 deepseek.md。
  • 对系统:examples/infra_features/p2p_weight_transfer/run.py 的模型注册表缩小,low_precision 示例的 INT4 覆盖减少一个廉价用例。
  • 对团队:这是三个串联清理 PR 的起点,减少维护面;快照重新生成修复了长期存在的文档-代码漂移,有助于后续自动发现此类问题。
删除引用链依赖 disabled 过滤逻辑 文档命令存在 Ray 生命周期问题 INT4 覆盖丢失廉价 smoke test 跨 PR 串联清理依赖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论