Prhub

#35611 [AMD] Enable moe_a2a_backend=mori for DeepSeek-V4 prefill context parallelism

原始 PR 作者 AMD-yanfeiwang 合并时间 2026-08-27 17:31 文件变更 2 提交数 4 评论 0 代码增减 +10 / -7

执行摘要

为 DeepSeek-V4 CP 启用 Mori A2A 后端

DeepSeek-V4 的预填充上下文并行此前会拒绝 moe_a2a_backend=mori,尽管 Mori 与 DeepEP 使用相同的 rank-local EP 分发/合并路径。PR 描述中明确说明,这两个 CP 门控排除 mori 的原因是“未经测试”而非“不兼容”。该变更旨在让用户能够在 CP 场景下使用 Mori,从而充分利用其性能优势。

该 PR 值得精读,因为它展示了一个最小化、聚焦的后端启用模式。值得关注的设计决策包括:将门控放宽在 hook 和模型侧两处同步修改,以及在不改动核心逻辑的前提下信任 Mori 与 DeepEP 路径的一致性。若后续要扩展其他后端,可参考此模式。

讨论亮点

Review 评论为空,但 PR 作者在 body 中详细说明了安全性论证。审查者 1am9trash 批准了 PR,并评价“Only release gate to make mori runnable with pcp.”,确认这是一次最小化的门控放开。

实现拆解

实现拆解

  1. 扩展 CP 校验白名单:在 python/sglang/srt/arg_groups/deepseek_v4_hook.pyvalidate_deepseek_v4_cp 中,将 mori 添加到 supported_a2a_backends 元组中,并更新错误消息以反映新的支持集合。

  2. 放宽模型侧后端门控:在 python/sglang/srt/models/deepseek_v4.py_run_moe_ffn_dp_sync 中,将 mori 加入 is_deepep() or is_megamoe() 的断言,使 CP 分支允许 mori 后端。

  3. 保留原有操作语义:不修改调度器、集合通信或计算内核。Mori 路径仍走 forward_deepep 的 combine 逻辑,不执行 a2a=none 时的 CP gather/reduce-scatter,因此复制的共享专家只添加一次。

  4. 配置与测试配套:无直接测试文件变更;通过 8xMI355X 环境的手工验证(40/40 稳定首 token 匹配,4K–16K 长度匹配)来保障正确性。

文件 模块 状态 重要度
python/sglang/srt/models/deepseek_v4.py 模型运行 modified 5.81
python/sglang/srt/arg_groups/deepseek_v4_hook.py 参数校验 modified 5.75

关键符号

_run_moe_ffn_dp_sync validate_deepseek_v4_cp

关键源码片段

python/sglang/srt/models/deepseek_v4.py data-contract

模型侧核心路径,修改 CP 分支的 A2A 后端断言,允许 mori,是使 CP 与 Mori 兼容的关键。

# python/sglang/srt/models/deepseek_v4.py 中的 CP 分支
if _use_cp:
    moe_a2a_backend = get_moe_a2a_backend()
    if moe_a2a_backend.is_none():
        hidden_states = dsa_cp_gather_hidden_states(hidden_states)
    else:
        # 允许 deepep、megamoe 和 mori 作为 CP 的 A2A 后端
        assert (
            moe_a2a_backend.is_deepep()
            or moe_a2a_backend.is_megamoe()
            or moe_a2a_backend.is_mori()
        ), (
            "CP requires moe_a2a_backend in ('deepep', 'megamoe', 'mori'), "
            f"got {moe_a2a_backend.value!r}."
        )

评论区精华

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

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

风险与影响

技术风险

  • 代码路径风险:CP + Mori 组合此前未在代码中启用,虽然 Mori 与 DeepEP 路径相似,但在极端 token 分布下可能存在未预期的数值差异。
  • 共享专家计数风险:PR 声明 Mori 不受 #35535 影响,因为其走 forward_deepep combine 后只添加一次共享专家;但若未来对 a2a=none 路径的修复发生回归,需警惕。
  • 性能风险:Mori 动态容量限制及 CP-v1 的 one-token-per-rank GPU 错误是已知外部问题,可能影响性能或稳定性。
  • 测试覆盖缺失:未添加自动化测试,依赖手工验证,存在回归风险。

影响范围:影响所有使用 DeepSeek-V4 预填充 CP 且希望使用 Mori 后端的用户。本变更未改变默认行为(默认仍是 none),因此对现有用户影响较小,但对 AMD 平台用户提供了新选择。对团队而言,需要维护新增的门控逻辑,并关注未来 CP+Mori 组合的稳定性。

核心路径变更 缺少测试覆盖

关联 Issue

#35535 Fix replicated (TP1) shared expert being summed by collectives that skip the MoE all-reduce

完整报告

参与讨论