Prhub

#20974 [NPU][Diffusion] fix sp modulate for qwen-image-edit

原始 PR 作者 gxxx-hum 合并时间 2026-03-30 21:18 文件变更 1 提交数 5 评论 14 代码增减 +85 / -53

执行摘要

修复 Qwen 图像编辑模型在非 CUDA 环境下的调制索引处理错误,支持 NPU 和 SP 分片。

PR body中明确指出动机是'Fix sp modulate_index handling for qwen-image-edit'。错误日志显示在调用fuse_layernorm_scale_shift_gate_select01_kernel时断言x.is_cuda失败,表明非CUDA环境错误地尝试使用CUDA-only Triton内核,导致qwen-image-edit在NPU等平台崩溃。

建议工程团队精读此PR,特别是_modulate函数中的条件分支设计,展示了如何优雅处理不同硬件后端的kernel选择。关注CUDA检测、平台标识使用以及回退机制的实现细节。

讨论亮点

review中,mickqian建议将条件改为'if index is not None and x.is_cuda:'以提前避免非CUDA路径进入kernel调用,但最终实现采纳了更细粒度的guard。issue评论中,mickqian询问是否还需此PR after #20679,作者回应基于#20679更新了修复,并补充了sp_world_size处理。讨论聚焦于正确性和跨平台兼容性,结论是修改有效。

实现拆解

修改集中于qwen_image.py文件的_modulate函数。主要改动:

  1. 引入条件检查'if x.is_cuda and not current_platform.is_hip()',仅在CUDA且非AMD HIP平台使用融合kernel;
  2. 在非CUDA或AMD HIP时,使用基于torch.where的回退逻辑处理调制;
  3. 修复modulate_index分片,确保在SP模式下与本地图像令牌分片对齐。
文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/models/dits/qwen_image.py 扩散模型 /DITs 模块 modified 8.0

关键符号

_modulate

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

CUDA guard 的正确性 正确性

mickqian 建议添加 x.is_cuda 检查以避免非 CUDA 环境错误进入 kernel 调用。

结论:作者采纳建议并扩展为更细粒度的条件 'if x.is_cuda and not current_platform.is_hip()',确保兼容性。 · 已解决

风险与影响

主要风险是回归:修改了调制核心逻辑,可能影响其他扩散模型或配置,但变更针对特定错误且添加了guard,风险可控。兼容性风险:确保非CUDA环境(如NPU、CPU)正确处理,测试覆盖不足可能遗漏边缘情况。性能风险:非CUDA路径使用回退可能效率较低,但保证了功能正确性。

对用户:修复了qwen-image-edit在NPU等非CUDA平台上的崩溃问题,使模型可部署到更广泛硬件。对系统:提升了扩散模型在多平台上的兼容性和稳定性,支持张量并行配置。对团队:减少了跨平台调试开销,并为类似硬件适配提供了参考模式。

非 CUDA 路径变更 跨平台兼容性风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论