2210.17323_GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers¶
组织: 奥地利-苏黎世联邦理工学院
Abstract¶
GPTQ
一种新的权重量化方法
a new one-shot weight quantization method based on approximate second-order information,
that is both highly-accurate and highly-efficient.
能在只用一次计算的情况下,把模型压缩得很小(每个权重只用 3~4 比特表示),而且基本不影响准确率。
它可以在约 4 小时内把一个有 1750 亿参数的 GPT 模型压缩完,甚至可以让这个巨大的模型在一张 GPU 上运行。
它比以前的方法压缩效果好一倍多。即使把权重压缩到 2-bit 或 三值化(ternary) 也还能保持不错的效果。
实验表明
在高端 GPU(如 A100)上能加速约 3.25 倍
在便宜一些的 GPU(如 A6000)上可达 4.5 倍
1. Introduction¶
背景和问题:大型Transformer生成模型(如GPT-3,1750亿参数)性能强大,但体积巨大,推理(使用模型做预测)时需要极高算力和显存,普通GPU难以承载,成本高。
现有解决方案的不足:模型压缩(特别是后训练量化post-training quantization,PTQ)可以降低资源需求,但之前方法对超大模型效果有限,尤其在压缩比高(3-4位量化)时准确率下降明显。
本文贡献:提出一种新的高效后训练量化方法叫GPTQ,能在几小时内对超大模型(OPT-175B,BLOOM-176B)进行3-4位压缩,几乎不损失准确率。
效果和应用:GPTQ压缩后的 OPT-175B 模型可在单张NVIDIA A100或两张更便宜的A6000 GPU上运行,并且速度提升3-4倍。还支持极端压缩到2位或三值。
创新点和意义:首次实现了数百亿参数级别模型的高精度低位量化,开启了让大型模型更广泛应用的可能。
限制:当前方法对乘法运算速度提升有限,因主流硬件架构尚不支持混合精度操作(如 FP16 x INT4);另外,我们当前的结果未包含激活量化,因为激活并非目标场景中的主要瓶颈
总结:这篇论文提出了一个实用且高效的模型压缩方法,使超大语言模型的推理更省资源、更快,并保证准确率,推动了大模型的落地应用。
3. Background¶
分层量化(Layer-Wise Quantization):
量化方法是对神经网络中每一层的权重分别进行处理,通过最小化量化后输出与原始输出的差异(平方误差)来优化量化权重。
最佳脑量化(Optimal Brain Quantization,OBQ):
OBQ 是一种针对分层量化的优化方法,它逐行处理权重,逐个权重量化,
并在量化每个权重时,动态调整其他未量化的权重来补偿误差。
这个过程基于一个二次优化目标,用数学方法高效更新权重,避免了重复计算。
OBQ 在中等规模模型(如ResNet-50)上效率较高,
但其计算复杂度随权重矩阵大小呈三次方增长,导致在超大模型(数十亿参数)上计算代价极高。
4. The GPTQ Algorithm¶
这段内容讲的是 GPTQ 算法的三个关键优化步骤及其整体流程,
核心目的是高效且准确地对大模型中的权重进行后训练量化
具体简述如下:
任意顺序量化(Step 1)
传统方法按“误差最小”的贪心顺序量化权重,但作者发现,对大模型来说,随意固定顺序量化效果差别不大。
于是GPTQ统一按列顺序对所有行权重量化,这样只需计算一次关键矩阵的逆,大幅减少计算复杂度,从而节省大量时间。
懒批量更新(Step 2)
直接更新算法很慢,瓶颈在于内存带宽不足。
GPTQ改为一次批量处理128列,延迟统一更新权重和相关矩阵,极大提升GPU利用率和速度,适合超大模型。
Cholesky分解稳定化(Step 3)
反复矩阵更新会带来数值不稳定,尤其大模型容易导致算法失效。
GPTQ利用Cholesky分解预先计算需要的矩阵行信息,结合轻微的对角线加权(阻尼),保证数值稳定,提升鲁棒性和速度
总结: GPTQ通过“任意顺序量化+批量懒更新+Cholesky数值稳定”三大技术,实现在超大模型上高效准确的后训练权重量化。
5. Experimental Validation¶
实验目标:验证GPTQ量化方法在准确度和速度上的表现,尤其是在大规模语言模型上的应用效果。
实验设置:用PyTorch实现GPTQ,基于单块GPU(NVIDIA A100 80GB)进行量化,采用标准的异步逐行量化方法,使用通用文本数据(非特定任务数据)进行校准,实现真正的“零样本”量化。
对比基线:主要比较GPTQ与当前主流的简单四舍五入方法(RTN)以及更复杂但计算慢的其他先进量化方法(AdaRound、BRECQ、OBQ等)。
小模型量化效果:GPTQ在4位量化时性能接近最优方法,3位稍逊,但速度大幅快于传统方法,支持快速量化,方便扩展到更大模型。
大模型运行时间:GPTQ能在几分钟到几小时内完成从十亿到上百亿参数模型的全量化,而其他方法处理大模型耗时极长,难以实际使用。
语言生成任务效果:GPTQ在多种语言任务上表现优于RTN,尤其是大模型在低位宽(3-4位)量化下仍保持较好性能,且模型越大,量化难度反而越低。
超大模型(175B参数)量化:GPTQ在4位量化下性能几乎无损,3位量化下仍能保持合理效果,且通过调整量化粒度(分组大小)还能进一步提升准确率,接近未量化模型。
总结来说,GPTQ是一种高效且准确的后训练量化方法,能够快速且稳定地对超大规模语言模型进行低位宽量化,明显优于现有简单方法,同时在精度和速度上兼顾,适合大规模模型实用部署。
6. Summary and Limitations¶
作者介绍了一种叫 GPTQ 的方法,用来高效量化大型语言模型到3或4位,压缩后模型速度更快,准确率损失很小,使得更多人能使用这些大模型。
但也有局限:这种方法主要通过减少内存传输提速,并没有减少计算量;只针对生成任务,没有涉及激活量化。未来可以通过优化GPU代码等方式继续改进。