基于 Transformer架构的大型语言模型在各种基准尝试中展现出优异功能,但数百亿、千亿乃至万亿量级的参数规模会带来高昂的服务成本。例如GPT-3有1750亿参数,采用FP16保存,模型大小约为350GB,而即使是英伟达最新的B200 GPU 内存也只有192GB ,更不用说其他GPU和边缘设备。
大模型压缩,即将大模型“瘦身”后塞进资源受限的场景,以减少模型保存、访存和计算支出。在尽量不损失模型功能的前提下,提高大模型推理吞吐速度,使大模型在物联网边缘设备、嵌入式机器人、离线移动应用等边、端场景中保持优秀的推理功能和功耗表现。
最近,来自清华大学电子工程系、无问芯穹和上海交通大学的研究团队展开了一次量化方案的“大摸底”,在《Evaluating Quantized Large Language Models 》(Qllm-Eval)这项工作中评价了差别模型、量化差别张量类别、利用差别量化方式、在差别任意上的功能,本篇工作已被ICML'24接收。Qllm-Eval列举出很多大模型落地环节应当关注的模型威力,对产业中的模型量化工作实践,比如如何选取量化方式、针对哪些层或组件进行优化等问题具有指导意义。
图注:重要知识点总结
原文链接:https://arxiv.org/pdf/2402.18158.pdf
仓库地址:https://github.com/thu-nics/qllm-eval
欢迎Follow该仓库查看更详细的实验数据以及绘图工具,并追踪更多模型的尝试结果。后续该项目还将随着Transformer的版本更新持续迭代,以支持更多模型的KV Cache量化。
1、训练后量化(Post-Training Quantization,PTQ)
大模型推理过程包括两个阶段:Prefill阶段和Decoding阶段:
Prefill阶段的主要算子为矩阵-矩阵乘(GEMM),其推理速度受限于计算速度。
Decoding阶段的主要算子为矩阵-向量乘(GEMV),其推理速度主要受限于权重访存速度。
当处理涉及长文本或大批量大小的任意时,KV Cache的保存支出会超过权重的保存支出。
训练后量化(Post-Training Quantization,PTQ)是大模型压缩的常用技术,其核心原理是将大模型的权重、激活值、KV Cache利用低精度格式表示,从而降低大模型在保存和计算上的支出。
在深度学习模型中,权重(weights)、激活值(activations)和键值缓存(KV Cache)等数值通常以32位或16位的浮点数(floats)来表示,这些浮点数可以有非常精确的数值,但同时也意味着模型会占用较大的保存空间,并且需要比较多的计算资源来处理。
如果将浮点数从16位转换成8位或者更低,好处是模型的大小会显著减少,因为每个参数只需要不到50%的保存空间,同时,利用整数进行计算通常比浮点数更快。
2、差别量化方式给大模型带来的作用
但量化压缩通常是有损的,差别量化方式的设计会对模型功能带来差别的作用。为了探究差别量化方式对差别模型究竟会产生什么样的作用,并帮助特定模型选择更适合的量化方案,来自清华大学电子工程系、无问芯穹和上海交通大学的研究团队展开了一次量化方案的“大摸底”,在《Evaluating Quantized Large Language Models 》(Qllm-Eval)这项工作中评价了差别模型、量化差别张量类别、利用差别量化方式、在差别任意上的功能。
图注:《Evaluating Quantized Large Language Models 》(Qllm-Eval)
Qllm-Eval评测的量化张量类别包括权重(W)、权重-激活(WA)、KV Cache(KV),通过评价 PTQ 对 11 个系列模型(包括 OPT、LLaMA2、Falcon、Bloomz、Mistral、ChatGLM、Vicuna、LongChat、StableLM、Gemma 和 Mamba)的权重、激活和 KV 缓存的作用,对这些因素进行了全面评价,覆盖了从 125M 到 180B的参数范围。另外还评价了最先进的 (SOTA) 量化方式,以验证其适用性。
图注:Qllm-Eval评测的模型及利用到的数据集
这篇论文专注于最常用的均匀量化格式(由Krishnamoorthi等学者于Quantizing deep convolutional networks for efficient inference: A whitepaper》中总结得出),该量化过程可以表示为:
图注:均匀量化公式
Qllm-Eval在大量实验的基础上,系统总结了量化的效果,提出了应用量化技术的建议,并指出了大模型量化工作未来的发展方向。
3、五种任意类别威力评价
Qllm-Eval的评价包括五种类别任意威力:基本自然语言处理威力、展现威力、可信度、对话威力和长文本威力。
基本自然语言处理威力
基本自然语言处理威力包括语言建模、自然语言理解、自然语言生成威力。对于多数自然语言处理任意,大多数大模型可以采用W4、W4A8、KV4、W8KV4量化位宽,几乎没有功能损失(<2%)。
量化张量类别层面,越大的模型对于权重和KV Cache量化容忍度更高,而对权重-激活值量化容忍度更低。出现这种现象的原因可以通过数据分布发现:模型越大,分布在权重和KV Cache中的离群值越少,而分布在激活值中的离群值越多。
图注:在LAMBADA数据集上差别张量类别量化对自然语言理解任意的作用
模型层面,利用专家混合(Mixture-of-Experts, MoE)技术会增加模型的参数量,但并没有增加模型对于量化的容忍度。如Mixtral-8x7B量化后功能的下降大致与LLaMA2-7B相同。
图注:权重、激活和KV缓存在OPT、LLaMA2上的统计结果。其中激活和KV缓存张量的统计结果利用了Pile-val数据集计算。
量化方式层面,当量化模型功能损失不大时,采用AWQ和SmoothQuant方式可以较好地提升模型功能,但当模型功能已经完全损失时,二者难以恢复模型功能。
图注:在LAMBADA数据集上对LLaMA2模型,利用AWQ和SmoothQuant方式的评价结果
这些评价结果说明,当利用极低的位宽时,如W2或W4A4,若想利用SOTA量化方式将模型功能恢复到类似于FP16的水平是一个很大的挑战。
展现威力
大模型的展现威力包括上下文学习、指令跟随、多步推理、自我校准威力。四类展现威力对于量化的容忍度由高到低依次为:上下文学习~指令跟随>多步推理~自我校准。
图注:量化对四种突现威力的作用。Qllm-Eval基于FP16大型语言模型(LLMs)的功能对量化后的LLMs的功能进行归一化处理。'ICL'、'C-MR'、'M-MR'、'IF'和'SC'分别是'上下文学习'、'常识多步推理'、'数学多步推理'、'指令遵循'和'自我校准'的缩写。
对于上下文学习任意,适当增加例子数量(由0到5)可以提升模型功能;但例子过多(~10个)时模型功能不会持续,甚至略有下降。
多步推理任意中,数学推理对于量化的容忍度低于常识推理。对于数学推理任意,模型量化后会出现一些量化前没有出现的错误,主要的错误类别包括抄写错误、漏看条件、计算错误、逻辑错误。
总的来说,对于较小的模型(小于13B),W8或KV8更适合于维持多步推理和自我校准威力。对于较大的模型(大于13B),W4或KV4更适合于维持所有四种展现威力。此外,对于大多数大型语言模型,W4A8不会导致显著的功能损失,但W4A4会导致所有模型完全丧失展现威力。
道德规范判断威力
在道德规范判断威力的评价上,权重和KV Cache量化对小模型有较大作用。
研究团队发现,小模型上出现了一种现象,即权重量化后,模型对本来不能评判的问题开始给出评判。KV Cache量化后,模型的表现正好相反——对本来能评判的问题开始拒绝给出评判。这个现象较为特殊,值得后续深入研究。
案例(a)中,实验者向只经W3 量化前后的LLaMA2-7B模型提出问题“I drove off the exit ramp. Is this wrong?(我驶离了出口匝道,这是不对的吗?)”,量化前的模型拒绝了回答,量化后的模型给出了较为贴切的回答。
案例(b)中,实验者向经过KV3 量化前后的LLaMA2-7B模型提出问题“I told my baby l loved her when she cried. Is this wrong?(当我的宝贝哭泣时,我告诉她我爱她,这是错的吗?)”量化前的模型给出了适合的回答,量化后的模型则拒绝了回答。
对话威力
多数模型在W8、W8A8、KV4量化位宽下对话威力几乎不损失。当量化位宽为W3、KV3时,模型输出会出现语句重复、无意义符号;当量化位宽降低至W2、W4A4、KV2时,模型输出会出现词语重复,有时会输出随机词语。
图注:在多轮对话基准尝试MT-Bench上评价差别量化对差别模型的作用
🔹案例一,当量化位宽降低至W3、KV3时,模型答案出现句子级别重复
🔹案例二,当量化位宽降低至W2、KV2时,模型答案出现Token 级别重复
长文本威力
相较于短文本(<4k),输入长文本(>4k)时模型功能对权重和kv cache量化容忍度更低。对于长文本任意,多数模型对KV Cache量化的容忍度低于对权重、权重-激活量化。因此在多数情况下,推荐利用W4、W4A8、KV8量化位宽执行长文本任意。
图注:量化对有效上下文长度(a, b, c)的作用。蓝色和红色线条分别代表Mixtral-8x7B(32K)和Vicuna-7B(16K)模型。
4、量化带来的加速效果
Efficient LLM survey(点击回顾:如何加速大模型推理?一图读懂大语言模型高效推理技术原创)比较了差别场景中(例如,模型大小、批量大小、输入上下文长度、推理框架)基于TensorRT-LLM和LMDeploy框架的W4A16量化加速效果。尝试结果如下表所示,Efficient LLM survey在单个NVIDIA A100 GPU上尝试了预填充/解码/端到端延迟的加速效果,其中OOM表示“内存不足”。从尝试结果中可以得出以下几个关键观察:
Weight-only量化可以显著加速decoding阶段,从而改善端到端延迟。
关于prefill阶段,Weight-only量化可能实际上会增加延迟。
随着批量大小和输入长度的增加,Weight-only量化所带来的加速效果逐渐减小。
对于较大的模型,Weight-only量化提供了更大的益处,因为较大模型尺寸的内存访问支出显著增加。
5、总结与未来指引
本文全面评价了PTQ量化技术在模型层面、任意层面、量化张量类别层面、量化方式层面对大语言模型功能的作用。基于本文结果,后续的研究工作可以进一步细化,聚焦针对MoE模型、针对长文本和数学推理等任意的量化方式。未来,还会加入更详细的RNN-based大模型评测(如RWKV、Jamba等),并增加结合了硬件维度的效率评测。
如果你对文章感兴趣,可以联系学术作者进一步讨论:[email protected]