G$^2$PTQ: Improving LLM Post-Training Quantization with Generalized Gradient Compensation
Ruikang Liu, Haoli Bai, Yuxuan Sun, Qian Zhang, Wenzheng Cai, Yanqi Hao, Feiyu Wang, Weidong Zhong, Zhuang Wang, Tong Yang, Xiangsheng Zhou
cs.CL, cs.AI
2026-09-25
中兴等提出G²PTQ:按Transformer块刷新精确梯度与Hessian做量化补偿,trust-region防止一阶步长爆炸。13个稠密模型的2-bit设置上,平均QA比GPTAQ高6.45点,KL从1.83降到0.90。
GPTQ把量化当成二阶补偿:一个权重被压到低比特,同一行还没量化的权重按Hessian来改,把这一步的误差补回去。这条路已经是部署侧的默认选项。它有两处互补的缺口。
按层对齐线性输出(layer-wise MSE)并不保证整网预测分布还在。OAC、GuidedQuant、YAQA改用端到端NLL或KL,Hessian用Fisher近似,但只在量化开始时算一次。权重往后改,这份二阶信息就越来越旧。FOEM把GPTQ丢掉的一阶梯度捡回来了,却用一阶Taylor近似来算梯度。这个近似只在layer-wise MSE下是精确的,换到block-wise MSE或KL会带误差。
全局目标缺一阶,一阶方法困在局部目标。两边一直没合上。
G²PTQ把优化目标从单层线性输出改到Transformer block。中间块用block-wise MSE对齐量化前后的hidden state,最后一块用KL对齐预测分布。每量化一块之前,只在这一块上做一次反向,把梯度和Hessian重算。比整网backward便宜,也避免开头算一次Hessian用到底的过期问题。
非线性块的精确Hessian求不出,就用梯度外积来近似:中间块对应往hidden state加高斯噪声后的Generalized Gauss-Newton,最后一块对应以全精度模型采样标签的Fisher。输出通道再按GuidedQuant分成g组、组内共享一份Hessian。主实验g=4。
一阶项不再走Taylor,直接backprop出精确梯度。精确补偿对损失尺度很敏感:两项损失分别乘a、b,更新范数按a²b⁻⁴变,容易把权重更新撑爆。trust-region给一阶步长乘一个β∈[0,1],让一阶项引起的损失变化不超过GPTQ那一项的α倍。α按块在[0,3]上以0.1步长grid search,搜完可以迁到别的bit-width和同系列变体。8B上这一招让量化加速1.20至1.33倍。
实现上,梯度乘Hessian逆的那块矩阵用Cholesky因子递归更新,复杂度回到O(max(dcol³, drow·dcol²)),和GPTQ同阶,并沿用lazy-batch。G²PTQ把一块拆成四个stage,每个stage前再刷一次信息。
评测覆盖13个0.6B至70B稠密模型和2个MoE(最大125B)。权重量化用对称per-channel,激活量化用对称per-token。校准稠密模型1024条、长度2048,MoE加到8192。量化前统一做Hadamard旋转。基线是RTN、GPTQ、GuidedQuant、GPTAQ。
W2A16三个模型平均,G²PTQ把相对GPTAQ的KL从1.83打到0.90,QA平均高6.45个点。2-bit是差距最大的一档。
| 设置 | 基线 | G²PTQ / G²PTQ |
| Qwen3-0.6B W3A16 QA | GPTQ 33.09 | 39.83 |
| LLaMA3-8B W2A16 QA | GPTAQ 42.38 | 51.16 |
| LLaMA3-70B W4A4 QA | GPTAQ 68.38 | G²PTQ 72.94(+4.56) |
| Qwen3.8-Flash-Next 125B W4A16 QA | BF16 78.28 | G²PTQ 77.95(掉0.33) |
Qwen3-0.6B 3-bit消融:block-wise对齐把QA从33.09拉到37.40;刷新信息、精确梯度、最后一块KL依次加上,到39.83。拿掉trust-region,PPL冲到1.29×10¹²,QA掉回28.97。同一设置里,精确梯度比FOEM式Taylor近似高2.09个QA点(39.83 vs 37.74)。
附录汇总:39组权重量化里38组平均KL最低;2-bit上13个稠密模型里12个QA最高。W4A4七个中等稠密模型上,每个模型QA都最高。
校准更贵。8B单卡:G²PTQ 12.54 GB、2.24小时,GPTQ 4.62 GB、0.43小时。125B MoE八卡:G²PTQ每卡86.72 GB、20.30小时,GPTQ 19.48 GB、7.98小时。
这是GPTQ家族内部的一次合并:block级监督、过期Hessian、丢掉的一阶项,放进同一套更新公式。已经在跑GPTQ / GPTAQ的流水线可以直接换,不需要QAT,复杂度声称与GPTQ同阶。代码已开源。
收益集中在误差大的设置:2-bit权重量化和4-bit权重加激活。4-bit仅权重量化上和GuidedQuant的差距已经很小,属于渐进改进。α可以一次搜完迁移,换bit-width不必每次重搜。Hessian引导的clipping(H-Scale)在Qwen3-4B的3-bit上能再加2.12个QA点,在Qwen3.5上没用甚至微降,主实验仍用weight MSE clipping。
正文没有单独的Limitations节。能看见的代价和没闭合的口如下。
校准明显比GPTQ贵:8B内存大约3倍、时间大约5倍;125B MoE八卡要20小时。G²PTQ还比GPTQ更吃校准样本量。Hessian走GGN / Fisher、通道近似独立、因果注意力稀疏,这些假设没有单独的误差审计。主表没有把FOEM放进来,一阶项的增益只在自己的消融和Qwen3-0.6B上看到。
W4A4实验部分写明,误差主要来自激活outlier,权重补偿只能间接扛。H-Scale的模型依赖性被点名后直接留给未来工作。38/39、12/13这类数字来自附录汇总,主文表格只展开了三个稠密模型的代表设置。