基于Transformer的大型语言模型取得了巨大成功。然而,在推理过程中产生的显著内存和计算成本,使得在资源受限的设备上部署大型模型变得具有挑战性。在本文中,我们从算法角度调查了大型语言模型的压缩和高效推理方法。就分类而言,类似于较小的模型,大型语言模型的压缩和加速算法仍可以分为量化、剪枝、蒸馏、紧凑架构设计、动态网络。然而,与较小模型相比,大型语言模型有两个突出的特点:(1)大多数压缩算法在压缩后需要进行微调甚至重新训练模型。大型模型最显著的方面是与模型微调或训练相关的非常高成本。因此,许多针对大型模型的算法,如量化和剪枝,开始探索无需调整的算法。(2)大型模型强调的是通用性和泛化能力,而不是在单一任务上的性能。因此,许多算法,如知识蒸馏,关注于如何在压缩后保持其通用性和泛化能力。由于这两个特点在早期的大型模型中并不十分明显,我们进一步将大型语言模型区分为中等模型和“真正”的大型模型。此外,我们还提供了一些成熟框架的介绍,这些框架可以支持大型模型的高效推理,支持基本的压缩或加速算法,极大地便利了用户的模型部署。
大型语言模型(LLMs)已成为人工智能领域中一个重要且受欢迎的话题。与以往的语言模型相比,LLMs(例如ChatGPT、LLaMA、Claude)对未见数据显示出了更强的泛化能力。此外,它们甚至展现出了较小模型所不具备的能力(即,突现能力),如多步骤推理和指令跟随能力。这些进展展示了LLMs的巨大潜力。然而,在推理过程中的高昂内存和计算预算也阻碍了LLMs的部署。例如,一个带有float32权重的10B模型消耗37GB内存,更不用说随着序列长度增加,推理内存成本会以平方速度进一步增加。为了在资源受限的设备上,甚至是移动设备上部署模型,许多LLMs采用模型压缩方法,如量化,以减少推理内存和计算成本。深度学习模型的模型压缩是一个比LLMs出现得早得多的领域。它假设我们已经有了一个预定义的(甚至是预训练的)模型。模型压缩致力于减少模型在推理过程中的内存和计算成本,以便模型可以在各种资源受限的设备上运行。从算法上讲,常见的模型压缩方法包括:
许多之前的模型压缩方法经常需要在压缩后对模型进行微调。然而,由于微调LLMs的巨大预算,研究人员不得不探索免微调或至少更高效的微调方法。
与处理单一任务(如神经机器翻译)不同,大型语言模型强调跨各种任务和未见数据的通用性和泛化能力,甚至是突现能力。因此,压缩后的大型语言模型需要更仔细地验证其通用性和泛化能力。 面对这些挑战,提出了许多专门针对LLMs的压缩方法。在本文中,我们将对这些方法进行全面综述。为了更好地展示这些方法,我们进一步将参数约为十亿或更少的语言模型,如BERT、GPT2,称为中等模型,尽管它们通常被视为大型语言模型。参数超过十亿的模型,如LLaMA、Claude、ChatGPT等,保持大型语言模型的名称。原因是中等模型受上述两个挑战的影响较小,即中等模型相对容易进行微调,展示较少的突现能力。结果,许多针对中等模型的压缩方法仍与较小模型的方法相似。 以下各节的组织如下:第2节将介绍一些初步知识。然后,我们将在第3、4、5、6、7、8节分别讨论剪枝、知识蒸馏、量化、紧凑架构设计和动态网络。
量化
量化是指将输入值(在一个大的(通常是连续的)集合中)映射到输出值(在一个小的(通常是有限的)集合中)的过程(例如,见图2)。量化是减少内存成本和提高LLMs推理速度的最直接方法,特别是在支持低位数据类型(如INT4)快速操作的硬件上。值得注意的是,量化在神经网络训练和推理中都取得了令人印象深刻的成功,而本综述的焦点仅在推理部分。量化方法相比其他压缩方法(如剪枝和蒸馏)有几个优势。1)高压缩比:将LLMs中的权重从32位浮点数量化为4位整数,可以将模型大小大幅压缩至大约1/8,这对于内存受限的过程(如LLMs推理)至关重要。2)低成本:许多量化方法不需要重新训练整个LLMs,使其对于计算资源有限的研究人员更加可行。3)高灵活性:量化与大多数其他压缩方法兼容,为进一步提高性能引入了异常的机会。为了帮助读者更好地理解量化方法,我们首先在3.1小节介绍标准量化方法和一些基本概念。然后,在3.2节,我们将简要总结LLMs出现之前一些针对中等大小语言模型(如BERT,GPT2等)的最重要工作。3.3节和3.4节涵盖了专注于LLMs推理的量化方法的最新进展。考虑到重新训练拥有数十亿参数的模型的困难,我们根据技术是否需要重新训练,将LLMs量化方法分为两部分。不需要重新训练的方法(即,训练后量化,PTQ)在3.3节讨论,而需要重新训练的方法(即,量化感知训练,QAT)在3.4节讨论。最后,在3.5节,我们讨论了一些展现未来研究潜力但在前面章节中未覆盖的高级话题。
剪枝
作为一种常规技术,用于压缩和加速神经网络,剪枝通过消除模型中非必需的权重或结构,同时保持网络性能几乎等同于它们原始状态。尽管剪枝在卷积神经网络(CNNs)中显示出显著结果,但与量化和蒸馏等其他压缩技术相比,其对于LLMs的有效性较不稳健。剪枝效果减弱的原因来自于微调过程。由于模型参数数量庞大,微调的高成本使得实现剪枝的全部效果变得更加困难。然而,剪枝是压缩模型的关键技术,需要进一步探索以增强和完善其在LLMs中取得改进结果的有效性。在接下来的部分,我们将在4.1节提供剪枝方法和基本概念的概览。随后,在4.2节,我们将详细阐述为中等大小语言模型(即,参数达到数十亿的模型)量身定制的剪枝技术,鉴于它们与LLMs的结构相似性。4.3节将深入探讨专门为LLMs设计的剪枝方法论。最后,在4.4节,我们将介绍一些辅助技术,这些技术虽然不是剪枝方法,但与剪枝相关,用于改进LLMs的剪枝结果,并讨论LLMs剪枝领域未来进步的挑战。
知识蒸馏知识蒸馏(KD)是一种常用的模型压缩和加速技术。具体实施过程包括将复杂教师模型获得的知识转移到一个更简单的学生模型中,从而实现教师模型知识的更简洁高效的表示。在5.1节中,我们将介绍知识蒸馏的一些基本概念,并提供知识蒸馏方法的简要分类。然后我们将在5.2节总结使用中等大小语言模型(具有大约10亿参数的语言模型)的各种知识蒸馏方法,并根据蒸馏发生在预训练阶段、微调阶段还是两者都有进行分类。最后,我们将在5.3节提供大型语言模型(具有超过10亿参数的语言模型)知识蒸馏的详细概述,将它们分类为黑盒蒸馏和白盒蒸馏。
紧凑架构设计是一种追求效率和简化的设计哲学,其目标是通过优化网络结构和算法,在减少计算资源和内存使用的同时,实现模型效率的显著提升。具体而言,它可以分为微观和宏观两个研究层次。本节将重点优化注意力计算和Transformer架构设计。由于Transformer层目前是LLM的主要组成部分,并且对于大型和中等大小模型来说没有区别,因此我们在这里不会特别按模型大小分类方法。
动态网络
扩大语言模型的规模已被证明是提升其在自然语言处理(NLP)任务上性能的有效方法。然而,扩展带来的大量计算成本和内存需求构成了LLMs进步的主要挑战。为了解决这些问题,同时仍然利用规模增加的好处,动态神经网络(DyNNs)只针对每个输入处理网络的一个子集,使整个模型在资源受限的环境下更加灵活和高效地满足计算需求。在NLP领域和LLMs领域,当前对DyNNs的研究主要包括以下三种方法:提前退出、级联推理和专家混合(MoE)。提前退出旨在动态地在深度神经网络(DNNs)的早期层次终止推理过程,从而减少计算成本并提高响应时间。直觉是,对于不太复杂的词汇,往往可以在网络的较早层次中准确完成预测。这些方法通常在网络内部集成了一系列内部分类器,这些分类器在推理过程中提供提前退出的信号。已经提出了各种退出标准。这一系列工作主要关注并应用于小型或中型语言模型,如Bert。并且准确度可能不足以支持一般LLMs在更复杂和现实的场景中的应用。级联推理利用不同大小的一系列语言模型处理不同复杂度级别的请求。Tabi提出了一个具有多级推理模型和基于概率的调度器的推理系统,以确定输入查询的处理策略,并平衡准确度和效率。FrugalGPT学会适应性地分类来自不同数据集和任务的查询,并将它们引导至合适的LLMs API组合。EcoAssistant和另一个研究利用查询缓存引用历史数据以加快响应速度,并使用LLMs的层级结构来处理那些不匹配的新查询。Mixture-of-Thoughts考虑了来自较弱LLMs的答案一致性作为问题难度的指标,以决定是否利用更强大的LLMs。一般来说,这一系列工作最近才出现,并显示出发展更高效LLM系统的有希望的方向。与上述两种方法相比,MoE的研究有着横跨多个机器学习领域(包括NLP)的广泛历史。MoE通过多个子网络水平扩展前馈网络(FFN),其中只有一个或少数几个会在单次前向传播中被激活。它被广泛地整合到今天的LLMs架构中,以提供高效而强大的服务。因此,在本节的剩余部分,我们将深入探讨MoE的领域。7.1节首先介绍MoE的基本概念,接着是对将MoE整合到LLMs中的当代研究的广泛综述,包括算法和架构设计、训练策略和实际应用。7.2节提供了一些代表性研究的简要回顾,这些研究将MoE与之前讨论的模型压缩和加速技术集成在一起,突出了其在开发更全面和成本效益更高的LLM系统中的潜力。
随着基于Transformer的模型的快速发展,出现了各种模型。由于不同的应用场景,它们在延迟、吞吐量、内存等方面有着额外的需求,这使得我们难以部署模型。在本节中,我们介绍了一些最近开发的针对LLM的推理加速框架,这些框架有效地提高了不同场景下模型的效率,如表6所示。我们根据通用性将框架分为通用框架和专用框架。这里还有一些特定于训练的加速框架[351]、[352]、[353]、[354]、[355]、[356]、[357],由于本文关注于推理,我们不会具体讨论它们。如果您想要部署训练好的模型以快速获得高效推理,可以参考这些框架[358]、[359]、[360]、[361]、[362]、[363]。
结论
在本文中,我们从算法角度对大型语言模型的压缩和高效推理进行了全面调查,包括量化、剪枝、蒸馏、紧凑架构设计、动态网络。此外,我们还介绍了一些为大型语言模型量身定制的流行压缩和加速框架。然而,正如我们在引言中提到的,与较小模型相比,大型模型的压缩和加速面临更多挑战。尽管现有算法已经做出了重大努力来应对这些挑战,但许多算法仍然依赖于为压缩小型模型而设计的框架,压缩大型模型的挑战依然存在。未来,需要进一步探索,以开发更高效、更有效的压缩算法,同时确保大型模型的通用性和泛化能力。