一、前言
在当前AGI领域蓬勃发展的大背景下,大语言模型(LLM)的参数规模和复杂性不断增长,这不仅带来了前所未有的计算能力,也带来了对硬件资源的巨大需求。为了解决这一挑战,大模型量化技术应运而生。量化是一种模型压缩技术,它通过减少模型中权重和激活的数值精度来降低模型的内存占用和加速推理过程,同时尽可能保持模型性能。随着深度学习在各行各业的广泛应用,量化技术逐渐成为实现高效部署的关键。本文将深入探讨大模型量化技术的原理、方法、适用场景以及最新的研究进展,为读者提供一个全面的视角。
二、大模型的量化方法汇总
1.大模型量化方法汇总
大模型量化方法主要分为3类,包括量化感知训练(QAT)、动态离线量化(PTQ Dynamic)和静态离线量化(PTQ static)。QAT需要再预训练好的模型基础上再次进行训练,会耗费额外的机时。根据是否有预训练的样本数据选择PTQ Dynamic和PTQ static,PTQ Dynamic操作简单,而PTQ static对模型的精度影响更小。Pytorch官方也提供了上述三种量化方法,详细信息参考https://pytorch.org/docs/stable/quantization.html#
图1. 三种量化方法的对比和选择
目前为止,研究人员在上述的量化方法基础上也发明了一系列的算法并将其利用到模型的部署。这些量化方法降低了模型的尺寸、减小了模型的部署显存和内存占用、降低功耗、加快推理速度等。近2年主流的量化方法如下:
- SmoothQuant:2023年6月由Han团队发表,利用数学等效变换的方法将量化从难度更大的激活离线迁移到权重来平滑异常的激活值(实际上是将input的动态范围除上scale,并将该scale吸到下一层的weight内, 利用weight的细粒度量化来承担该量化困难),实现权重和激活的int8量化。
- AWQ:SmoothQuant的续作,2023年10月由Han团队发表,利用group 量化将权重分组为多个子矩阵,然后使用 activation-aware 的方法来量化每个子矩阵,最后使用无重新排序的在线反量化来提高量化性能。实现权重int3/4位的量化。
- GPTQ:2022年10月由Frantar团队发表,利用hessian信息作为准则判定每个权重量化后对输出loss(通常定义为MSE)造成的影响, 量化影响最大的权重(即最敏感)挑选出来先进行量化, 然后对其他权重进行更新来补偿该权重量化导致的影响, 如此往复, 直至全部量化结果。是目前int3/4量化的首选
- ZeroQuant系列v1/v2:2022年6月Yao团队发表,采用input token-wise quantization 和weight group-wise quantization并设计了LKD(Layerwise Knowledge Distillation),同时利用了kernel fused方法,实现权重和激活的int8量化。
- LLM-int8:2022年11月由Dettmers团队发表,利用了Vector-wise量化和混合精度分解这两种方法,将Linear拆分成两部分,一部分为int8, 一部分为fp16, 分别计算后相加。几乎不掉精度的int8量化。
- LLM-QAT:2023年5月Liu团队发表,是一种data-free 量化感知训练(QAT),它使用下一个Token 数据生成的方式来生成 QAT 数据;利用了采用 per-token 激活量化和 per-channel 权重量化以及知识蒸馏等技术。实现激活权重以及K-Vcache的int4/8量化。
- Q-Lora:2023年5月由Dettmers团队发表,该方法提出4-bit NormalFloat(NF4,一种新的数制,其最佳优化性可以被数学严格证明)和量化量化常数(Double Quantization)以及Paged optimizers等技术,实现4bit量化。(据说跑起来kernel速度慢,不通用,后续不过多讨论)
- Squeeze LLM:2023年10月由Kim团队发表,该方法通过求解loss的二阶hessian矩阵来确定原张量中对于量化最为敏感的权重, 将量化点安置在此权重附近, 其它点以MSE最小来安置. 该方法以少量的存储空间换来了目前最优的4-bit weight精度, 但其缺点是由于采用LUT来实现非均匀量化, 导致其kernel在batch > 1时Linear的执行速度急剧下滑。
尽管目前来说已有这么多的量化相关的算法已被发明,但这些方法在实际应用方面仍存在局限,例如ZeroQuant只能量化参数量为20B以下的模型、SmoothQuant目前在int8量化效果较好而在int4量化时精度损失严重等等。接下来我将对不同的量化算法所适用的模型以及他们优缺点进行比较,进而分析最适合our model的量化方法。
2.现有量化方法对比分析
由于量化算法设计的针对性,不同量化算法的优势体现在某一方面;同样地,这种特性也导致在其他方面表现往往可能不尽人意。上述不同量化方法之间的主要差异主要包含以下几个方面:1)模型精度的维持程度 2)推理速度的提升程度 3)内存优化程度 4)适用的模型类型和模型参数大小 5)是否耗费额外计算(QAT还是PTQ)