Prhub

#48849 Fix: Restore data_parallel_size > 1 for use_sequence_parallel_moe

原始 PR 作者 passtoor-agi 合并时间 2026-07-17 22:27 文件变更 1 提交数 1 评论 2 代码增减 +1 / -0

执行摘要

修复 MoE 模型 SP 开启导致的内存回归

PR #48036 为修复 DSv3.2 + MTP + SP 场景下的精度问题,移除了 data_parallel_size > 1 条件,导致 SP MoE 在 DP=1 时仍被启用。但实际上 SP MoE 的设计目的是避免跨 DP rank 的 token 复制,在 DP=1 时无此必要,反而分配额外缓冲区(约 5.6 GiB)。实际 MTP 精度修复已在 deepseek_mtp.py_restore_full_token_layout_if_needed 中完成。本 PR 恢复条件以解决内存回归,影响所有 MoE 模型(Nemotron、Llama 4、Qwen3 MoE、DeepSeek V2/V3 等)。

该 PR 为重要 bugfix,建议合并。变更简单、分析充分、有明确测试结果支撑。

讨论亮点

reviewer yewentao256 请求作者在 main 分支和当前分支上提供最小复现命令及内存日志对比,作者已提供日志(bad: 85.33 GiB, good: 79.71 GiB)。

实现拆解

vllm/config/parallel.pyuse_sequence_parallel_moe 属性条件末尾添加 and self.data_parallel_size > 1,其他逻辑不变。

文件 模块 状态 重要度
vllm/config/parallel.py 配置层 modified 5.31

关键符号

use_sequence_parallel_moe

关键源码片段

vllm/config/parallel.py core-logic

核心逻辑修复:在 `use_sequence_parallel_moe` 属性中添加 `data_parallel_size > 1` 条件,恢复原有设计意图。

# vllm/config/parallel.py
​
    @property
    def use_sequence_parallel_moe(self) -> bool:
        # SP MoE 只在数据并行 size > 1 时启用。
        # 当 DP=1 时,不存在跨 DP rank 的 token 复制,
        # 开启 SP 只会带来约 5.6 GiB 的额外缓冲区开销。
        return (
            self.all2all_backend
            in (
                "allgather_reducescatter",
                "deepep_high_throughput",
                "deepep_low_latency",
                "mori_high_throughput",
                "mori_low_latency",
                "nixl_ep",
            )
            and self.enable_expert_parallel
            and self.tensor_parallel_size > 1
            and self.data_parallel_size > 1 # 此行恢复,修复内存回归
        )

评论区精华

请求提供最小复现命令及日志 question

yewentao256 请求作者给出最小复现命令,并在 main 和当前分支运行后附上完整日志。

结论:作者提供了 main(bad: 85.33 GiB)和修复后(good: 79.71 GiB)的日志,确认修复有效。 · 已解决

风险与影响

风险极低:仅还原一行条件,恢复原有设计。需确认 DP>1 场景下 SP MoE 行为不受影响(逻辑与 PR #48036 前一致)。

影响面:所有在纯 TP(DP=1)配置下运行 MoE 模型的用户,内存回归被修复,约 5.6 GiB 内存回收。

核心路径变更 修复近期回归

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论