# PR #20974 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[NPU][Diffusion] fix sp modulate for qwen-image-edit
- 合并时间：2026-03-30 21:18
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/20974

---

# 执行摘要
该 PR 修复了 Qwen 图像编辑扩散模型在非 CUDA 硬件（如 Ascend NPU）上运行时因调制索引处理错误而导致的崩溃问题。通过引入 CUDA-only guard 并优化回退路径，确保模型在张量并行配置下稳定工作，提升了跨平台兼容性。

## 功能与动机
动机源自 qwen-image-edit 模型在非 CUDA 环境部署时的 AssertionError 错误。PR body 中描述错误为调用 `fuse_layernorm_scale_shift_gate_select01_kernel` 时断言 `x.is_cuda` 失败，表明代码错误地假设了 CUDA 后端。修复目标是使调制索引处理在 NPU 等平台上正常工作。

## 实现拆解
修改集中于 `qwen_image.py` 的 `_modulate` 函数：
- **CUDA guard**：添加条件 `if x.is_cuda and not current_platform.is_hip()`，仅在 CUDA 且非 AMD HIP 平台使用高性能 Triton 融合 kernel。
- **回退路径**：在非 CUDA 或 AMD HIP 时，使用基于 `torch.where` 的回退逻辑处理调制。
- **分片对齐**：修复 `modulate_index` 在 SP 模式下的分片，确保与本地图像令牌对齐。

## 评论区精华
review 讨论中，`mickqian` 建议简化条件为 `if index is not None and x.is_cuda:` 以提前规避错误，但最终实现采用了更精确的 guard。issue 评论显示关联 PR #20679，作者基于其更新修复并补充了 `sp_world_size` 处理，体现了跨 PR 协作。

## 风险与影响
**风险**：主要存在回归风险，修改了核心调制逻辑，但通过 guard 限制影响范围；非 CUDA 路径可能性能较低，需监控；测试覆盖需确保边缘场景。
**影响**：用户可在 NPU 等平台部署 qwen-image-edit 模型；系统增强多硬件支持；团队获得跨平台适配范例。

## 关联脉络
与 PR #20679 关联，表明调制索引处理是持续演进的功能线。近期历史 PR 如 #21648（扩散模型 overlay 机制）和 #21234（AMD 量化支持）显示仓库正积极优化扩散模型跨平台性能，此 PR 是其中一环。