Prhub

#22266 [NPU] fix qwen3.5 video processor

原始 PR 作者 zhaozx-cn 合并时间 2026-04-08 21:13 文件变更 1 提交数 8 评论 8 代码增减 +177 / -21

执行摘要

修复 NPU 上 Qwen3.5 视频处理器因超过 8 维 permute 导致的执行失败。

PR body 明确指出:'In the Qwen3VLVideoProcessor, there is a permute operation with more than 8 dimensions which is not supported on the NPU. Following PR #20189, this PR applies a patch to the Qwen3VLVideoProcessor in the transformers to avoid processing data with more than 8 dimensions.' 目的是解决 NPU 上视频模型推理失败的问题。

建议 NPU 开发者和多模态功能维护者仔细阅读此 PR,重点关注维度处理逻辑和 review 中的修正点,以学习硬件适配策略和代码重构模式。对于涉及视频预处理或 NPU 优化的工程师,此 PR 提供了有价值的参考。

讨论亮点

Review 中,gemini-code-assist[bot] 指出两个关键问题:置换顺序错误(应交换 channel 和 temporal_patch_size 维度)和 size 参数访问方式(需处理 None 情况并改用括号访问)。xiaobaicxy 建议提取公共函数提升代码复用。提交历史显示作者通过合并主分支和提取函数来响应反馈,修正了这些问题。

实现拆解

主要变更集中在文件 'python/sglang/srt/hardware_backend/npu/modules/qwen_vl_processor.py':

  1. 新增 transform_patches_to_flatten 函数,将补丁张量通过视图和置换操作重构,避免超过8维的 permute。
  2. 修改 _preprocess 函数调用新函数,替换原有高维处理逻辑。
  3. 添加 npu_wrapper_video_preprocess 包装器,覆盖视频预处理方法,处理 size 参数访问和修正置换顺序。
文件 模块 状态 重要度
python/sglang/srt/hardware_backend/npu/modules/qwen_vl_processor.py hardware_backend/npu modified 8.0

关键符号

transform_patches_to_flatten npu_wrapper_video_preprocess _preprocess

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

评论区精华

置换顺序错误 正确性

gemini-code-assist[bot] 指出代码中 patches.permute(0, 1, 4, 3, 2, 5, 6) 应改为 (0, 1, 4, 2, 3, 5, 6),以正确交换 channel 和 temporal_patch_size 维度,否则会导致视频模型输入错误。

结论:建议修正置换顺序,提交历史显示代码可能已更新。 · 已解决

size 参数访问问题 正确性

gemini-code-assist[bot] 指出 size 是 SizeDict,应使用括号访问如 size['shortest_edge'],并处理 None 情况以避免 AttributeError。

结论:建议添加条件检查,提交历史中可能已修正。 · 已解决

提取公共函数建议 设计

xiaobaicxy 评论 'Please extract a common function',旨在提升代码复用性和可维护性。

结论:提交历史显示作者添加了提取提交,实施了该建议。 · 已解决

风险与影响

技术风险包括:置换逻辑修正可能引入新 bug,需确保与原始实现一致;size 参数处理不当可能导致运行时 AttributeError;变更集中于 NPU 后端,可能影响其他硬件的兼容性;PR body 中未添加单元测试,存在测试覆盖不足风险。

直接影响 NPU 平台上的 Qwen3.5 视频模型推理,修复了因高维操作导致的执行失败,使用户能在 NPU 上使用视频输入进行多模态推理。对系统,提升了 NPU 后端的稳定性和功能完整性,增强了跨硬件支持。影响范围限于 NPU 相关模块,程度中等。

核心路径变更 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论