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

  1. 背景和问题:大型Transformer生成模型(如GPT-3,1750亿参数)性能强大,但体积巨大,推理(使用模型做预测)时需要极高算力和显存,普通GPU难以承载,成本高。

  2. 现有解决方案的不足:模型压缩(特别是后训练量化post-training quantization,PTQ)可以降低资源需求,但之前方法对超大模型效果有限,尤其在压缩比高(3-4位量化)时准确率下降明显。

  3. 本文贡献:提出一种新的高效后训练量化方法叫GPTQ,能在几小时内对超大模型(OPT-175B,BLOOM-176B)进行3-4位压缩,几乎不损失准确率。

  4. 效果和应用:GPTQ压缩后的 OPT-175B 模型可在单张NVIDIA A100或两张更便宜的A6000 GPU上运行,并且速度提升3-4倍。还支持极端压缩到2位或三值。

  5. 创新点和意义:首次实现了数百亿参数级别模型的高精度低位量化,开启了让大型模型更广泛应用的可能。

  6. 限制:当前方法对乘法运算速度提升有限,因主流硬件架构尚不支持混合精度操作(如 FP16 x INT4);另外,我们当前的结果未包含激活量化,因为激活并非目标场景中的主要瓶颈

  • 总结:这篇论文提出了一个实用且高效的模型压缩方法,使超大语言模型的推理更省资源、更快,并保证准确率,推动了大模型的落地应用。

3. Background

  1. 分层量化(Layer-Wise Quantization)

    • 量化方法是对神经网络中每一层的权重分别进行处理,通过最小化量化后输出与原始输出的差异(平方误差)来优化量化权重。

  2. 最佳脑量化(Optimal Brain Quantization,OBQ)

    • OBQ 是一种针对分层量化的优化方法,它逐行处理权重,逐个权重量化,

    • 并在量化每个权重时,动态调整其他未量化的权重来补偿误差。

    • 这个过程基于一个二次优化目标,用数学方法高效更新权重,避免了重复计算。

    • OBQ 在中等规模模型(如ResNet-50)上效率较高,

      • 但其计算复杂度随权重矩阵大小呈三次方增长,导致在超大模型(数十亿参数)上计算代价极高。

4. The GPTQ Algorithm

  • 这段内容讲的是 GPTQ 算法的三个关键优化步骤及其整体流程,

  • 核心目的是高效且准确地对大模型中的权重进行后训练量化

  • 具体简述如下:

    1. 任意顺序量化(Step 1)

      • 传统方法按“误差最小”的贪心顺序量化权重,但作者发现,对大模型来说,随意固定顺序量化效果差别不大。

      • 于是GPTQ统一按列顺序对所有行权重量化,这样只需计算一次关键矩阵的逆,大幅减少计算复杂度,从而节省大量时间。

    2. 懒批量更新(Step 2)

      • 直接更新算法很慢,瓶颈在于内存带宽不足。

      • GPTQ改为一次批量处理128列,延迟统一更新权重和相关矩阵,极大提升GPU利用率和速度,适合超大模型。

    3. Cholesky分解稳定化(Step 3)

      • 反复矩阵更新会带来数值不稳定,尤其大模型容易导致算法失效。

      • GPTQ利用Cholesky分解预先计算需要的矩阵行信息,结合轻微的对角线加权(阻尼),保证数值稳定,提升鲁棒性和速度

  • 总结: GPTQ通过“任意顺序量化+批量懒更新+Cholesky数值稳定”三大技术,实现在超大模型上高效准确的后训练权重量化。

5. Experimental Validation

  1. 实验目标:验证GPTQ量化方法在准确度和速度上的表现,尤其是在大规模语言模型上的应用效果。

  2. 实验设置:用PyTorch实现GPTQ,基于单块GPU(NVIDIA A100 80GB)进行量化,采用标准的异步逐行量化方法,使用通用文本数据(非特定任务数据)进行校准,实现真正的“零样本”量化。

  3. 对比基线:主要比较GPTQ与当前主流的简单四舍五入方法(RTN)以及更复杂但计算慢的其他先进量化方法(AdaRound、BRECQ、OBQ等)。

  4. 小模型量化效果:GPTQ在4位量化时性能接近最优方法,3位稍逊,但速度大幅快于传统方法,支持快速量化,方便扩展到更大模型。

  5. 大模型运行时间:GPTQ能在几分钟到几小时内完成从十亿到上百亿参数模型的全量化,而其他方法处理大模型耗时极长,难以实际使用。

  6. 语言生成任务效果:GPTQ在多种语言任务上表现优于RTN,尤其是大模型在低位宽(3-4位)量化下仍保持较好性能,且模型越大,量化难度反而越低。

  7. 超大模型(175B参数)量化:GPTQ在4位量化下性能几乎无损,3位量化下仍能保持合理效果,且通过调整量化粒度(分组大小)还能进一步提升准确率,接近未量化模型。

  • 总结来说,GPTQ是一种高效且准确的后训练量化方法,能够快速且稳定地对超大规模语言模型进行低位宽量化,明显优于现有简单方法,同时在精度和速度上兼顾,适合大规模模型实用部署。

6. Summary and Limitations

  • 作者介绍了一种叫 GPTQ 的方法,用来高效量化大型语言模型到3或4位,压缩后模型速度更快,准确率损失很小,使得更多人能使用这些大模型。

  • 但也有局限:这种方法主要通过减少内存传输提速,并没有减少计算量;只针对生成任务,没有涉及激活量化。未来可以通过优化GPU代码等方式继续改进。