Model quantized via sinq broken after save_pretrained and from_pretrained

用户在 Hugging Face Transformers 中使用 SinqConfig 量化模型(如 google/gemma-4-E4B-it ),执行 model.save_pretrained(save_dst) 后,再通过 AutoModelForCausalLM.from_pretrai

Model quantized via sinq broken after save_pretrained and from_pretrained

Model quantized via sinq broken after save_pretrained and from_pretrained

快速结论:使用 SinqConfig 量化模型后,通过 save_pretrainedfrom_pretrained 保存再加载会导致 KeyError: 'packing' 错误。根本原因在 SINQ 库本身,而非 transformers。优先排查 SINQ 版本并应用上游修复。

问题场景

用户在 Hugging Face Transformers 中使用 SinqConfig 量化模型(如 google/gemma-4-E4B-it),执行 model.save_pretrained(save_dst) 后,再通过 AutoModelForCausalLM.from_pretrained(save_dst, device_map='cpu') 加载量化模型时触发报错。如果量化后不保存直接使用,模型行为正常。

报错原文

KeyError: 'packing'

原因分析

根因在 SINQ 库(huawei-csl/SINQ)中的 SINQLinear.load_state_dict 方法。对于 nbits=8 的检查点,由于 N*K*8//8 == N*K(即”已解包”分支始终触发),该方法在重载时合法地从状态字典中弹出 "packing" 键。但后续 Transformers 的 Quantizer.dequantize 方法使用括号访问 "packing" 键,导致 KeyError。该问题已在 SINQ 上游被修复。

环境排查

  • Python 版本:3.12.13
  • transformers 版本:5.8.1
  • PyTorch 版本:2.11.0+cu130(CUDA 支持)
  • GPU 类型:NVIDIA GeForce GTX 1650
  • SINQ 版本:确认是否为最新或包含 huawei-csl/SINQ#26 的修复
  • gemlite 安装状态:影响 SINQ 量化模型的加载行为

解决步骤

  1. 确认 SINQ 库版本,检查是否已包含 huawei-csl/SINQ#26 的一行修复。
  2. 如果未修复,手动应用该 PR 的更改:在 SINQLinear.load_state_dict 中确保 "packing" 键在解包操作后仍然保留或正确处理。
  3. 或等待 SINQ 发布包含修复的新版本,然后升级 sinq。
  4. 升级后可向 transformers 发送 PR 提升 sinq 最低版本依赖,但这不是必需步骤。

验证方法

重新执行量化、保存、加载和推理的完整流程(使用 Issue 中的测试代码),确认不再抛出 KeyError: 'packing',并且模型能正常生成聊天响应(如 {'role': 'assistant', 'content': ...})。

参考来源

huggingface/transformers #46050

huawei-csl/SINQ #25(上游 Issue)

huawei-csl/SINQ #26(修复 PR)

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10239

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注