大模型的模型压缩与有效推理综述

共 13790字,需浏览 28分钟

 ·

2024-07-08 21:31

1  介绍

本文对大型语言模型的压缩和效率推理进行了综述。大型语言模型基于Transformer架构,具有强大的性能,但也带来了巨大的内存和计算成本。本文从算法角度对大型语言模型的压缩和效率推理方法进行了分类,包括量化、剪枝、知识蒸馏、紧凑架构设计和动态网络。大型语言模型有两个显著特点:

(1)大多数压缩算法需要在压缩后对模型进行微调和甚至重新训练,而大型模型的微调和训练成本非常高。因此,许多算法,如量化和剪枝,开始探索免调优算法。(2)大型模型强调通用性和泛化能力,而非单一任务的性能。因此,许多算法,如知识蒸馏,关注如何在压缩后保留其通用性和泛化能力。

2  基本知识

2.1  Transformer

Transformer 是一种用于机器翻译的模型,其基本结构如图1所示。Transformer 的输入(一个句子)通常通过嵌入层投影为一系列向量(称为标记)作为 Transformer 的输入。


图1  Transformer 基本结构

每个 Transformer 块由一个注意力模块和一个多层感知器(MLP)模块组成。注意力模块将查询和一组键-值对映射到输出,输出是值的加权和,权重由兼容性函数计算得出。注意力模块可以描述为将查询和键-值对映射到输出的函数。兼容性函数通常是点积函数,其中权重是查询与相应的键的点积,√d是缩放因子。多头注意力将输入标记映射到h个不同的查询、键和值({Qi,Ki,Vli∈[1,h]}),然后使用不同的线性层。最终输出是:多头注意力=连接(head1,…,headn)W。head;=注意力(Qi,Ki,Vi),其中Wo是线性投影矩阵。

Transformer 的编码器和解码器结构有所不同。编码器首先独立地处理输入序列(例如,用源语言编写),解码器将编码器的输出作为输入并预测最终输出(例如,目标语言)。编码器和解码器的注意力模块有两个核心区别:(1)编码器使用全注意力,其中输入序列中的任何两个标记都是可见的,输出标记只能看到之前的输出标记;(2)编码器使用自注意力模块,即 Q、K、V 都来自输入标记的注意力,其中 K、V 来自编码器的输出,而 Q 是解码器的最后一个输出标记。

2.2   中/大型语言模型

本文将语言模型分为中等规模和大规模两类。中等规模的语言模型参数规模在1亿以下,大规模的语言模型参数规模在1亿以上。大规模的语言模型相较于中等规模的语言模型,具有更强的泛化能力和通用性,能够处理更复杂的任务。然而,大规模的语言模型在压缩和加速方面也面临着更大的挑战。

2.3  参数高效的微调(PEFT)

参数高效的微调(PEFT)是指在微调过程中尽量减少需要调整的参数数量或微调的轮数,以降低微调成本。对于中等或大型模型,全参数微调和训练成本非常高。因此,许多参数高效的微调算法被提出,旨在尽可能减少需要调整的参数或微调的轮数。

3  量化

量化是指将输入值从一个较大的连续集合映射到一个较小的有限集合的过程。它是降低大型语言模型内存成本和加速推理的最直接方法,特别是在支持低比特数据类型快速操作的硬件上。量化方法有许多优点,例如减少内存占用、提高推理速度等。

3.1  基本概念

  • 均匀量化:将实数范围内的连续值映射到有限数量的离散值,以减少表示数据的位数。均匀量化中,相邻离散值之间的距离相等,且离散值是均匀分布的。
  • 非均匀量化:非均匀量化是均匀量化的对立面,其中量化值不一定是均匀分布的,且量化间隔的长度不一定相同。非均匀量化可以更好地适应数据的分布,从而在保持相同精度的情况下,减少量化误差。
  • 剪切范围和校准:剪切范围是指将实数范围内的连续值映射到有限数量的离散值时,相邻离散值之间的距离。校准是指选择合适的剪切范围,以最小化量化误差,通常使用最小/最大值(即-α=rmin,β=Tmax)或使用绝对最大值化损失(即KL散度)来选择剪切范围。
  • 对称/非对称量化:对称量化和非对称量化是量化方法的两种类型。对称量化是指量化范围关于0对称,即a=-β,此时对应的量化方法称为对称量化;否则称为非对称量化。
  • 量化粒度:量化粒度是指在量化过程中,将权重或激活值划分为多少个组进行量化。常见的量化粒度包括层粒度、通道粒度、组粒度等。
  • 训练后的量化PTQ/量化感知训练QAT:PTQ是一种在训练后对模型进行量化的方法,不需要重新训练模型,通常将权重和激活值量化为较低的精度,以减少模型大小和计算成本。QAT是一种在训练过程中对模型进行量化的方法,旨在最小化量化引起的性能损失,通过在训练过程中引入量化误差来调整模型权重,以最小化量化误差。
  • 静态/动态量化:静态量化在推理过程中使用固定的量化参数,而动态量化在推理过程中根据输入数据动态调整量化参数。
  • 模拟/仅整数量化:模拟量化在运行时动态调整量化参数,可以减少神经网络的内存成本和数据传输时间,通常比静态量化更准确,但计算开销较高。仅整数量化可以进一步享受特定硬件支持的高效低比特操作。
  • 仅权重/权重+激活量化:仅权重量化只量化权重,可以进一步享受特定硬件支持的高效低比特操作,但可能会损失一些精度。而权重+激活量化同时量化权重和激活,可以更好地适应输入数据的分布,但计算速度较慢。

3.2  中型语言模型的量化方法

本节主要讨论了中型语言模型的量化方法,小于或接近1B大小的模型被称为中型语言模型,如BERT、GPT-2和BART。

量化方法主要采用QAT框架而不是PTQ,因为重新训练中型语言模型的代价相对可以接受。重新训练带来的评估指标(例如精度)的改进是显著的,特别是在极端低比特设置(例如1比特或2比特量化)下。

中等规模语言模型中的QAT。QAT是一种在训练过程中引入量化误差的方法,可以在不损失模型性能的情况下实现模型压缩。QAT技术在中等规模语言模型中的应用主要体现在将BERT类模型中的权重向量化到INT8,例如Q8BERT将BERT模型中的权重和激活都量化为8位,而没有显著降低模型性能。有些工作使用更复杂的方法实现了低于8位的量化宽度,例如Q-BERT将激活保持在8位,并将混合精度权重降低到2/3位。TernaryBERT将权重限制在-1,0和+1之间,仅使用2位,并使用8位的激活。BinaryBERT将BERT的量化限制为权重二值化,即权重限制在{-α,+α}中。BiBERT是BERT的全二进制化(即1位权重、嵌入和激活)。一些工作在模型性能退化和量化位宽之间实现了自动平衡,例如赵等人利用可微神经架构搜索方法来自动分配参数的精度。

中等规模语言模型中的PTQ。PTQ(Post-Training Quantization)是一种在训练后对模型进行量化的方法。PTQ不需要重新训练整个模型,而是通过在训练后引入量化误差来实现模型压缩。GOBO将大多数权重进行3位量化,少数异常权重单独保存为FP32。I-BERT为特定的非线性函数设计了仅整数近似的方法,无需任何浮点运算即可实现端到端仅整数BERT推断。Dai等使用更精细的粒度来减少量化误差,将权重和激活量化为4位,并使用校准集来确定每个组的缩放因子。此外,精心定制的PTQ方法所得到的量化参数,可以作为QAT方法重新训练的一个良好的初始化点。

量化生成的中型语言模型。尽管对BERT类模型进行量化的方法取得了成功,但在生成语言模型(如GPT、BART)出现之前,对生成式LLM进行量化的尝试却很少见。量化误差在token-by-token生成过程中逐个累积,因此量化生成式语言模型通常是一个更复杂的问题。Tao等人的研究发现,直接将专为BERT类模型设计的量化方法应用于生成语言模型会受到同质词嵌入和权重分布差异的阻碍。为了解决这些挑战,作者提出了两个解决方案:token级别的对比性引导和模块依赖的动态缩放。DQ-BART使用QAT框架和一种序列到序列模型的量化和去噪训练目标,即BART,进行去噪训练。DQ-BART采用标准对称均匀量化,并设定训练目标为最小化量化后的低精度学生模型和全精度教师模型之间的输出logits、注意力以及隐藏状态之间的差异。

3.3  LLM的PTQ

针对LLM的PTQ工作分为两类:仅权重量化和权重+激活量化

仅权重量化(Weight-Only Quantization)只对模型的权重进行量化,以减小模型大小,降低内存占用和计算成本。权重量化方法可分为有符号量化和无符号量化,通常采用量化误差最小化的方法。基于训练后量化的方法在训练完成后对权重进行量化,而基于量化感知训练的方法在训练过程中对权重进行量化。权重量化方法可以实现不同程度的模型压缩,例如,GPTQ和QulP等方法可以将权重量化为2位或更低的精度,从而显著降低内存占用和计算成本。

权重+激活量化是一种深度学习模型压缩方法,通过将权重和激活值转换为较低精度表示,减少模型大小和计算复杂度。这种方法在移动端推理、边缘计算、嵌入式系统等领域具有广泛应用,可以显著提高推理速度、降低存储空间需求和减小计算复杂度。具体实现方法包括二值化量化、8位量化、自适应量化等。

3.4  对LLM的量化感知训练(QAT)

量化感知训练是一种重新训练量化模型的方法,用于从量化引起的性能下降中恢复。这种方法通常涉及整个模型的全部参数重新训练,但对于LLM来说成本太高。因此,一些尝试将量化与参数高效的训练方法相结合,以显著降低LLM上QAT的成本。当前针对LLM的QAT方法分为两类:全参数重新训练和参数-高效再训练。其中,参数-高效再训练是一种更有效的LLM QAT方法。

全参数重新训练是指在量化 LLM 时,对 LLM 进行完整的参数重新训练。这种方法的主要挑战是如何在不损害 LLM 的涌现能力的情况下,在较小的数据集上重新训练 LLM。当前的方法通常结合 QAT 和蒸馏来保留原始模型的这些能力。LLM-QAT 直接应用基本的 QAT 框架到 LLM,并使用数据生成方法生成数据,然后使用原始 LLM 对生成的数据进行训练,以匹配量化 LLM 的输出分布。这种方法还允许量化和 QAT 键值缓存,这在长句生成过程中占用大量内存。为了减轻重新训练完整 LLM 的成本,可以使用边缘蒸馏方法。

数-高效再训练是指采用参数高效的方法重新训练LLM。本节讨论了使用LoRA、适配器、提示调整等方法对LLM进行微调的一系列工作。其中,LoFTQ和LACos-BLOOM等提出了改进的量化方法,而INT2.1则将额外的可训练参数用于LoRA矩阵的优化。其他工作则结合了量化和适配器以及提示调整等方法。这些工作有助于提高LLM的性能和效率。

3.5  关于LLM量化的其他主题

量化相关工作还包括与量化的算法共同设计高效的内核,设计对硬件友好的量化方法,并将量化方法集成到实际应用中。例如,LUT-GEMM是为扩展版本的BCQ方法设计的有效内核,可以表示均匀和非均匀量化。其他有意义的作品研究LLM量化的内在特性,例如,Dettmers和Zettlemoyer在BLOOM、OPT、NeoX/Pythia和GPT-2等LLM家族中进行了大规模实验,使用16位激活和k位权重的组合(3≤k≤8),规模为19M到176B参数。一些工作还专注于研究LLMs中出现系统性异常值的原因,并寻找从源头抑制异常值的方法。例如,可量化变压器认为激活中的异常值是由于注意力头部的行为,注意力头部试图避免更新残差。

4  剪枝

神经网络剪枝是一种用于压缩和加速的技术,通过消除非必要的权重或结构来保持网络性能水平。尽管剪枝在CNN中显示出显著效果,但在LLMs中效果不太稳定。剪枝效果不那么有效的原因在于微调成本高昂,但剪枝对于模型压缩至关重要,需要进一步探索以增强和改进其效果。剪枝技术对于LLMs的优化和性能提升具有重要意义。

4.1  基本概念

  • 剪枝单元:剪枝单元在剪枝过程中起到关键作用,包括权重、神经元、注意力头、层等。非结构化剪枝关注单个权重,可以获得更高的稀疏度比并保持更好的性能,但计算效率较低。结构化剪枝可以轻松实现推理速度提升,但稀疏度比低于非结构化剪枝模型。在结构化剪枝中,需要避免集成结构删除导致模型性能下降。
  • 剪枝度量剪枝度量是决定元素是否被剪枝的准则,主要分为三类基于幅度、基于损失和基于正则化。基于幅度的剪枝方法通过比较权重的绝对值确定重要性;基于损失的方法通过比较权重的梯度或梯度加权和确定重要性;基于正则化的方法通过比较权重的L1或L2范数确定重要性。这些方法可单独或组合使用,如GBLM-Pruner结合了基于幅度和基于正则化的方法以获得更好的剪枝效果。
  • 动态/静态剪枝:动态/静态剪枝是指在训练过程中对模型进行剪枝的方法。动态剪枝在训练过程中实时调整模型结构,适应数据分布的变化,但计算复杂度较高;静态剪枝在训练结束后一次性剪枝,计算复杂度较低,但可能无法充分利用数据分布的信息。
  • 迭代/一次性剪枝迭代式方法通过多次迭代训练、剪枝和微调,保持模型性能,但计算时间长。一次性方法只进行一次剪枝,不迭代和微调,计算时间短,但可能影响模型性能。迭代式方法常用于较小模型,一次性方法常用于较大模型。
  • 全局/局部剪枝:全局剪枝将比较所有剪枝单元,以识别并消除不重要的单元,可能导致特定区域过度剪枝。局部剪枝则对每个区域的稀疏性施加约束,确保每个区域内的稀疏度比率不会过低,从而降低模型崩溃的风险。
  • 数据驱动和免数据裁剪数据驱动和免数据裁剪是两种不同的网络裁剪方法,数据驱动依赖于可用数据,表现更优,而免数据裁剪独立于数据输入执行网络裁剪。Magnitude Pruning是最广泛采用的裁剪方法,简单易实现且在许多复杂方法中取得了具有竞争力的结果,同时解决了在某些场景下数据集可能不可用的挑战。
  • 上/下游剪枝语言模型训练包括预训练和微调两个阶段。上游修剪在微调前对模型进行修剪,保留模型对多种任务的适应性,确保其多功能性;下游修剪在微调过程中进行修剪,指导模型专注于一个明确的任务。两者各有特点,根据实际需求选择合适的方法。

4.2  中型语言模型的剪枝方法

针对语言模型的专业设计剪枝方法具有独特性,不同于传统的剪枝方法。它专门针对基于转换器的模型和适用于多种不同架构模型的通用方法。这些剪枝方法可分为无结构方法和结构化方法。

4.2.1  针对中型语言模型的非结构化剪枝

非结构剪枝方法在不考虑约束的情况下,将非必要权重置为零。接下来介绍了三种修剪方法:基于规模的剪枝、基于损失的剪枝和正则化。这些技术有助于减少模型参数数量,提高模型性能和效率。

基于规模的剪枝是指根据模型的大小来选择合适的剪枝方法。基于规模的剪枝方法,将权重的规模和激活值的规模纳入到剪枝度量中,其中幅度修剪是最常用的方法,在研究中被应用于中型语言模型。Gordon等人通过幅度修剪压缩BERT,结果表明约30-40%的权重是不必要的,丢弃不会影响BERT的性能。渐变幅度修剪和GMP⋆等方法引入了稀疏度比例计划,在整个修剪过程中逐渐降低稀疏度比例,这种方法允许在随后的修剪步骤中更多的恢复时间,最终导致性能改善。

基于损失的剪枝是一种通过分析权重对损失函数的贡献来确定哪些权重可以被剪枝的方法。它通常比基于权重大小的剪枝方法更准确,因为它考虑了权重在特定任务中的重要性。基于损失的剪枝主要有两种方法:基于梯度的剪枝和基于Hessian矩阵的剪枝。基于梯度的剪枝包括OBD和OBS等,基于Hessian矩阵的剪枝包括L-OBS和L-OBD等。这些方法在语言模型剪枝中取得了很好的效果,例如SparseGPT和LLM Surgeon方法。

正则化方法包括L1、L2和Lo正则化,其中Lo正则化在模型压缩中更常用。Lo正则化将权重的Lo范数纳入损失函数,实现非零权重的稀疏化。然而,离散的Lo范数在梯度下降优化中存在挑战,因此使用硬混凝土分布作为二进制掩码的近似,如图4。

图4 使用蒙特卡洛模拟对硬混凝土分布的近似概率密度直方图。该硬混凝土分布的参数为对数α=0,β=0.5,γ=−0.1,和ζ=1.1。在该规格下,硬混凝土分布大致将其质量的一半分配到{0,1}中,其余分配到(0,1)中。

其他。非结构剪枝方法与N:M稀疏性集成,可以解决稀疏矩阵的非规则性质带来的挑战,提供纯非结构化方法可能缺乏的推理速度提升。N:M稀疏性原则要求在神经网络中连续的M组权重中,不超过N个权重具有非零值,底层硬件可以压缩经常出现的零值,实现推理加速。这种方法在保持模型性能的同时,显著提高了计算速度。

4.2.2  针对中型语言模型的结构化剪枝

无结构剪枝方法虽然能实现高稀疏度并保持性能,但不一定能在普通硬件上实现推理加速。在应用于中型语言模型的有序剪枝方法中,选择适当的剪枝单位与度量同样重要。使用与模型架构相关的结构作为剪枝单元往往能产生更理想的结果。接下来将深入探讨结构化剪枝的领域,包括基于权重的剪枝、基于损失的剪枝和正则化技术。

基于权重的剪枝。修剪单元权重的加权和可以作为有意义的表示,广泛应用于CNN中的卷积核。该方法也可扩展到中型语言模型,例如通过将权重大小与L2范数加权和,表示注意力头、FFN神经元和权重块的重要性。然后,根据重要性得分排序,去除不重要的结构。

基于损失的剪枝。在基于损失的剪枝方法中,对注意力头部的探索和分析得到了相当的关注。头部剪枝方法可以显著提高模型性能和推理速度,同时保持测试准确性。此外,块移动修剪方法通过考虑任意大小的块并集成到运动修剪中来扩展结构方法,同时与FFN中神经元修剪的组合可以获得最佳的整体性能。此外,一些结构化剪枝方法可以泛化,因为其中的剪枝单元是神经元。

正则化。正则化方法包括L0和L1正则化。其中,L0正则化因其广泛的应用而脱颖而出,而L1正则化也得到了相关研究。这些方法主要应用于注意力头的剪枝,包括因子化低秩剪枝、粗粒度和细粒度剪枝等。这些方法通过结合稀疏性诱导的目标学习得到不同大小的剪枝模型,并可以通过微调提高性能。这些方法在实验中实现了超过10倍的速度提升,同时精度只略有下降。

其他。结构化修剪还有层修剪、令牌修剪等方法。层修剪涉及在推理过程中删除不重要的令牌以减少计算需求。学习令牌剪枝是一种直接有效的方法,根据输入序列穿过转换器层的情况来适当地删除不重要令牌。每个令牌的剪枝度量由Transformer块中归一化注意力概率的总和确定。此外,还有谱归一化身份先验(SNIP)等单元,它采取策略来剪枝注意力层和FFN子层。这些方法有助于减少计算需求并提高模型性能。

4.3  LLM的修剪方法

本节介绍了针对LLM的剪枝方法,包括其顺序和特点,并进行了全面的比较。这些方法采用与中等规模语言模型所使用的并行方法相同的方法,但省略了微调过程。表3总结了LLM的各种修剪方法,这些方法在LLM领域具有广泛的应用前景。

表3 对LLM的各种修剪方法的总结

4.3.2  LLM的非结构化剪枝

非结构剪枝方法在保持模型性能方面具有优势,能够实现50%的稀疏度比率,被广泛用作后续方法的基准。后续方法在NLP任务中超越了这些方法,取得了优越的结果。虽然这些方法难以提高推理速度,但它们可以与N:M稀疏性结合以加速推理速度。这些方法需要最少的校准数据,即对模型的一次前向传递专门获取激活值或梯度以计算权重的重要性。LLM的非结构化剪枝可分为基于规模的剪枝方法和基于损失的剪枝方法。

基于规模的剪枝方法将权重幅度和激活值结合作为剪枝度量。例如,Wanda和RIA使用权重幅度和激活度量,E-Sparse还引入信息熵到度量中。Wanda引入一种新颖的修剪度量,同时考虑了权重和激活值的幅度,认为权重的意义不应该孤立地评估,而应该考虑它与相应激活值的产品。RIA也同时考虑权重和激活,主要区别在于其缓解通道腐败的方法,用相对重要性取代了权重的幅度。E-Sparse引入了隐藏状态特征的信息熵到剪枝度量中,熵作为信息丰富度的度量,数值越高表示信息越丰富。

基于损失的剪枝方法包括二阶和一阶方法。其中,SparseGPT是一种高效的二阶剪枝方法,将OBS技术融入GPT家族模型中,并使用稀疏性比率分配给每个权重矩阵。此外,还介绍了基于OBS和OBD的概念,以及一种新型剪枝度量ISC。一阶方法中,GBLM-Pruner是一种基于梯度的语言模型剪枝方法,通过与权重的幅度以及不同样本的相应梯度的归一化相乘来定义权重。

4.3.3  LLM的结构化剪枝

LLM的结构剪枝方法不依赖硬件,能加速推理,但需微调以恢复性能。LLM-Pruner作为基准,促进比较。微调虽在非结构剪枝中不再使用,但LLM中仍广泛采纳。LLM的结构化剪枝涵盖基于规模的剪枝、基于损失的剪枝和正则化。

基于规模的剪枝方法考虑行或列作为剪枝单位。例如,基于波动自适应结构化剪枝(FLAP)的剪枝单位是列。权重矩阵中每个列的重要性得分通过“波动度量”来测量,该度量是输入特征的样本方差,其中权重与权重矩阵相应列的平方范数相关联。此外,FLAP还纳入了旨在减轻组件删除所产生的负面影响偏差补偿机制,以消除微调的必要性。

基于损失的剪枝方法中,梯度信息至关重要。一些方法利用梯度信息来定义剪枝结构、选择剪枝目标等。其中一些方法可以动态地识别和指定剪枝单元,如LLM-Pruner和LoRAShear。此外,Ji等人提出了一种新颖的方法,使用非神经模型作为精度预测器来自动识别最佳修剪模型。这种方法通过评估和预测不同修剪配置对神经网络精度的冲击,促进更有效和自动化的最佳修剪模型选择。这些方法在保持模型性能的同时实现高稀疏比率具有挑战性。

正则化方法包括剪枝LLaMA和Compresso。剪枝LLaMA通过联合修剪粗粒度和细粒度模块,引入了目标结构剪枝和动态批量加载两个新颖组件,实现了紧凑替代方案并优于从头开始训练的模型。Compresso将LoRA集成到L0正则化中,通过协作剪枝范式提高LLM在剪枝过程中的理解和合作,从而提高性能并适应修改后的模型结构

4.4  关于LLM剪枝的其他主题

提高LLM的剪枝效率。为了增强针对LLMs的定制修剪方法的有效性,开发出了几种辅助技术,包括针对子区域定制的稀疏性比率、后修剪微调方法和硬件优化。其中一种定制稀疏比率的方法是“离群加权分层稀疏”(OWL),它引入了一套定制的非均匀分层稀疏比率。另一种后修剪微调方法是“动态稀疏无训练”,它无需完整的微调过程即可进一步细化稀疏LLM。这些技术可以提高现有剪枝方法(如Wanda和SparseGPT)的性能,表明剪枝性能的潜在提升可以通过各种与剪枝方法核心无关的手段实现。

LLM剪枝的未来工作。LLM剪枝领域面临两个重要挑战,一是将剪枝与其他方法结合以提高性能,二是微调成本高。科研人员和从业人员需应对无法执行完整微调的挑战,特别是当处理旨在增强剪枝性能的LLM时。解决这些挑战对于提高剪枝技术的有效性和实用性至关重要。

5  知识蒸馏(KD)

知识蒸馏是一种将教师模型的知识转移给学生模型的技术,用于压缩和加速模型,以更简洁和更有效的方式表示教师模型的知识。

5.1  基本概念

图5 知识蒸馏分类

  • Logit-based KD 是一种基于输出概率的知识蒸馏方法,它通过最小化学生模型和教师模型之间的输出概率差异来实现知识传递。这种方法通常使用 KL 散度作为损失函数,将教师模型的输出概率作为目标,引导学生模型学习教师模型的输出分布。这种方法的优点是可以直接优化模型输出,避免引入额外的中间表示。
  • Feature-based KD 是一种基于特征的知识蒸馏方法,它通过匹配教师模型和学生模型的输出特征来传递知识。这种方法要求学生模型不仅要知道结果,还要理解底层过程。
  • Relation-based KD 是一种基于关系的知识蒸馏方法,它旨在让学生模型学习教师模型如何处理关系型知识。这种关系主要体现在两个方面:同一样本在不同层的输出关系和不同样本的输出关系。
  • Black-box KD 是一种黑盒知识蒸馏方法,它不需要访问教师模型的内部信息,而是通过教师模型的预测结果来传递知识。这种方法适用于大型模型的知识蒸馏,因为大型模型的内部信息通常是不可访问的。黑盒知识蒸馏的损失函数通常包括预测损失和关系损失两部分,其中预测损失用于衡量学生模型和教师模型预测结果的差异,关系损失用于衡量学生模型和教师模型在处理关系型知识时的差异。黑盒知识蒸馏的主要优点是可以更好地模拟教师模型的行为,但缺点是需要更多的计算资源。

5.2  中等规模语言模型的知识蒸馏方法

中等规模的语言模型基于transformer结构,通过预训练和微调两个阶段进行训练。预训练阶段使用大规模的无标签数据集,学习语言的通用特征和结构;微调阶段使用带标签的数据,使其适应特定任务。模型蒸馏可分为微调蒸馏和预训练蒸馏两类。表4展示了各种中等规模模型蒸馏方法的训练阶段、知识来源和损失函数。

表4 BERT各种KD方法的总结。嵌入、注意力、隐藏和预测代表知识分别来自嵌入、注意力机制、隐藏层和模型的预测。

微调蒸馏计算成本高,因此提出了许多微调知识蒸馏方法来减少成本。预训练蒸馏可以减少针对特定任务的计算成本,但带来新的挑战。教师模型比学生模型具有更大的容量和更强的表示能力,学生模型在大量开放域训练数据上产生与教师模型匹配的预测是一项具有挑战性的任务。因此,选择预训练蒸馏和微调蒸馏之间的通用方法取决于如何在模型大小和性能之间进行权衡。

5.3  大语言模型的知识蒸馏方法

大型语言模型数量不断增加,但许多模型是闭源的,这限制了学生模型的知识获取。通过利用教师模型的响应,即知识剩余来源,我们可以将信息传递给学生模型,实现知识蒸馏。根据学生模型的知识来源是否仅限于教师模型提供的答案,可以将大型语言模型的知识蒸馏分为黑盒蒸馏和白盒蒸馏。黑盒蒸馏适用于学生模型可以从教师模型响应之外的其他来源获取知识的场景,而白盒蒸馏适用于学生模型只能从教师模型响应中获取知识的场景。

黑盒知识蒸馏。研究人员发现,当模型的参数足够大时,LLMs表现出涌现能力,能够处理复杂的任务。黑箱蒸馏方法利用这种能力,通常使用三种常见的方法:指令跟随、思想链和上下文学习。此外还有还有其他方法生成特定的强化数据集,例如使用符号知识折衷为常识模型获得高质量的常识知识图谱,DISCO使用LLM获取反事实数据并过滤以获得高质量数据集以提高学生在NLI任务中的能力,PubMedBERT提出了一种全新框架处理不良事件实体和ADE关系提取,以及Promptmix使用LLM根据比例混合和重新标记文本数据用于分类问题以获得更强大的训练数据集。

白盒知识蒸馏。白盒蒸馏的研究工作相对较少,但仍有一些探索。MINILLM和GKD等模型专注于损失函数,并使用反向KL散度来帮助学生从教师分布中学习。此外,Padmanabhan等人通过提示语言模型生成转移集,使学生的分布与转移集上的教师分布相匹配。TSLD利用判别概率表征进行标记化,以减少在应用QAT时引入的错误。MiniMA发现当学生模型的大小约为教师模型参数数量的40%时,最佳的蒸馏效果会出现。这些方法都旨在帮助学生训练,并利用教师提供的信息来增强学生的表达能力。

6  紧凑架构设计

紧凑架构设计是一种提高效率和精简的理念,通过优化网络结构和算法,显著提高模型效率,同时减少计算资源和内存的使用。它可分为微观和宏观两个层次进行研究,重点优化注意力计算和Transformer架构设计。

6.1  高效注意力

Transformer中的标准自注意力机制时空复杂度为O(N2),阻碍了处理长序列问题的能力。为了解决这个问题,出现了高效注意力工作,包括稀疏注意力、线性近似注意力和闪存注意力等。

稀疏注意力方法允许每个标记只关注局部或主要相关的项,从而实现稀疏注意力模式,从而降低计算和内存需求。稀疏注意力方法可以分为基于全局、基于窗口和基于数据三种方法。基于全局的方法包括全局注意力、基于窗口的方法包括局部注意力和固定注意力模式,基于数据的方法包括随机注意力和数据驱动的稀疏注意力。

6 比较稀疏注意力模式(a) 完全自注意力(b) 步长注意力(c窗口注意力(d全局注意

线性近似注意力方法以解决标准注意力计算中存在的二次时间复杂度问题。线性近似注意力计算方法可以分为基于关联性和低秩的方法。基于关联性的方法通过计算 KTV 并利用软最大化实现线性注意力,而低秩方法则通过将 QKT 分解为低秩矩阵实现线性注意力。

6.2  神经架构搜索(NAS)

NAS是一种通过搜索算法自动寻找最优神经网络结构的方法。这种方法可以避免手动设计神经网络结构的繁琐过程,并且能够找到在特定任务上表现更好的模型结构。HAT 是一种神经架构搜索方法,它通过构建一个 Super Transformer 来近似包含搜索空间中的所有 Sub Transformer 模型,并通过延迟预测器预测延迟,从而加速搜索过程。这种方法可以避免昂贵的重新训练,并且可以观察到一些重要的性质。

7  动态网络(DyNN)

动态网络(DyNN)是一种在资源受限环境下处理大型语言模型(LLM)的方法,它只使用网络的一部分来处理每个输入,从而降低计算和内存需求。在自然语言处理(NLP)和LLM领域,当前的DyNN研究主要包括三种方法:早期退出、级联推理和混合专家(MoE)。早期退出旨在在深度神经网络的早期层动态终止推理过程,以减少响应时间。级联推理将模型分解为多个子模型,每个子模型处理输入序列的不同部分。混合专家将模型分解为多个专家,每个专家处理输入序列的不同部分。这些方法可以结合其他压缩加速方法来提高LLMs的效率。表5中总结了一些具有代表性的MoE方法。

表5 各种MoE方法总结

7.1  将MoE与其他高效技术结合使用

MoE 与其他高效技术结合的研究包括剪枝、知识蒸馏和参数高效微调(PEFT)。在稀疏 MoE 模型中,大多数现有工作都关注如何在保留大部分表示能力的同时减少内存占用。MoEBERT 将预训练 BERT 中的前馈网络(FFN)转换为多个专家,并在推理时只激活一个专家,以提高速度。MoEfication 旨在将 FFN 转换为 MoE 层的转换推广到各种 Transformer 模型。σ-MoE 和 SwitchHead 引入了额外的稀疏性到 FFN 和注意力组件,以减少标准 Transformer 的计算和内存需求。Sparse Mixers 和 SMLP 替换了大部分自注意力子层和 FFN,并使用 MoE 子层和路由机制确保来自同一句子的标记被发送到同一专家。AdaMix 提出了一种混合适配器或低秩分解矩阵的混合方法,以增强下游性能。MixDA 使用一组领域适配器注入领域特定知识,并训练一个混合适配器门动态融合多个领域任务。EcoAssistant 和 FrugalGPT 利用查询缓存和 LLM 层次结构处理不同复杂度的请求。MoE 的研究历史较长,广泛应用于今天的 LLM,包括模型压缩和加速技术。

8  加速框架

本章主要介绍了一些用于加速大型语言模型(LLM)推理的框架。这些框架旨在提高 LLM 在不同场景下的效率,包括延迟、吞吐量和内存等。这些框架可以分为通用框架和特定框架。通用框架包括 DNNFusion 和 DeepSpeed Inference,它们可以应用于各种场景,而特定框架则针对特定场景进行优化,如 TurboTransformer 和 ByteTransformer。表6为各种加速框架的总结。这些框架通过操作融合、张量并行、推理管道和卸载系统等技术来提高 LLM 的推理效率。

表6 各种加速框架的总结


浏览 77
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报