Prhub

#39045 [Gemma4] Support quantized MoE

原始 PR 作者 dsikka 合并时间 2026-04-09 09:57 文件变更 1 提交数 7 评论 6 代码增减 +34 / -14

执行摘要

支持 Gemma4 量化 MoE 模型权重加载,扩展 2D 量化专家参数映射逻辑。

PR body中明确指出,目的是扩展Gemma4 MoE权重加载逻辑,以支持2D量化层和参数。作者提供了量化检查点(如RedHatAI/gemma-4-26B-A4B-it-FP8-Dynamic)的加载示例,并展示了量化模型在GSM8K基准测试上的性能(0.9669 vs 原始0.9702),表明量化模型在精度损失极小的情况下能够加载运行。

该PR值得精读,特别是权重映射和正则表达式重映射的设计决策,展示了如何处理量化参数与原始权重的命名差异。关注load_weights中的前缀匹配逻辑和_weight_iterator中的重映射策略。

讨论亮点

review中主要讨论了两个技术点:

  1. 正则表达式潜在问题:gemini-code-assist[bot]指出正则表达式\.experts\.(\d+)\.可能导致重复前缀(如.moe.moe.experts),建议使用负向回顾断言(?<!\.moe)避免。但kylesayrs认为保存vLLM检查点不是真实用例,因此未采纳。
  2. 映射优先级:kylesayrs建议通过添加更高优先级的映射来处理量化权重,但mgoin质疑其必要性,因为现有映射已能匹配。最终代码采用前缀匹配逻辑,未添加额外映射。

实现拆解

主要修改了vllm/model_executor/models/gemma4.py中的load_weights函数和_weight_iterator函数。

  1. load_weights中,重构了专家参数映射逻辑,使用前缀匹配处理量化权重和缩放参数(如.weight_scale),支持3D打包张量和2D量化权重两种格式。
  2. _weight_iterator中,添加正则表达式重映射,将.experts.{id}.{proj}转换为.moe.experts.{id}.{proj},以处理每专家2D量化权重。
  3. 移除了对加载权重必须为2D的断言,因为量化参数可能是1D或标量。
文件 模块 状态 重要度
vllm/model_executor/models/gemma4.py model_executor modified 8.0

关键符号

load_weights _weight_iterator

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

评论区精华

正则表达式重映射潜在问题 正确性

gemini-code-assist[bot] 指出正则表达式可能导致重复前缀,建议使用负向回顾断言避免。

结论:kylesayrs 认为保存 vLLM 检查点不是真实用例,未采纳建议。 · 已解决

映射优先级优化 设计

kylesayrs 建议添加更高优先级映射处理量化权重,mgoin 质疑其必要性。

结论:最终采用前缀匹配逻辑,未添加额外映射。 · 已解决

风险与影响

  1. 兼容性风险:修改了权重加载逻辑,可能影响非量化MoE检查点的加载。但PR body测试表明原始检查点不受影响。
  2. 映射错误风险:正则表达式重映射可能在某些边缘情况下产生错误前缀(如.moe.moe.experts),但讨论认为实际风险低。
  3. 精度风险:量化模型加载后精度略有下降(GSM8K从0.9702降至0.9669),但属于预期范围内的量化损失。
  1. 用户影响:Gemma4量化MoE模型用户现在可以加载和使用量化检查点,扩展了模型部署选项。
  2. 系统影响:仅影响Gemma4模型的权重加载路径,对系统其他部分无影响。
  3. 团队影响:为后续量化MoE模型支持提供了参考实现,可能影响其他模型的类似修改。
映射逻辑变更 正则表达式边缘情况

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论