Prhub

#21692 [Bugfix] [NPU] Qwen3.5 with quantization fix

原始 PR 作者 OrangeRedeng 合并时间 2026-04-08 14:15 文件变更 3 提交数 13 评论 8 代码增减 +29 / -42

执行摘要

修复 NPU 平台上 Qwen3.5 量化模型因映射更新导致的失效问题。

PR body和关联Issue #21676指出,在更新Qwen3.5模型后,将in_proj_qkv和in_proj_z融合为in_proj_qkvz,in_proj_b和in_proj_a融合为in_proj_ba,导致量化失效。具体表现为量化配置无法正确映射,需要修复映射以使量化工作正常,如PR body中截图所示。

建议技术管理者和工程师精读此PR,关注量化映射修复的设计决策(如参数命名统一和映射更新),以及review中关于向后兼容性的讨论,这些内容对理解量化模块的演进和维护有参考价值。

讨论亮点

Review中的核心讨论包括:

1) 参数命名统一:ping1jing2询问为何将layer_name改为prefix,OrangeRedeng解释为统一命名以消除混淆,TamirBaydasov同意此更改,因为一直使用前缀而非完整层名。结论:更改被接受。
2) 量化类型支持:gemini-code-assist[bot]建议在get_linear_scheme中添加W8A8量化类型以维持向后兼容性,指出先前实现支持该类型但在重构中被丢弃。状态:建议中,PR已合并但未直接修复。

实现拆解

实现方案分为三个部分:

1) 在python/sglang/srt/layers/quantization/modelslim/modelslim.py中,重构get_linear_scheme方法,统一参数命名为prefix以匹配get_moe_scheme,并修复量化方案映射逻辑;
2) 在python/sglang/srt/models/qwen3_5.py中,扩展packed_modules_mapping以包括NPU平台(添加_is_npu条件),确保映射正确应用;
3) 在python/sglang/srt/model_loader/loader.py中,添加TODO注释,指示未来移除冗余映射代码,转向模型文件中声明的映射。

文件 模块 状态 重要度
python/sglang/srt/layers/quantization/modelslim/modelslim.py 量化层 modified 8.0
python/sglang/srt/models/qwen3_5.py 模型定义 modified 6.0
python/sglang/srt/model_loader/loader.py 模型加载 modified 3.0

关键符号

get_linear_scheme get_quant_method

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

评论区精华

参数命名统一 设计

ping1jing2 询问为何将 layer_name 改为 prefix,OrangeRedeng 解释为统一命名以消除与 get_moe_scheme 的混淆,TamirBaydasov 同意因为一直使用前缀。

结论:更改被接受,参数统一为 prefix 以提高代码一致性。 · 已解决

量化类型支持 正确性

gemini-code-assist[bot] 建议在 get_linear_scheme 中添加 W8A8 量化类型以维持向后兼容性,指出重构中丢弃了该支持。

结论:建议中,PR 已合并但未直接修复,存在潜在兼容性问题。 · 待处理

风险与影响

技术风险包括:

1) 回归风险:modelslim.py的重构移除了should_ignore_layer调用,可能影响其他量化路径的跳过逻辑;
2) 兼容性风险:未支持W8A8量化类型可能导致使用该类型的现有模型失效;
3) 代码一致性风险:TODO注释指示未来重构,但当前映射逻辑仍分散在多个文件中,可能引入维护复杂性。

影响范围:

1) 用户:修复NPU上Qwen3.5量化模型的推理能力,确保精度测试通过(如PR body中GSM8K测试结果);
2) 系统:量化功能恢复正常,提升NPU后端兼容性和稳定性;
3) 团队:代码更一致,参数命名统一,但需关注未来映射重构以避免类似问题。影响程度中等,主要针对NPU平台和特定模型。

核心逻辑重构 缺少测试覆盖 向后兼容性风险

关联 Issue

#21676 [Bug] [NPU] Qwen3.5-w8a8 fails after modeling update

完整报告

参与讨论