大模型量化技术原理-AWQ、AutoAWQ
来源:互联网
时间:2026-08-07 14:10:14
近年来,随着Transformer和MoE架构的兴起,深度学习模型的参数量轻松突破万亿级别。模型越做越大,但部署成本也水涨船高,于是模型压缩技术成了刚需——剪枝、知识蒸馏、量化,这三板斧里,量化尤其受关注。本系列会逐一拆解主流的训练后量化方案:GPTQ、LLM.int8()、SmoothQuant、AWQ等,今天先聊聊AWQ(AutoAWQ算它的亲儿子)。之前已经介绍过SmoothQuant,这次轮到MIT的另一篇大作。
背景
把大语言模型(LLM)的权重压到低比特,能省内存,但做起来并不容易。量化感知训练(QAT)成本高,不实用;训练后量化(PTQ)在低比特下精度掉得厉害。最接近的先行者是GPTQ,它用二阶信息做误差补偿,但潜在的问题是可能在校准集上过拟合,导致模型在分布外的任务上泛化能力受损——毕竟LLM是通才,得什么场景都能扛。 那么有没有更优雅的方法?AWQ的思路来自一个简单但关键的观察:权重的重要性并不均等,大概0.1%到1%的显著权重对模型性能影响巨大。如果能跳过这些权重不量化,误差就能大幅缩小。但问题来了:怎样找到这些显著权重?按权重本身的大小(L2范数)去挑,效果跟随机选差不多;但如果根据激活值的幅度(activation magnitudes)来选,效果一下就不一样了——只保留0.1%的对应权重通道不量化,性能就能逼近GPTQ。 这就引出了核心洞察:**要找到显著权重,应该看激活分布,而不是权重本身**。因为激活幅度大的通道处理的是更重要的特征,对应的权重自然更“值钱”。 不过,混合精度实现(一部分FP16、一部分INT)对硬件不友好,效率低。于是作者换了个思路:通过按通道缩放(scaling)来减少显著权重的量化误差,而不用实际保留FP16。具体推导是:对权重w乘以一个大于1的缩放因子s,同时对输入x除以s(灵感来自SmoothQuant),这样量化后的误差会转移——显著通道的相对误差变小,非显著通道的误差会略微放大。实验表明,对OPT-6.7B模型,把1%的显著通道乘上s=2,困惑度就从23.54降到了11.92。但s不能过大,否则非显著通道的误差会被放大。于是需要一个自动搜索最优缩放因子s的方法,让量化后的输出差最小。 搜索空间很简单:s只和激活的幅度有关,通过一个超参数α(0到1之间)来平衡显著通道和非显著通道的保护。α=0表示不缩放,α=1对应最激进的缩放。实际做一次快速网格搜索就搞定。另外还可以配合权重裁剪(clipping)进一步降低MSE误差。 这个方法不需要反传或回归,对校准集的依赖极低——只测每个通道的平均激活幅度,所以不会过拟合,泛化能力很稳。AWQ 实验细节
在LLaMA、OPT等不同家族、不同大小的模型上,AWQ都优于已有方案。而且由于泛化能力强,它在指令微调模型(如Vicuna)和多模态模型(如OpenFlamingo)上效果也不错。目前官方实现是llm-awq,社区里AutoAWQ、vLLM、HuggingFace TGI、LMDeploy、TensorRT-LLM、FastChat等工具都原生支持AWQ。AutoAWQ
AutoAWQ是一个易用的4比特量化工具包,相比FP16速度提升3倍、内存降低3倍。它基于MIT的LLM-AWQ做了改进。这里需要理清一个概念:LLM推理的算力瓶颈是内存带宽还是计算能力? 用Roofline模型解释:对于小batch size的7B模型,瓶颈是**内存带宽**(Memory-bound),GPU花在把权重从内存搬到计算核心上的时间占大头。量化后权重只有原来的1/3,搬运更快,所以加速明显。但对于大batch size(Compute-bound),矩阵乘法占主导,W4A16量化反而因为反量化开销,速度未必提升——这也是很多量化方案在批处理大时效果不显著的原因。 AutoAWQ支持的模型列表如下(表略,保持原样)。 现在Transformers已经集成了AutoAWQ,使用方式很简洁。下面是一个量化示例(代码略),以及保存和加载量化模型的步骤。注意:量化后需要修改配置文件使之与Transformers兼容,具体做法是写入一个AwqConfig。总结
本文梳理了AWQ的动机、原理和实验表现,并用AutoAWQ作为工具实例做了说明。核心一句话:**对LLM做权重量化,关键不是无差别地压精度,而是识别并保护那1%的显著通道**——AWQ用激活幅度来找,再用缩放因子优雅地避开混合精度的硬件坑,做到了既省内存、又保性能。-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名