【文献阅读】LLMC: Benchmarking Large Language Model Quantization with a Versatile Compression Toolkit
北航
2024年10月

摘要
大语言模型(LLMs)的最新进展凭借其卓越的涌现能力和推理能力,正推动我们迈向通用人工智能。然而,大量的计算和内存需求限制了它们的广泛应用。量化作为一种关键的压缩技术,虽可能对准确性构成潜在风险,但能够通过压缩和加速大语言模型,有效缓解这些需求。
众多研究致力于将量化带来的准确性损失降至最低。然而,它们的量化配置各不相同,无法进行公平比较。在本文中,我们提出了LLMC,这是一个即插即用的压缩工具包,用于公平且系统地探究量化的影响。
LLMC集成了数十种算法、模型和硬件,提供了从整数到浮点量化、从大语言模型到视觉语言(VLM)模型、从固定比特到混合精度,以及从量化到稀疏化的高度可扩展性。借助这个多功能工具包,我们的基准测试涵盖了三个关键方面:校准数据、算法(三种策略)和数据格式,为进一步研究提供了新颖的见解和详细分析,并为用户提供了实用指导。我们的工具包可在https://github.com/ModelTC/llmc获取。
1 引言
最近,像GPT-4(OpenAI等人,2024年)这样的大语言模型在自然语言处理(NLP)领域展现出了前所未有的生成能力,并且得到了广泛应用。然而,其高昂的计算和存储成本阻碍了它们在用户中的进一步普及。例如,BLOOM(Touvron等人,2023年)是一个拥有1760亿参数的多语言大语言模型,以全精度(FP16)格式存储模型权重至少需要350GB的空间。更糟糕的是,它需要5块80GB的A100或9块40GB的A800英伟达GPU来进行推理。因此,降低大语言模型的服务成本对于进一步推动其应用至关重要。
针对上述挑战,模型量化(Nagel等人,2021年)可能是一个有效的解决方案。它将权重和 / 或激活映射到较低比特的数据格式,以减少内存占用并加速模型推理。现有的量化方法可分为两类:量化感知训练(QAT)(Bhalgat等人,2020年;Gong等人,2019年;Esser等人,2020年)和训练后量化(PTQ)(Wei等人,2023年a;Li等人,2021年)。尽管量化感知训练性能卓越,但它需要使用大量训练数据进行微调或重新训练,成本高昂,这使得大多数用户难以企及。相应地,训练后量化无需重新训练即可压缩模型,由于其对资源的需求极小,成为大语言模型的首选方法。因此,本文中我们未提及一些量化感知训练方法(Du等人,2024年;Liu等人,2024年,2023年b;Egiazarian等人,2024年)。
然而,当前的训练后量化方法总是在不同的量化配置下,通过模拟量化在不同的数据集上进行评估。例如,AWQ(Lin等人,2023年)使用Pile(val)(Gao等人,2020年a)作为校准数据,而GPTQ(Frantar等人,2022年)使用的是C4(Raffel等人,2019年)。这种情况会导致对大语言模型高效且准确量化配置的评估不准确。
校准数据是在模型量化过程中用于调整和优化量化参数的数据。在大语言模型量化里,校准数据对确定模型量化参数、提升模型性能和确保量化准确性极为关键。
- 确定量化参数:量化将模型的权重和 / 或激活映射到较低比特的数据格式,而校准数据是这个过程的重要依据。以均匀量化为例,需确定缩放因子(scale)和零点(zero - point)等参数 ,校准数据能为这些参数的确定提供参考,让量化过程更贴合模型特性。如在一些量化算法中,通过分析校准数据的分布特征,找到合适的缩放因子,使量化后的数值能较好地保留原始数据的信息,减少量化误差。
- 提升模型性能:合适的校准数据可提升量化后模型的性能。研究发现,校准数据与测试数据的标记分布一致性对模型性能影响重大。当校准数据的标记分布与测试数据更匹配时,模型性能更优。如使用 WikiText2 校准数据对 LLaMA - 2 - 7B 进行 GPTQ 量化,相比用 Pile(val)校准数据,在 WikiText2 测试数据上的困惑度降低了 0.2。这表明选择与测试数据分布一致的校准数据,能让模型在测试时表现更好。
- 确保量化准确性:校准数据能有效避免因量化导致的模型准确性大幅下降。在实际应用中,若校准数据选择不当,会使量化配置评估不准确,影响模型性能。像不同量化方法使用不同校准数据,会干扰对量化配置效果的准确判断。而合适的校准数据可减少这种干扰,保证量化后的模型在保持低比特数据格式的同时,尽可能维持较高的准确性。
为了给用户提供全面的选择菜单,并为进一步研究提供有见地的方向,我们进行了一项公平的基准测试,该测试考虑了三个关键维度,即校准数据、算法和数据格式。首先,我们系统地探究校准数据对提高模型性能的影响。然后,我们旨在研究三种主要算法策略(变换、剪裁和重建)的有效性及其潜在机制。
最后,我们探索如何在整数和浮点量化之间进行选择,以进一步提高准确性。上述所有研究都得益于我们的LLMC,这是一个用户友好、即插即用的大语言模型压缩工具包。如图1所示,这个工具包具有几个独特的特点,为用户提供了选择最适合自身需求选项的自由。
简而言之,我们的主要贡献如下:
- 我们发布了一个多功能的大语言模型压缩工具包LLMC,它支持数十种算法、模型和多个推理后端,具有强大的扩展性和全面的评估功能。它还使用户能够仅用一个GPU对具有1000亿参数的大语言模型进行压缩,极大地促进了大语言模型量化的应用。
- 我们从校准数据、算法和数据格式三个方面,对大语言模型量化进行了模块化且公平的基准测试。通过详细的观察和分析,我们针对不同配置下的性能和方法改进,提供了各类新颖的观点。
- 借助我们强大的工具包和全面的见解,未来的大语言模型研究人员能够为他们的应用高效集成合适的算法和低比特格式,从而实现大语言模型压缩的普及化。
图一:我们的LLM压缩工具包LLMC概述,它集成了多种算法,超低成本量化,多个后端支持和高扩展性。更多功能正在开发中。
2 LLMC:一个多功能的大语言模型压缩工具包
首先,我们开发了一个名为LLMC的综合性大语言模型压缩工具包,其主要特点如下,这些特点也在图1中展示。
支持多种算法:LLMC支持广泛的量化算法,包括16种不同的方法,涵盖仅权重量化、权重-激活量化和混合精度量化。这种多样性使得能够对不同方法进行公平比较和深入分析。
超低成本量化:我们的工具包旨在实现资源高效利用,能够在最低硬件要求下运行大型模型。得益于我们带有卸载技术的流水线,仅需一个40G的A100即可校准和评估OPT-175B(Zhang等人,2022年),其权重占用约350GB。
多后端兼容性:基于LLMC构建,各种量化设置和模型格式与多个后端和硬件平台兼容,如LightLLM(ModelTC,2023年)、TRT-LLM(Nvidia,2023年)、PPL-LLM(OpenPPL,2023年)、vLLM(Kwon等人,2023年)、MLC-TVM(团队,2023年)和llama.cpp(llama.cpp团队,2023年),使其具有高度的通用性。
高扩展性:该工具包具有高度的模块化和可扩展性,允许轻松从整数量化扩展到浮点量化、从大语言模型扩展到视觉语言模型(Zhang等人,2024年)、从量化扩展到稀疏化,以及从密集模型扩展到专家混合(MoE)模型(Shazeer等人,2017年)。这种模块化确保用户可以扩展和定制该工具包以满足他们的需求。
全面评估:LLMC能够对量化模型进行全面评估,提供详细的性能指标和分析,如困惑度(PPL)(Alon和Kamfonas,2023年),以及数据可视化分析,如峰度值、量化误差和异常值分布。这种全面的评估能力确保用户可以就最适合其模型的量化策略做出明智的决策。
3 大语言模型量化基准测试
借助LLMC工具包,我们从三个不同的角度探索大语言模型的量化:3.2小节中的校准数据、3.3小节中的算法,以及3.4小节中的量化数据格式。更多探索内容,如LLMC的可扩展性、KV缓存量化和推理速度,可在附录中找到。
3.1 实验设置
我们首先介绍如下实验设置。关于量化初步的更多实现细节可在附录中找到。
模型
为了展示我们基准测试的通用性,我们评估了LLaMA2(Touvron等人,2023年)和LLaMA-3(AI@Meta,2024年)系列模型在一般语言任务上的性能,模型规模从70亿到700亿不等。
为了拓宽评估范围,我们在附录中展示了更多结果,包括具有长上下文能力的ChatGLM(Zeng等人,2023年)、用于多模态任务的LLaVA-1.5(Liu等人,2023年a),以及作为专家混合模型代表的Mixtral(Jiang等人,2024年)。
数据集
我们将评估数据集分为上游和下游数据集。对于上游数据集,我们使用WikiText2(Foundation)和C4(Raffel等人,2019年)数据集,并采用困惑度指标进行评估,因为困惑度可以稳定地反映大语言模型的性能(Dettmers和Zettlemoyer,2023年)。
对于下游任务,我们选择了包括MMLU(Hendrycks等人,2021年)、ARCe(Clark等人,2018年)、BoolQ(Clark等人,2019年)、HellaSwag(Zellers等人,2019年)、PIQA(Bisk等人,2020年)、GPQA(Rein等人,2023年)、MBPP(Austin等人,2021年)、Human-Eval(Chen等人,2021年a)、用于长上下文评估的LongBench(Bai等人,2023年),以及用于多模态评估的MME(Fu等人,2023年)等测试任务。
对于校准数据,为确保公平比较,绝大多数实验使用Pile(Gao等人,2020年b)验证集的相同子集。我们使用相同数量的128个校准数据样本和相同的512序列长度。我们还发现,校准数据的不同预处理方法会显著影响量化准确性。因此,我们使用与我们开源代码中相同的预处理方法。
3.2 校准数据的影响
在公平的实验设置下,我们首先探究校准数据对量化准确性的影响。先前的研究(Li等人,2023年;Liu等人,2023年b)强调了不同校准数据集对量化模型性能的显著影响。然而,缺乏对关键因素的系统分析。为了解决这个问题,我们确定并提出了两个关键方面,以指导未来校准数据的选择。
标记分布一致性
先前的研究(Cai等人,2020年;Zhang等人,2021年)专注于合成更好的分布匹配校准图像,以实现视觉模型的更高性能。受此启发,我们首次研究了校准数据和测试数据之间的标记分布关系对模型性能的影响。
如表1和图2所示,我们发现用与测试集标记分布更匹配的数据进行校准的模型,其性能往往更优。例如,使用WikiText2校准数据(\(D_{KL}\)值低1.97)在WikiText2测试数据上进行GPTQ量化时,比使用Pile(val)校准数据的模型,困惑度降低了0.2。这一发现表明,在实际应用中,选择与数据分布一致的校准数据非常重要。
句内逻辑
与使用图像校准数据的视觉模型不同,大语言模型的校准数据由按顺序排列的标记序列组成,这些序列体现了逻辑意义。因此,我们也进行了实验,以探索这种逻辑对大语言模型量化的影响。
从表1中的数据索引可以看出,破坏校准数据中的逻辑会导致不可忽视的准确性下降。值得注意的是,在这种情况下,基于学习 / 重建的算法(如GPTQ和OmniQuant)的鲁棒性低于非学习方法。
具体而言,与AWQ相比,它们的困惑度都增加了3.3倍。总体而言,人们不应寻求或生成不合逻辑的语料库来校准大语言模型。
图2:校准 / 测试数据集的标记分布。y轴表示频率,x轴表示标记ID,“\(D_{KL}\)”计算校准数据与特定测试数据(WikiText2)之间的KL散度。
表1:校准数据对不同算法性能的影响。我们评估了WikiText2测试数据的困惑度,采用w3a16g128的GPTQ(Frantar等人,2022年)和AWQ(Lin等人,2023年),以及w6a6的OmniQuant(Shao等人,2023年)对LLaMA-2-7B进行量化。数据索引显示了在每个数据条目中随机打乱标记顺序后的结果差异。
3.3 深入研究量化算法
除了校准数据,我们还可以借助LLMC系统地探索和对大语言模型量化算法进行基准测试。该领域的三种主要技术是异常值变换、权重剪裁和权重重建。然而,在不同场景下它们如何发挥作用以及效果如何,仍不明确,因为现有研究缺乏公平的比较。因此,我们将在本节分别讨论这些方法。
3.3.1 变换如何影响激活和权重异常值?
现有的大多数工作旨在通过不同类型的等价变换来减少异常值\(^{2}\),这些变换可分为基于缩放的变换,如AWQ(Lin等人,2023年)、SmoothQuant(Xiao等人,2023年)、OS +(Wei等人,2023年b)和OmniQuant(Shao等人,2023年),以及基于旋转的变换,例如QuaRot(Ashkboos等人,2024年)。
基于缩放的变换通常涉及搜索或学习一个缩放向量,通过优化层的量化误差,将激活异常值转换为权重。相反,基于旋转的变换使用正交矩阵,而不考虑输出误差。为了全面研究它们的效果,我们分析了变换后各层的峰度值\(^{3}\),以深入了解其内在机制。
图3:在w6a6量化下,不同方法对各种层类型的权重(左)和输入激活(右)的峰度值(Kurtosis)。图例表示量化方法及其在WikiText2上相应的困惑度。为了公平比较,我们未对下投影层应用变换,因为只有默认的AWQ和QuaRot包含此位置。彩色数值表示所有基于缩放的方法在下投影层使用变换,以及QuaRot使用在线变换后峰度值\(K\)的变化。需要注意的是,我们仅标记所有情况下大于0.2的数值。
表2:w3a16g128的LLaMA-3-8B在WikiText2上,基于缩放的变换方法AWQ和基于旋转的变换方法QuaRot的峰度值\(K\)和困惑度PPL的比较。由于QuaRot忽略了优化输出量化误差(灰色单元格中的余弦相似度),即使异常值问题较少,也会导致更高的困惑度。
从图3和表2中,我们观察到三个不同的发现。
1)与全精度相比,基于缩放的变换方法在降低激活峰度值的同时,会增加权重的峰度值,这可能会导致低比特权重量化时出现不可忽视的性能下降,即使使用高比特激活也无法消除这种风险(表3中\(w6a6 > w4a8\))。
2)某些特定位置(如下投影层)的峰度值明显高于其他位置。这些位置对准确性有显著影响。例如,当下投影层进行变换(图3中峰度值明显降低)时,如表3所示,会获得显著的性能提升。
3)尽管基于旋转的变换通过直接优化张量的异常值来减少异常值,但在某些情况下可能无法实现明显的准确性提升。从表2中可以明显看出,输出张量的量化误差并未最小化,因为优化并未专注于降低输出误差,从而导致更高的困惑度。
表3:LLaMA-3-8B在WikiText2上,不同变换方法在下投影层是否变换情况下的困惑度PPL。灰色行表示下投影层进行变换时的结果。
3.3.2 我们何时应该使用权重剪裁?
权重剪裁技术,即在量化前限制权重值的范围,已被公认为对维持量化过程中的更好性能有贡献(Lin等人,2023年;Du等人,2024年;Shao等人,2023年)。在此,我们分析其在两种不同场景下的应用情况。
图4:不对称和对称权重剪裁与不对称 / 对称量化的比较。权重剪裁后,我们得到要量化的张量的最终范围如与不对称/对称量化相关的实心灰色框中所示。
对称或不对称
剪裁和量化可分为对称或不对称两类。然而,先前的研究(Lin等人,2023年;Liu等人,2024年)常常忽略它们之间的关系,并采用错误的模式。
如图4所示,我们可以观察到,对称剪裁与对称量化(?)相结合,比与不对称量化相结合能保留更多信息(即实心灰色框所示),而对于不对称剪裁则反之亦然。这一发现有助于改进当前方法,显著恢复准确性,特别是在极低比特宽度的情况下。
例如,在表4中,默认的AWQ采用对称剪裁和不对称量化,对于2比特的LLaMA-2-70B,困惑度得分为6.8e4,与3比特配置相比,性能下降了48.11%。相反,在LLMC中采用不对称剪裁的AWQ,在可接受的困惑度下,准确率提升了42.47%。
对称量化是量化操作中的一种类型,与不对称量化相对,二者在零值表示、数据映射方式等方面存在差异。在大语言模型量化场景下,对称量化不引入额外零值点调整数据范围,量化映射相对简单直接;不对称量化则通过零值点来灵活适配数据范围。
- 对称量化定义:对称量化是量化过程中不引入零值点(zero-point)来调整数据范围的量化方式。在这种量化模式下,量化范围以零点为中心对称分布。比如,给定 t 比特的量化,其量化区间通常是\([-2^{t - 1}, 2^{t - 1} - 1]\) ,像常见的 8 比特对称量化,其量化范围就是\([-128, 127]\)。这种量化方式的优点是计算相对简单,不需要额外存储零值点信息,但缺点是在处理数据范围不对称的情况时,可能无法充分利用量化区间,导致信息损失。
- 不对称量化:不对称量化通常会引入零值点 z 来表示浮点零,通过调整零值点,可以让量化范围更好地适配数据的实际分布。以激活值量化为例,如果激活值的分布并非以零为中心对称,不对称量化可以通过设置合适的零值点,使得量化后的数值能更准确地反映原始数据的特征,减少量化误差。而对称量化在处理这类数据时,由于缺乏零值点的调整,可能会导致部分数据被错误映射,从而损失信息。在实际应用中,当数据分布较为对称时,对称量化能发挥其计算简单的优势;当数据分布不对称时,不对称量化则更具优势。
- 对模型量化的影响:在大语言模型量化中,对称量化和不对称量化的选择对模型性能有显著影响。文中研究发现,对称剪裁与对称量化相结合,在某些情况下能保留更多信息。例如,对于特定的量化配置,对称剪裁与对称量化的组合,相比与不对称量化的组合,能让模型在保持一定性能的同时,更有效地利用量化资源。但在其他情况下,如处理具有明显不对称特征的数据时,不对称剪裁和不对称量化的组合可能会更合适。所以,在实际进行模型量化时,需要根据数据的分布特点和模型的具体需求,合理选择对称量化或不对称量化方式,以优化模型性能 。
比特宽度
除了不同的量化和剪裁组合,我们还研究了不同比特宽度下剪裁的影响。从表5中可以看出,权重剪裁并非在所有比特宽度下都具有优势。
1)对于较高比特(4比特)的仅权重量化,剪裁会产生副作用,而在较低比特(3比特)时则有改进作用。我们假设在4比特量化中,权重剪裁导致的信息损失比量化舍入更大。然而,在3比特量化中,量化舍入的影响更大。
2)对于权重-激活量化,无论比特宽度如何,合适的剪裁都具有积极效果。我们将此归因于剪裁异常值有效地调整了大多数权重(即中等和小元素)。考虑到经过硬量化且影响较大的激活,这种方法显著减少了量化后的大激活与调整后的权重相乘所导致的输出误差,从而大大降低了这些量化激活的影响。
表4:不对称/对称权重剪裁的影响。我们在此评估平均准确率和平均困惑度PPL。“asym. clip”表示我们采用不对称剪裁。
3.3.3 我们应该结合变换和重建吗?
除了变换和剪裁,像GPTQ(Frantar等人,2022)这样基于重建的方法也广泛用于权重量化。该方法迭代更新未量化的权重,以补偿当前量化权重的影响,从而最小化输出量化误差。一些近期的变换方法(Ashkboos等人,2024;Lin等人,2023)集成了这项技术以展示其可扩展性。
然而,我们发现这种组合并不总能带来显著的精度提升。从表6中,我们得出以下结论:
1)像AWQ w/ GPTQ这样基于缩放的变换,对LLaMA-3-8B有适度的性能提升。
2)然而,基于旋转的方法QuaRot w/ GPTQ的表现远超单独使用QuaRot,在3比特的LLaMA-3-8B上甚至有28.94%的准确率提升。
内在原因可能有两个方面:
1)基于缩放的变换方法可能会放大权重异常值 7。这给重建过程中的迭代补偿带来了更大的挑战,尤其是GPTQ难以处理的后几列权重 8。然而,能有效消除权重异常值的QuaRot与GPTQ配合良好。从图5中可以看出,与QuaRot w/ GPTQ相比,AWQ w/ GPTQ后面权重列的量化误差更陡峭,这验证了我们的分析。
2)基于旋转的变换仅旨在减少张量异常值,而不考虑输出误差,因此峰度值显著降低。然而,对于仅权重量化,激活中的异常值可能会放大量化权重中的误差 9,导致明显的输出差异。GPTQ通过近似海森矩阵考虑了输出误差,因此总能补充基于旋转的变换。如表7所示,QuaRot w/ GPTQ在相应层的输出与其量化后的输出之间实现了更高的余弦相似度,这有助于证实我们的分析。
表6:在w3a16g128的LLaMA-3-8B上,重建(GPTQ)与基于缩放(AWQ)和基于旋转(QuaRot)的变换相结合的影响。
图5:w3a16g128的LLaMA-3-8B中,第一个块的q_proj权重的相对量化误差可视化。\(\widehat{W}\)表示权重\(w\)的量化对应项。
表7:在w3a16g128的LLaMA-3-8B上,QuaRot和QuaRot w/ GPTQ的细粒度分析比较。我们报告原始层和量化层输出之间的余弦相似度。
3.4 整数还是浮点量化?
上述算法基于整数量化(INT)。尽管传统的整数量化在行业中已被广泛采用,但浮点量化(FP)已成为一种新兴的替代方案。这归因于其卓越的准确性和高灵活性,在处理长尾分布方面具有优势。
表8:LLaMA-2-7B在WikiText2上,仅权重量化和权重-激活整数量化(灰色行)/浮点量化(白色行)的困惑度PPL。Naive表示简单的四舍五入量化。
表8报告了大语言模型的详细浮点量化结果。对于权重-激活量化,浮点量化在很大程度上始终优于整数量化,因为它能更好地处理异常值问题。值得注意的是,在w4a4的情况下,整数量化会出现明显的性能下降,而浮点量化则提升到了可用水平。
相反,在应用仅权重量化时,在超低比特(\(\leq\)3比特)或小组大小的情况下,浮点量化的性能更差。这些发现表明:
1)FP格式中的正零和负零限制了这种量化类型的表示能力,特别是在低比特情况下。
2)小组大小的范围更均匀,不适合浮点量化。
3)对称的浮点量化难以处理大语言模型中的不对称性。
4 额外结果与讨论
量化对微调的影响
我们对在Evol instruction-66k 10上进行监督微调(SFT)的LLaMA-3-8B进行量化实验,以分析其影响。我们选择ms-swift(Zhao等人,2024)作为微调框架。此外,我们将学习率设置为2e-6,小批量大小设置为2,并在16个40G A800 GPU上对模型训练1个epoch。微调后,我们使用w4a16的Naive量化和AWQ对模型进行量化。我们选择HumanEval(Chen等人,2021b)和HumanEvalX(Zheng等人,2023)进行评估。如表9所示,与基础模型相比,量化导致微调模型的准确率下降更严重。这可能是由于微调数据有限,未来需要进行更深入的分析。此外,对于微调模型,像AWQ这样的先进算法与Naive量化相比,带来了明显的性能提升。
表9:量化后基础模型/微调模型的准确率。“Base”表示LLaMA-3-8B。我们报告了HumanEval-X中5种语言的平均准确率。
校准数据对视觉语言模型的影响
除了大语言模型,我们在此进一步展示校准数据对LLaVA-7B(Liu等人,2023a)的影响。表10中的结果表明,对于视觉语言模型的量化,我们应该同时收集文本和视觉数据。
表10:校准数据对视觉语言模型的影响。我们采用w4a16的AWQ。“T&V”表示MS-COCO(Lin等人,2014)和TextVQA(Singh等人,2019)。
与现有方法的准确性对齐
除了附录A.3小节中的困惑度对齐结果,我们还对LLaMA-2-7B进行了下游实验,以证明我们的可重复性(实验细节见附录)。如表11和表12所示,我们的LLMC在重现现有量化方法的结果方面是可靠的。
表11:仅权重量化的对齐结果。“LLMC”表示使用我们的工具包LLMC重现的结果。
表12:权重-激活量化的对齐结果。
模型规模的作用
除了LLaMA-2和LLaMA-3系列,我们还在附录A.8小节中对不同的大语言模型系列进行了量化实验,如SmolLM-135M/350M/1.7B 11、MiniCPM-1B/2B(Hu等人,2024)和Qwen-20.5B/1.5B(Yang等人,2024)。
我们发现,低比特量化对更大规模的同源模型会导致更严重的性能下降。这种现象与直觉相反,需要进一步探索。
此外,更高精度的量化,如w8a8或w4a16,会导致所有规模的大语言模型出现轻微的准确率下降。未来我们将探索模型规模对更大的大语言模型的作用。
LLMC的流程
基本上,我们的LLMC接收一个FP格式的大语言模型,并使用先进算法计算其量化参数。最后,这个工具可以将带有量化参数的模型导出为与特定后端(如vLLM(Kwon等人,2023))兼容的量化格式。详细的使用方法可以在官方文档 12中找到。此外,LLMC可以为那些量化后的大语言模型提供量化分析和困惑度评估。借助这个工具,人们可以生成各种部署在不同硬件上的压缩工业模型 13。
5 结论
本文介绍了LLMC,这是一个用户友好且多功能的大语言模型压缩工具包。在该工具包的支持下,我们进行了一系列观察和分析,为社区提供了有价值的新颖见解和建议。
附录
A.1 量化初步
一个完整的均匀量化过程可以用以下公式表示: \(\overline{w} = clip\left(\left\lfloor\frac{w}{s}\right\rceil + z, N_{min}, N_{max}\right)\) \(\hat{w} = s \cdot (\overline{w} - z)\) 其中,\(s \in \mathbb{R}_{+}\)和\(z \in \mathbb{Z}\)分别称为缩放因子和零点。
\(\lfloor\cdot\rceil\)将连续数字四舍五入到最接近的整数。公式(1)首先将权重或激活量化到目标整数范围\([N_{min}, N_{max}]\),然后将整数反量化回原始范围。
朴素量化可以分为四个维度:比特宽度、对称 / 不对称、分组大小和动态 / 静态。
- 比特宽度:给定t比特,\([N_{min}, N_{max}]\)由\([-2^{t - 1}, 2^{t - 1} - 1]\)确定。在本文中,“wxay” 用于表示权重 “w” 和激活 “a” 的比特宽度;
- 对称或不对称:对于不对称量化,通常会引入一个零点值z来表示浮点零。否则,对称量化没有可调节的z来适应各种范围;
- 分组大小:Shen 等人(2020 年)首次提出分组量化,它将权重的每个通道\(^{14}\)划分为不同的组,并为每个组\(W_{i, j:j + g}\)(组大小为g)采用不同的缩放因子和零点集。然而,张量级(\((W_{:,:})\))量化或通道级(\((W_{i,:})\))量化也可以看作是具有更大分组大小的分组量化;
- 动态或静态:由于大语言模型中激活范围的差异,Yao 等人(2022 年)首次引入了针对激活的令牌级(\((X_{i,:})\))量化,它在模型推理期间为每个令牌动态计算最小 / 最大范围。我们还测量动态 / 静态张量级激活量化,以进行全面比较。
表 13:正文中三种主要策略的详细比较。“Eq. Trans.” 表示该算法是否为等价变换。\(\gamma\)是缩放因子。s和Q分别表示变换向量和矩阵。I是单位矩阵。L是损失函数,学习率为\(\eta\)。\(\alpha\)和\(\beta\)表示剪裁的最小值和最大值。H是海森矩阵,E表示用H计算的量化误差。\(\lambda\)是衰减系数。
如表 13 所示,我们还总结了正文中的三种策略,即变换、剪裁和重建,并定义了它们的行为。此外,对于等价变换类别 OS + 和 OmniQuant,考虑到我们使用的是 LLaMA 系列模型(其某些层没有偏置),我们旨在避免在模型的推理过程中引入额外的计算。因此,我们决定不探索这两种方法中涉及的移位操作。
A.2 更多实现细节
除非另有说明,我们的实现对激活和权重都采用不对称量化。具体来说,我们对激活应用每个令牌的动态量化,对权重应用静态量化。
g128和g64代表组权重量化中两种常用的设置,分别表示分组大小为 128 和 64。与先前的工作 Shao 等人(2023 年)、Liu 等人(2024 年)、Ashkboos 等人(2024 年)一致,对于 OmniQuant,在重建阶段,权重剪裁和变换的学习率分别为\(5e^{-3}\)和\(1e^{-2}\)。
我们遵循默认的 20 个学习轮次的设置。此外,我们使用评估工具 OpenCompass(Contributors,2023 年),并以 LightLLM(ModelTC,2023 年)为后端,在英伟达 A100 80G GPU 上对下游任务进行基准测试。另外,我们在自己的 LLMC 中使用 2048 的序列长度评估困惑度。
A.3 与现有方法的困惑度对齐
在本节中,我们对几种已有的量化算法进行了对齐实验(LLMC 与原始论文 / 代码对比)。我们的实验设置与原始论文或其开源代码的默认设置相同(如表 14 所示)。
这些实验结果总结在表 15、表 16、表 17 和表 18 中。表中的性能数据表明,我们的 LLMC 工具实现的性能与文献中报道的原始量化算法几乎相同。
通过这些实验,我们证明了我们的工具不仅有效,而且在重现现有量化方法的结果方面是可靠的。这确保了我们的贡献对大语言模型量化的持续研究既可信又有价值。
表 14:我们对齐实验中的校准和超参数设置。
表 15:LLaMA - 2 - 7B 模型仅权不对称量化在 WikiText2 上的困惑度对齐结果。“- LLMC” 表示我们使用 LLMC 工具包的实现。
表 16:LLaMA - 2 - 7B 模型权重 - 激活不对称量化在 WikiText2 上的困惑度对齐结果。
表 17:LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型在 Wanda(Sun 等人,2024 年)提出的 50% 非结构化稀疏化方法下,在 WikiText2 上的困惑度对齐结果。
表 18:LLaMA - 2 - 7B 模型权重 - 激活对称量化在 WikiText2 上的困惑度对齐结果。
A.4 KV 缓存量化
这部分展示了代码生成任务中 KV 缓存量化的准确性。从表 19 中可以发现,朴素的 int8 和 int4 KV 缓存量化在 Human - Eval 和 MBPP 数据集上几乎不会导致准确性下降。
这一结论证明,朴素的 4 比特 KV 缓存可以在不损害性能的情况下采用。然而,朴素的 2 比特 KV 缓存会导致生成崩溃,因此不应采用。在表 23 的长上下文评估中也可以发现类似的结果。
表 19:LLAMA - 2 系列模型在 Human - Eval 和 MBPP 上的朴素 KV 缓存量化结果。我们在此采用分组量化(即g8)。
A.5 LLMC 的可扩展性
为了进一步展示该工具包的可扩展性,我们进行了广泛的实验,包括专家混合模型(MoE)量化(如表 20 所示)、视觉语言模型(VLM)量化(如表 21 所示)和稀疏化(如表 24 所示)。
- 专家混合模型量化:我们使用我们的工具包评估量化后的 Mixtral - 8x7B 的性能,如表 20 所示。
- 视觉语言模型量化:对于视觉语言模型量化,我们的工具包在感知和认知任务上评估了量化后的 LLaVA - 7B,如表 21 所示。
- 稀疏化:表 24 展示了使用 Wanda(Sun 等人,2023 年)稀疏化方法对 LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型得到的结果。
- 混合精度:表 22 展示了 LLaMA - 2 - 7B 和 LLaMA - 3 - 8B 仅权重混合精度的结果。混合精度是减少量化误差的有效方法。除了特定的算法,LLMC 还支持自定义层的比特分配。我们发现,对 down_proj 层采用 5 比特到 8 比特的精度提供的效果几乎相同。
表 20:Mixtral - 8x7B 仅权重量化和权重 - 激活量化的消融实验结果。
表 21:LLaVA - 7B 仅权重量化和权重 - 激活量化的消融实验结果。
表 22:使用 AWQ 在 WikiText2 上进行混合精度的困惑度结果。我们仅对 down_proj 应用更高的比特分配,因为它对正文中提到的性能有很大影响。
A.6 推理速度
为了评估不同量化方法的实际效果,我们使用英伟达的云(SMX 80G A100)和边缘(Drive Orin)GPU,以及官方推理库 TensorRT - LLM(Nvidia,2023 年)进行了评估\(^{15}\)。如图 9 所示,我们的部分结果突出了具有 32,000 个输入令牌和 512 个输出令牌的模型在吞吐量上的改进。研究结果表明,8 比特权重和激活的量化使预填充阶段的速度提高了 20% - 30%,解码阶段的速度提高了 40% - 60%。相比之下,4 比特仅权重量化使预填充速度降低了 10%,但使解码速度提高了 40% - 60%。需要注意的是,这些加速率在较大模型上往往会降低。此外,8 比特 KV 缓存量化对预填充时间的影响最小,并且对于非常大的模型(如 700 亿参数的模型),会略微降低解码吞吐量。图 7 和图 8 补充展示了各种量化方案在 1K 和 4K 输入上下文长度下带来的加速效果。我们还发现,这两种情况下的结论与 32K 输入上下文长度的情况相同。此外,图 6 展示了 Drive Orin 边缘 GPU 上的加速情况。可以看出,在这种设置下,仅权重量化也有助于预填充,这与云 GPU 的情况不同。
图 6:在边缘 GPU(Drive Orin)上量化的吞吐量比较(令牌 / 秒)。
图 7:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:1024,输出序列长度:512)。
图 8:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:4096,输出序列长度:512)。
图 9:7B、13B 和 70B 的 LLaMA - 2 模型在英伟达 A100 GPU 上的推理速度(输入序列长度:32K,输出序列长度:512)。
A.7 详细的准确率和困惑度
本节展示了正文中一些实验的详细数据。表 25 和表 26 展示了表 4 的详细数据。表 27 展示了表 6 的详细数据。
A.8 不同模型系列的结果
从表 28 到表 34,我们报告了不同模型系列的量化结果,包括 SmolLM\(^{16}\)、MiniCPM(Hu 等人,2024 年)和 Qwen2(Yang 等人,2024 年)。
我们还提供了在 SIQA(Sap 等人,2019 年)、ARC - c(Clark 等人,2018 年)、OBQA(Luo 等人,2021 年)和 WinoGrande(Sakaguchi 等人,2019 年)上的结果。
表 23:来自 LongBench(Bai 等人,2023 年)的单文档问答任务中 KV 缓存量化结果。
表 24:LLaMA - 2 - 7B、70B 和 LLaMA - 3 系列模型在 Wanda 方法下的困惑度结果。
表 25:LLaMA - 2 - 7B 模型不对称 / 对称权重剪裁的结果。
表 26:LLaMA - 2 - 70B 模型不对称 / 对称权重剪裁的结果。
表 27:在 LLaMA - 3 - 8B 模型上,重建(GPTQ)与基于缩放(AWQ)和基于旋转(QuaRot)的变换相结合的结果。此处取消了 AWQ 的剪裁以排除干扰。
表 28:SmolLM - 135M 模型的量化结果。为了公平比较,取消了 QuaRot 中的激活剪裁和在线旋转。“HellaS.” 和 “WinoG.” 分别代表 HellaSwag 和 WinoGrande。我们用粗体标记最佳结果。
表 29:SmolLM - 350M 模型的量化结果。
表 30:SmolLM - 1.7B 模型的量化结果。
表 31:MiniCPM - 1B 模型的量化结果。
表 32:MiniCPM - 2B 模型的量化结果。
表 33:Qwen2 - 0.5B 模型的量化结果。
表 34:Qwen2 - 1.5B 模型的量化结果。