# PR #35612 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[diffusion] fix: keep Cosmos3 T=1 fusion on Blackwell
- 合并时间：2026-08-20 12:13
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/35612

---

# 执行摘要

- 一句话：修复 Hopper 上 Cosmos3 T=1 融合回归。
- 推荐动作：值得精读，因为涉及架构相关性能路径的准入控制，展示了如何在多平台环境下进行特性开关的修复。关注点：平台判断的封装方式、未来是否会对更多架构进行类似控制。

# 功能与动机

Diffusion nightly 数据显示 `cosmos3_super_t2v_2gpu` 在 2xH100 上的耗时从 8 月 15 日的 115.326s 增加到 #34932 之后的 119.405s（+3.5%），并且一直维持在 119.338-119.372s。原因是 #34932 的 T=1 融合路径只在 1xB300 T2I 上做过基准测试，而 Hopper 上的性能反而下降。

# 实现拆解

实现分为以下步骤：
1. 新增平台判断：在 `cosmos3video.py` 中导入 `current_platform`，增加 `enable_t1_fused_qk_norm_rope` 变量，其值为 `T == 1 and current_platform.is_blackwell() and not self._gen_layers_torch_compiled`，用于控制 T=1 融合路径的启用。
2. 替换原有判断：将原代码中所有 `T == 1` 相关的条件判断替换为 `enable_t1_fused_qk_norm_rope`，包括：进入融合分支的条件、`round_norm_before_rope` 的赋值以及 `use_fused_qk_norm_rope` 的计算。这样在 Hopper 上，T=1 时恢复使用原始的分离 QKNorm/RoPE 路径。
3. 保持 T>1 路径不变：对于 T>1 的情况，`use_fused_qk_norm_rope` 仍然为真，融合路径继续使用，不影响原有逻辑。
测试与配置：未添加单元测试，作者说明这是架构特定的准入修复，不要求新增测试，但请求 NVIDIA CI 进行验证。

关键文件：
- `python/sglang/multimodal_gen/runtime/models/dits/cosmos3video.py`（模块 Diffusion；类别 source；类型 core-logic；符号 cosmos3video, forward）: 核心改动文件，通过平台判断控制 T=1 融合路径的启用，修复 Hopper 性能回归。

关键符号：forward

## 关键源码片段

### `python/sglang/multimodal_gen/runtime/models/dits/cosmos3video.py`

核心改动文件，通过平台判断控制 T=1 融合路径的启用，修复 Hopper 性能回归。

```python
# python/sglang/multimodal_gen/runtime/models/dits/cosmos3video.py
# 在 forward() 方法内，进入 UND K/V cache 之前新增平台判断：
# T=1 融合路径在 Blackwell 上更快，但在 Hopper 上会使 Cosmos3-Super 双卡任务回退，
# 因此仅对 Blackwell 启用融合，Hopper 保持原有的分离 QKNorm/RoPE 路径。
enable_t1_fused_qk_norm_rope = (
    T == 1
    and current_platform.is_blackwell()
    and not self._gen_layers_torch_compiled
)

# 后续使用该变量替代原先的 T == 1 判断，
# 确保 Hopper 上走分离路径、Blackwell 上仍走融合路径。
if enable_t1_fused_qk_norm_rope:
    # 融合 QKNorm+RoPE 分支
    pass

round_norm_before_rope = enable_t1_fused_qk_norm_rope

# T>1 时始终使用融合路径，不受平台限制
use_fused_qk_norm_rope = T > 1 or (
    enable_t1_fused_qk_norm_rope
    and hidden_gen.device.type == "cuda"
    and not torch.compiler.is_compiling()
    and get_sp_world_size() == 1
    and can_use_fused_inplace_qknorm_rope(...)
)

```

# 评论区精华

review 中无讨论。PR 描述中提到 NVIDIA CI 请求验证，但未形成具体讨论。

- 暂无高价值评论线程

# 风险与影响

- 风险：风险较低。改动集中在平台判断逻辑，未改变边界：Blackwell 上 T=1 融合路径保持原样，Hopper 上恢复为 #34932 之前的行为，T>1 路径不变。但缺少单元测试，且未在本地运行精度测试，依赖 nightly 数据验证，可能仍有微小精度差异。
- 影响：影响范围受限：仅影响 Cosmos3-Super 模型在 Hopper（H100 等）平台、T=1 时的执行路径，恢复为分离 QKNorm/RoPE，性能回归被修复。对其他模型、平台或 T>1 场景无影响。团队方面，此修复避免了 Hopper 上的性能损失，提升了 Diffusion nightly 数据的稳定性。
- 风险标记：缺少测试覆盖 , 依赖 nightly 数据验证

# 关联脉络

- PR #34932 Introduce fused QKNorm+RoPE path for T=1 diffusion workloads: 本 PR 修复由 #34932 引入的 Hopper 性能回归，通过平台判断限制融合路径。