GPTQ&OBQ:量化你的GPT

2,511 阅读3分钟

截屏2023-07-24 16.41.57.png

Quantization:模型量化,通过把浮点数转为定点数、降低访存来在引入较少误差的情况下,降低模型大小,推理时延,大幅提升模型性能。

Calibration Set:校准集,少量的训练数据,用于在量化过程中校准评估量化误差

PTQ:Post-Training Quantization 训练后量化,量化过程中不会进行权重训练。

QAT: Quantization Aware Training 在量化的过程中会进行梯度反传更新权重。

OBD&OBS: 模型裁剪方法,利用Loss二阶导数信息,对权重删除进行补偿得到较好的裁剪结果。

强烈建议补全前置知识 OBD&OBS:给神经网络做个外科手术

核心要点

  1. OBQ:把OBS推广到量化领域,同时加上分行运算的方式。

  2. GPTQ:使用相同顺序,各行并行计算,分批BatchUpdate,分组量化的方式提升量化速度

和学术界刷SOTA不一样,工业界更在意ROI,如何把研究用的大模型在低工作量的情况下转移到工业部署上,保证精度的同时最大程度节省资源,这个是很重要的一个话题。

OBS

把权重直接展开,计算对应的海森矩阵,然后按照顺序进行量化。时间复杂度:O((drowdcol)3)O\left({\left(d_{\mathrm{row}} \cdot d_{\mathrm{col}}\right)}^3\right) 流程图 (10).jpg

OBQ

权重分行计算,但是贪心算法,每次找量化误差最小的进行量化。时间复杂度:O(drow dcol 3)O\left(d_{\text {row }} * d_{\text {col }}^3\right)

流程图 (11).jpg

GPTQ

使用相同顺序,各行并行计算,分批BatchUpdate,分组量化。时间复杂度:O(max{drow dcol2,dcol3})O\left(\max \left\{d_{\text {row }} \cdot d_{\mathrm{col}}^2, d_{\mathrm{col}}^3\right\}\right)

  1. 相同顺序:在量化的过程中,以贪心算法来每次以最小的误差量化权重的方法表现良好,但相比固定顺序并没有明显提升,尤其是在大模型上可能固定顺序更好。所以我们使用固定顺序进行量化。
  2. 并行计算:因为量化权重在行间没有影响,所以我们可以并行量化多行来加速计算。
  3. 分批更新:如果我们每次量化一个参数就进行一次权重更新的话,更多的时间都被花到访存,不能充分利用GPU的算力,所以我们可以分批进行更新,批内完成后再更新全局的矩阵。
  4. 数值稳定:对海森矩阵的逆Cholesky Reformulation\text{Cholesky Reformulation}来增强数值稳定性。
  5. 分组量化:相对于采用相同的Scale,Zero对整个矩阵进行量化,选择一个小点的Groupsize在组内计算特定的量化参数可以应对全局的异常值,取得更好的量化效果。

目前我们用的模型可能在体积和性能上还是有很大的优化空间,GPTQ只是从量化这个角度,假如我们组合多种技术来实验会怎么样。现在看170B这个水平的模型很大,但是或许我们目前的方法已经能把它们塞进4080这样的消费级显卡上了,只不过我们尚且没有找到好的工程组合方法,如果能把蒸馏-剪枝-量化等技术有效的统一起来,或许已经可以实现。

GPTQ 代码流程图

image.png

相关链接

QAT&PTQ: Quantization aware training(神经网络量化训练)_哔哩哔哩_bilibili

SenseTime HPC Dalao: zz123211的个人空间-zz123211个人主页-哔哩哔哩视频

LokLok Dalao:GPTQ: 模型量化,穷鬼救星-知乎

OBD&OBS Video: OBD&OBS:给神经网络做个外科手术【论文粗读·3】_哔哩哔哩_bilibili

OBQ: Optimal Brain Compression A Framework for Accurate Post-Training Quantization and Pruning.pdf

GPTQ: Accurate Post-Training Quantization for Generative Pre-Trained Transformers.pdf

AutoGPTQ: GitHub - PanQiWei/AutoGPTQ GPTQ4LLaMa:GitHub - qwopqwop200/GPTQ-for-LLaMa

Available Time: 22:00-24:00(workday) 14:00-20:00(non-working day)

www.bilibili.com/video/BV1TX…