模型部署与推理优化

GPTQ:基于 Hessian 的逐层误差补偿

kp-007核心25 分钟02-量化压缩

一句话定义

GPTQ 是一种训练后量化算法:逐层最小化量化前后输出误差,每量化一个权重就把其误差按 Hessian 逆加权"分摊"给尚未量化的权重,从而在 4-bit 下显著优于朴素的 round-to-nearest。

为什么重要

朴素 4-bit 取整(RTN)在分组较粗或离群值存在时困惑度会明显上升;GPTQ 用一次前向收集的统计量完成误差补偿,不需要重训练,就能让 3-bit/4-bit 进入可用区间。它(与 AWQ)是生产 W4A16 的两大事实方法。

前置知识

  • kp-005、kp-006(量化噪声、分组与 weight-only 机制)。
  • 矩阵求逆与二次型最小化的直觉(不需会推全套证明)。

核心概念

  • 逐层目标:对每层 W,找量化版 Ŵ 使 ‖WX − ŴX‖² 最小,X 是校准数据在该层输入。
  • Hessian 近似:该目标的 Hessian 为 H = 2XXᵀ,只需在校准集上前向若干样本即可得到。
  • 误差反馈(源自 OBS/OBQ 谱系):固定一个权重的量化值后,剩余未量化权重可解析地更新以"吸收"误差;GPTQ 把逐个权重更新简化为按列批处理,配合 Cholesky 求逆把复杂度降到可对 175B 模型数小时内跑完。
  • act-order(desc_act):按 Hessian 对角元(激活能量)从大到小的顺序量化,让最重要的权重享受最少的累积误差。

原理与机制

GPTQ 把量化从"逐点独立舍入"升级为"带误差反馈的组合优化":每固定一列权重的量化值,其误差按 H⁻¹ 对应列加权摊给尚未量化的权重,让后续权重"提前补偿"前面的损失。配合按列批处理与 Cholesky 求逆,整个过程只需一次校准前向、不需要反向传播——这是它在 175B 规模上几小时跑完的原因。

公式与模型

量化第 q 列权重后的误差反馈更新(简化形式):

δ:p = -wq - quant(wq)[H-1]qq × [H-1]:q

含义:第 q 列的量化误差 δ,按 H⁻¹ 的第 q 列加权分摊到其他列。单点舍入误差不再是"丢失",而是被系统性地再分配——这是 GPTQ 与 RTN 的本质区别。

可复现要点:校准集取 128–512 条目标域文本(数千 token 量级)即可;顺序为 收集各层 X → 计算 H → 逐列量化+反馈 → 输出 4-bit 权重与每组 scale。

实例或案例

同一 7B 模型、同 W4-G128 配置下的典型相对表现:RTN 困惑度明显上升;GPTQ 接近 FP16 基线;再叠加 act-order 后长尾更稳。代价是需要一次校准(分钟级)与少量目标域数据——这也是"校准集要贴合业务分布"这一实践要求的出处。

常见误区

  • "GPTQ 是量化感知训练":它不更新模型权重本身,不跑反向传播,属于 PTQ;训练量远小于 QAT。
  • "校准集必须又大又全":数百条同域文本通常足够;但域差异过大(全用代码校准去量化小说模型)会显著伤精度。
  • "GPTQ 结果一定优于 AWQ":各有所长——GPTQ 误差补偿更精细,AWQ 更简单、对校准集不敏感(见 kp-008 对比)。

自测题

  1. GPTQ 的层内优化目标与 Hessian 分别是什么?

要点:min‖WX−ŴX‖²;H = 2XXᵀ,由校准集前向得到。

  1. act-order 解决什么问题?

要点:让大激活对应的重要权重先被量化,减少其承担的累积误差。

  1. GPTQ 与 RTN 的本质区别?

要点:RTN 独立舍入每个权重;GPTQ 把每个权重的量化误差按 H⁻¹ 加权反馈给未量化权重。

与其他知识点的关系

kp-008 用另一种(无需 Hessian 求逆的)思路解决同一问题;kp-009 在两者之间做选型;kp-022 的 vLLM --quantization gptq 直接消费其产物。

延伸阅读

《GPTQ》(Frantar 等,2022)第 4 节给出从 OBQ 到 GPTQ 的全部近似步骤,适合精读一遍推导。

#GPTQ#PTQ#Hessian#误差补偿#校准集