GPTQ 是什么
GPTQ 用校准数据逐层最小化量化误差,把权重压到 4 位(W4A16):推理时再把权重反量化回高精度参与计算,激活仍走 16 位。权重显存大致降到 FP16 的四分之一量级,质量损失取决于模型、校准集与分组参数,必须在自己业务数据上实测后才能定。
基本信息
| 量化对象 | 权重(W4A16) |
|---|---|
| 显存变化 | 权重约降至四分之一 |
| 产出方式 | 离线量化,得到持久化权重 |
| 运行时依赖 | 需配套的量化内核支持 |
| 质量影响 | 随模型与校准集不同,需实测 |
典型使用场景
- 单卡塞不下 FP16 权重时先降权重的精度档
- 显存紧张但要保住窗口长度,优先省权重而不是省 KV
- 多实例部署降低单实例权重占用,提高同卡密度
- 成本敏感场景减少所需 GPU 卡数
加载已量化权重
加载已量化权重
# 需要安装对应的量化运行时(如 auto-gptq 等)
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("<gptq 权重目录>")
model = AutoModelForCausalLM.from_pretrained("<gptq 权重目录>", device_map="cuda")
# 量化信息写在权重目录的 config 里,加载时按声明识别加载前要核对什么
| 检查项 | 为什么要看 | 异常信号 |
|---|---|---|
| 权重目录结构 | 缺 config 无法识别量化 | 加载报不支持 |
| 量化内核 | 需与运行时匹配 | 报内核缺失 |
| 输出质量 | 位宽越低越敏感 | 评测集分数下滑 |
| 显存水位 | 确认收益真实存在 | 与 FP16 差别不大 |
量化在离线完成:校准集、位宽与分组参数都会影响质量,上线验证要用业务评测集,不能只看发布方的对比表。
4 位权重省的是权重那一栏:KV 与工作区不随之下降,长上下文场景的总显存降幅会明显小于按权重算出的比例。
同为 4 位权重,不同量化实现在同一模型上各有胜负:选型要在自己的评测集与流量结构下跑,而不是只看某一项公开基准。