# PR #45828 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Bugfix] Reject pipeline parallelism for DiffusionGemma
- 合并时间：2026-07-27 22:37
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/45828

---

# 执行摘要

- 一句话：移除 DiffusionGemma 的 SupportsPP 接口，启动时拒绝 PP
- 推荐动作：值得参考：展示了通过移除接口声明来避免运行时错误的设计模式，比运行时检查更简洁。

# 功能与动机

DiffusionGemma 的 canvas state 仅由最后一个 PP rank 的 sampler 推进，但每个 rank 都需要读取它。通用 PP 路径只广播 token ids，导致 warmup 崩溃。PR 旨在启动时失败 (fail closed) 而非运行时崩溃。Reviewer njhill 建议直接移除 SupportsPP 接口以更干净地实现早期拒绝。引自 PR body 和评论。

# 实现拆解

1. 在 vllm/model_executor/models/diffusion_gemma.py 中，从 from .interfaces import ( ... ) 中去掉 SupportsPP 符号。
2. 从 DiffusionGemmaForConditionalGeneration 的基类列表中移除 SupportsPP，同时删除 __init__中使其 PP 相关属性 self.make_empty_intermediate_tensors 的赋值。
3. 这些改动确保模型不再声明支持 PP，配置引擎时 PP>1 会被拒绝。未添加新测试；可手动通过 PP=2 启动验证。

关键文件：
- `vllm/model_executor/models/diffusion_gemma.py`（模块 模型层；类别 source；类型 data-contract；符号 SupportsPP, make_empty_intermediate_tensors）: 唯一修改的文件；移除 SupportsPP 接口及相关中间张量代码，是 PR 的核心变更。

关键符号：DiffusionGemmaForConditionalGeneration

## 关键源码片段

### `vllm/model_executor/models/diffusion_gemma.py`

唯一修改的文件；移除 SupportsPP 接口及相关中间张量代码，是 PR 的核心变更。

```python
from .interfaces import (
    SupportsMultiModal,
    SupportsQuant,
    # SupportsPP 已移除，因为 DiffusionGemma 不支持 pipeline parallelism
)


class DiffusionGemmaForConditionalGeneration(
    nn.Module,
    SupportsMultiModal,
    SupportsQuant,
    # 不继承 SupportsPP：在启动时拒绝 PP，而非在 warmup 崩溃
):
    # ... 类主体 ...

    def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
        # ... 其他初始化代码 ...
        # 原此处有 self.make_empty_intermediate_tensors = self.model.make_empty_intermediate_tensors
        # 但 PP 已被移除，故删除这行，避免错误赋值。

```

# 评论区精华

reviewer njhill 提出直接移除 SupportsPP 接口的更优方案，作者采纳并更新实现。无争议。

- 直接移除 SupportsPP 接口而非运行时检查 (design): 作者移除了接口，实现了更干净的早期失败。

# 风险与影响

- 风险：极低风险。仅删除未使用的接口和属性，不影响 PP=1 的正常推理；PP>1 将得到明确的 ValueError，避免内部调试困难的崩溃。
- 影响：仅影响 DiffusionGemma 模型用户：设置 pipeline parallelism 大于 1 将无法启动；PP=1 用户无行为变化。该限制是正确性必需的。
- 风险标记：缺少测试覆盖

# 关联脉络

- 暂无明显关联 PR