Prhub

#1733 [AMD] Drop inert DSv4 rollout knobs and add an MTP recipe

原始 PR 作者 XinyuJiangCMU 合并时间 2026-07-30 04:14 文件变更 1 提交数 8 评论 0 代码增减 +13 / -24

执行摘要

清理 AMD 脚本失效参数并新增 MTP 推测解码

PR body 指出:DeepseekV4ForCausalLM 在 HIP 上运行时,ServerArgs 会立即覆盖脚本设置的环境变量,因此脚本写入大量变量实际是无效的。需要删掉这些 inert knobs,同时利用 checkpoint 已有的 MTP block 开启推测解码,以提升 rollout 性能。

值得精读,尤其是它对“失效配置”的识别方法和通过提交历史逐步收敛变更的过程,对于维护长生命周期启动脚本很有参考价值。MTP recipe 的配置方式也可迁移到其他 AMD 模型脚本。

讨论亮点

本 PR 无实质 review 评论。guapisolo 直接批准(LGTM),gemini-code-assist 机器人自动审查未提出意见。提交历史中多次与 main 合并并调整,未发现公开讨论中的设计争议。

实现拆解

实现拆解

  1. 新增 --enable-mtp 配置开关:在 scripts/amd/run_deepseek_v4.pyScriptArgs dataclass 中添加 enable_mtp: bool = False 字段,默认关闭,不影响现有行为。
  2. 删除无效配置:从 sglang_args 中移除 --sglang-dsa-topk-backend torch--sglang-disable-custom-all-reduce--use-miles-router 三个 CLI 参数;从 extra_env_vars 中删除 13 个冗余环境变量,包括 SGLANG_DSA_TOPK_BROADCASTSGLANG_OPT_USE_TOPK_V2SGLANG_OPT_USE_MULTI_STREAM_OVERLAP 等,仅保留仍有效的 SGLANG_OPT_USE_TILELANG_INDEXERSGLANG_OPT_USE_COMPRESSOR_V2SGLANG_OPT_USE_FUSED_COMPRESS 等。
  3. 新增 MTP 推测解码配置:当 enable_mtp=True 时,向 sglang_args 追加 --sglang-speculative-algorithm EAGLE 等参数,配置 3 步推测、top-k 1、4 个 draft token;同时设置环境变量 SGLANG_USE_AITER_AG=false,在 gfx950 上强制使用 RCCL all-gather,避免 aiter 在推测解码场景下的死锁。
  4. 演进过程:从提交历史看,最初还引入了 SGLANG_MEMORY_SAVER_CUDA_GRAPH 和调整内存分数,但后续提交发现 miles 已默认设置该变量,因此移除;最终只保留与 MTP 和参数清理相关的变更。

未涉及测试文件,但作者在真实集群上完成验证(3 个训练步骤无引擎重启,accepted length 2.75–2.79)。

文件 模块 状态 重要度
scripts/amd/run_deepseek_v4.py 部署脚本 modified 6.34

关键符号

_train ScriptArgs

关键源码片段

scripts/amd/run_deepseek_v4.py core-logic

唯一的改动文件,负责 DeepSeek-V4 在 AMD 上的训练启动配置。PR 的核心变更均在此文件:清理无效 rollout 参数、新增 MTP 推测解码配置开关。

# scripts/amd/run_deepseek_v4.py —— MTP 配置与清理后的关键片段
@dataclass
class ScriptArgs(U.ExecuteTrainConfig):
    ...
    # 新增开关:启用后使用 checkpoint 自带的 MTP block 作为 EAGLE draft
    enable_mtp: bool = Falsedef _train(args: ScriptArgs):
    ...
    # sglang 基础参数,已移除 --sglang-dsa-topk-backend 和 --sglang-disable-custom-all-reduce
    sglang_args = (
        f"--rollout-num-gpus-per-engine {sglang_world_size} "
        f"--sglang-tp-size {sglang_tp_size} "
        f"--sglang-dp-size {sglang_dp_size} "
        f"--sglang-ep-size {sglang_ep_size} "
        "--router-health-success-threshold 1 "
        "--router-health-check-interval-secs 15 "
        "--router-health-failure-threshold 40 " # TODO improve
    )
    # 环境变量精简为真正生效的项
    extra_env_vars = {
        "SGLANG_SKIP_CHECKPOINT_LOAD_CHECK": "1",
        "SGLANG_DSV4_FP4_EXPERTS": "0",
        "SGLANG_HACK_FLASHMLA_BACKEND": "triton",
        "SGLANG_OPT_USE_TILELANG_INDEXER": "true",
        "SGLANG_OPT_USE_COMPRESSOR_V2": "false",
        "SGLANG_OPT_USE_FUSED_COMPRESS": "true",
        "SGLANG_HEALTH_CHECK_TIMEOUT": "120",
        "AITER_BF16_FP8_MOE_BOUND": "0",
    }
    ...
    if args.enable_mtp:
        sglang_args += (
            "--sglang-speculative-algorithm EAGLE "
            "--sglang-speculative-num-steps 3 "
            "--sglang-speculative-eagle-topk 1 "
            "--sglang-speculative-num-draft-tokens 4 "
        )
        # gfx950: aiter all-gather 在推测解码下可能死锁,回退 RCCL
        extra_env_vars |= {"SGLANG_USE_AITER_AG": "false"}

评论区精华

Review 结论 other

gemini-code-assist 机器人自动审查无意见,维护者 guapisolo 直接批准(LGTM),无人工评论。

结论:无争议,PR 合入。 · 已解决

风险与影响

风险点包括:

  • 删除的配置项被官方声明为 inert,但若某些集群上 ServerArgs 覆盖逻辑不同,可能导致行为变化,需依赖实测验证。
  • 启用 MTP 会引入 EAGLE 推测解码,增加显存占用和调度复杂度,且在 gfx950 上强制回退 RCCL all-gather,可能带来通信性能下降。
  • 脚本仅针对 AMD 平台,影响面局限于该启动路径。
  • 缺少自动化测试覆盖,回归依赖人工验证。

影响范围限定在 scripts/amd/run_deepseek_v4.py,面向 AMD MI series 上的 DeepSeek-V4 训练/推理任务。对现有用户而言,默认行为不变(enable_mtp 默认关闭);启用 MTP 后,rollout 吞吐有望提升,但需关注稳定性。对团队而言,脚本配置更精简,减少了误导性参数。

缺少测试覆盖 AMD 专属配置变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论