061 · GPTQ:压缩权重时,为什么要让剩下的权重补偿误差
论文:Elias Frantar等,GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers,2022年公开,ICLR 2023。原始论文 · v2正文 · 官方代码。
图表来源:Elias Frantar等,2022,原文;CC BY 4.0。本篇展示做了图形区域裁切,图中数据与标签未改动。
先接住前作的问题
LoRA减少任务更新参数,却仍要保存和运行完整基座。本篇研究可组合但不同的部署问题:已学权重能否低比特存储而少损伤输出?AWQ与它是平行量化路线,QLoRA才将量化骨干用于适配。
五个前置概念
五个前置概念:量化网格规定允许存储哪些值;校准用样本估计压缩所需统计量;Hessian描述局部曲率;Cholesky分解把正定矩阵拆成三角因子以稳定计算;内存带宽瓶颈意味着搬运权重可能比执行乘法更限制速度。
一、问题设定:低比特舍入怎样保持层输出而不是只保持权重
逐个权重独立舍入忽略输入通道的相关性:两项误差可能抵消,也可能放大。GPTQ以真实校准输入定义逐层输出误差,每固定一列量化结果,就允许剩余权重补偿;要同时解决质量与大模型可执行性。
二、由校准曲率和约束优化推导误差补偿
设线性层权重为 ,校准输入组成矩阵 ,量化后的权重为 。逐层目标是
表示允许的离散数值集合。这个目标不同于最小化 :后者把每个参数误差同等看待,前者按照输入分布衡量影响。如果一个通道始终接近零,它的权重变化对当前数据影响很小;一个幅值较大的通道则可能非常敏感。
这也解释了校准数据的必要性。算法不需要任务标签,但需要一批能代表部署输入的文本。没有标签不等于没有数据,局部输出保真也不等于所有下游任务表现不变。校准范围之外的新语言、代码或异常长输入,仍可能暴露未被目标充分约束的方向。
与简单最近舍入相比,核心新增部分是补偿;与逐权重选择最优处理顺序的OBQ相比,核心工程改变是让各行使用相同列顺序,复用矩阵信息。它没有提出新语言建模损失,而是在既有模型上解决受离散约束的重建问题。
对于一行权重,重建误差是二次函数,其曲率矩阵为 。这里的“二阶”来自层输出平方误差,不应直接理解为完整语言模型交叉熵的精确Hessian。输入通道的相关性就编码在 的非对角元素里。
若先固定一个权重为离散值,其他自由权重可以移动,以减轻由这次固定造成的输出变化。在二次近似框架中,逆曲率给出适合补偿的方向。相互冗余的输入维度通常更容易替对方分担误差;没有替代通道的重要方向则不容易补偿。
GPTQ采用三个关键措施。首先,跨行按统一的列顺序量化,使不同输出通道共用矩阵运算。其次,先积累一个列块的误差,再集中更新后面的权重,把许多低效率操作变成适合GPU的矩阵乘法。最后,对加阻尼后的逆矩阵做Cholesky分解,避免不断更新逆矩阵时数值误差累积。
下面是算法1的教学化结构。为避免符号混淆,令 专门表示逆曲率的上三角Cholesky因子,满足 ;它不是逆曲率矩阵本身。 是稳定计算的阻尼, 是列块大小。
用拉格朗日乘子得到补偿方向
对一行权重,令δ为改变量、H为校准重建误差曲率,固定第q维量化变化 。假设 为正定矩阵, 为这次固定舍入造成的改变量。最小化 且满足该约束,驻点给出 ,故 。 是第 个单位向量, 是约束的拉格朗日乘子。其他坐标随逆曲率列一起移动,正是补偿而非独立舍入;求逆条件不足时需阻尼。
教学算例。 若 ,第一权重必须增加0.2,则逆矩阵第一列比值给出第二维改变−0.1。仅改第一维的二次代价为0.04,补偿后为0.03。降低的是这份校准二次目标;后续非线性和部署分布不在这个小证明里。
设模型只有 ,而校准样本中总是 。原权重为0.49和0.51,输出等于 。如果先把第一个权重舍入到0,让第二个自由权重吸收0.49,它就变成1,输出可以保持。这个自构例子说明相关性允许补偿;它不代表真实模型一定存在完美替代通道。
校准通道共线时,为什么需要阻尼
若校准集中两个输入通道始终相同,XX转置的两行也相同,曲率矩阵不可逆;此时不能直接执行补偿式里的求逆。加正对角阻尼使小特征值远离零,同时改变了补偿所用的几何。应记录阻尼和校准覆盖,而不是把数值分解失败解释成低比特模型必然无法工作。
教法联系:Lilian Weng的Large Transformer Model Inference Optimization。算例为本文自构。
三、按共同顺序量化并批量更新未量化列
输入:某线性层 W,校准输入 X,量化网格,列块大小 B
H = 2 X X^T
R = 上三角Cholesky((H + λI)^(-1))
Q = 与W同形状的空矩阵
依次遍历列块 [a, b):
E = 当前块的误差缓存
对 j = a ... b-1:
Q[:, j] = quantize(W[:, j])
E[:, j-a] = (W[:, j] - Q[:, j]) / R[j, j]
W[:, j:b] -= E[:, j-a] × R[j, j:b]
W[:, b:] -= E × R[a:b, b:]
输出:量化权重Q及解码所需的尺度等信息
整个网络还需要逐块采集输入:上一块量化完成后,用量化后的块继续传递校准样本,再处理下一块。否则后面的层只见到理想浮点输入,可能低估前面量化已改变的分布。伪代码省略了权重打包、异常通道处理及内核调度,不能直接作为生产实现。
“为什么有效”要分三层回答。平方目标的局部曲率是数学事实;统一顺序与分块是否兼顾精度和速度,需要实验判断;压缩后端到端能力是否保留,则必须由实际任务验证。不能从补偿公式直接推出所有任务的准确率不降。
四、分别检验困惑度、压缩成本和生成时延
先问输出误差补偿是否保住质量,再计生成量化模型的时间;换卡数后的每token速度不是单内核吞吐对照。
| 项目 | 原文设置与阅读重点 |
|---|---|
| 模型 | OPT与BLOOM多个规模;观察规模及架构是否改变低比特敏感性 |
| 校准 | 128段随机C4文本,每段2048 token;无任务标签 |
| 比较 | FP16、最近舍入RTN;另有小模型量化方法比较 |
| 质量 | WikiText2、PTB、C4困惑度及LAMBADA准确率;两类指标不能互换 |
| 资源 | 逐块量化可在单张80GB A100执行;表2报告量化耗时 |
| 推理 | 表6为batch 1生成128 token;同时比较所需GPU数量 |
| 不确定性 | 主要表格没有完整多种子置信区间,微小差值不宜视为稳定能力提升 |
校准token总量为 ,这是按原设置自行计算。它远小于预训练规模,但依然是量化过程使用的额外数据。比较不同压缩方法时,应统一这些样本、位宽与分组粒度;更细分组需要更多尺度和零点,名义位宽相同也可能存储量不同。
证据一:表5,质量能否保住。 OPT-175B的WikiText2困惑度,FP16为8.34,4-bit GPTQ为8.37,3-bit为8.68;4-bit RTN为10.54。支持的是这组模型与数据上的输出质量保持,不能据此宣称低比特一定提升知识或推理。

证据二:表3,方法并非处处无损。 OPT-125M从27.65变为4-bit的31.12、3-bit的53.85。小模型的损失提醒读者:不能把最大的模型结果推广到任意规模。作者讨论的规模趋势也有例外,模型结构和激活分布值得单独检查。
证据三:表2,量化本身是否可负担。 OPT-175B约4.2小时,BLOOM-176B约3.8小时。这是生成低比特模型的成本,不是训练大模型所需时间,也不是用户每次回答问题的延迟。
证据四:表6,真实推理速度。 OPT-175B在A100上,FP16使用5张卡为230毫秒/token,3-bit使用1张卡为71毫秒/token,按数值计算约3.24倍。模型放置和访存都变化了;这个结果不能直接解释为同一硬件上的整数乘法吞吐提高3.24倍。
证据五:表7,极低位宽的隐藏开销。 更细分组可改善2-bit结果,但尺度等信息提高了有效位宽。这里验证了分组与质量的交换关系,没有证明所有参数和辅助信息都只占两位。
这些证据覆盖质量、处理成本和生成延迟三个不同问题。一个实现若只能给出更小的文件,尚未证明更快;若只能给出困惑度接近,也尚未证明代码执行或多轮指令表现接近。
五、校准分布与分组开销限制容量和速度外推
如果部署时突然出现 ,相同补偿就可能失败。这不是算法“忘了算误差”,而是校准目标没有覆盖该方向。因此检查校准分布,是理解此类方法的核心,而不是部署后附加的形式步骤。
精度收益来自补偿和数据感知,运行效率来自统一顺序、批量更新及数值实现,部署收益还依赖读取压缩权重的专用内核。这些环节不能混写成一个“低比特加速公式”。
论文的生成加速主要利用减少权重访存,不是把整个计算图变成低比特整数计算。长上下文时,KV缓存会占据更多显存;高batch时,计算与访存的平衡也不同。这里关于不同部署负载的边界属于机制分析,具体交叉点需要在目标机器上测量。
还应区分3-bit与4-bit的容量结论。175B权重、保留浮点的模块、量化元数据和缓存都要占空间,不能只用“参数量乘位宽”断言整模型一定装入某张卡。论文单卡大模型生成的展示对应特定3-bit配置,不能直接改写成任意4-bit配置都能单卡运行。
六、将量化校准与任务增量训练组合
输出补偿之外,AWQ用激活引导缩放作平行量化比较;QLoRA则把低位基座接入训练。继续比较时保留校准分布、分组元数据和内核条件,勿混用任务。
自测:能够回答,才算理解
1. 为什么最小化权重的舍入误差,不等于最小化模型输出误差?
答案:输出误差还要乘输入。通道的幅值、相关性与出现频率都会改变权重误差的影响。GPTQ利用 描述这些关系,让还自由的参数补偿已经离散化的参数;它优化的是校准样本上的层输出重建,而非参数距离。
2. 为什么3-bit能装入单卡,不能推出4-bit也能装入同一张卡?
答案:更高位宽本来就需要更多容量,还要加上保留浮点的模块、尺度、零点、激活和KV缓存。单卡结论必须对应具体模型、上下文、batch和实现。只计算权重主体会低估需求。
3. 困惑度几乎没变、文件缩小数倍,能否说服务速度也提高同样倍数?
答案:不能。质量和存储没有决定所有运行成本。内核解码、访存、矩阵乘法、通信及缓存都影响延迟,而且prefill与逐token解码的瓶颈不同。至少要分别测目标负载的首token延迟、解码速度、吞吐与峰值显存。