1 介绍
大型语言模型在人工智能领域中具有巨大的潜力 ,但 推理过程中的禁止记忆和计算预算阻碍了其部署。为了应对这些挑战,提出了许多针对LLMs的推理加速方法,包括剪枝、知识传递、量化、紧凑的架构设计以及动态网络等。这些方法有助于减少模型推理过程中的内存和计算成本,以便模型可以在各种资源受限的设备上运行。
2 预备基本知识
2.1 Transformer
Transformer最初被应用在机器翻译中,其基本结构如图1所示。
图1 Transformer 基本结构
注意力。 注意力机制是将输入序列中的每个令牌映射到查询和/或键值对向量,然后将查询与一组键值对映射到输出,输出是值的加权和计算得出的,权重通过查询与相应键的兼容性函数计算。最常见的注意力模块是归一化点积函数:
其中,权重通过Q和K的点积计算得出,√dk是一个常量的缩放因子。
多头注意力。 此外,Transformer采用多头注意力机制,如图1所示,而不是仅用一个键值对注意力函数。它通过不同的线性层将输入标记映射到h个不同的查询(Qi)、键(Ki)和值(Vi | i ∈ [1, h])上。最后,输出变为:
其中 Wo 是线性投影矩阵。
编码器和解码器。 Transformer模型是一种编码器-解码器结构,用于神经机器翻译。编码器首先独立处理输入序列,解码器将编码器的输出作为输入并预测最终输出。编码器和解码器之间的两个核心区别是:编码器采用全注意力,解码器采用单向注意力;编码器采用自注意力模块,解码器采用跨注意力。随着技术的发展,除了编码器-解码器模型,还有许多后续的语言模型采用纯编码器结构和纯解码器结构。
2.2 中/大型语言模型
随着Transformer架构的流行,出现了许多基于纯Transformer架构的自然语言处理模型,这些模型参数越来越多。一般认为真正意义上的“大”语言模型应该从BERT和GPT-1算起,它们的参数规模都达到了数亿级别。之后出现了许多中等规模模型和大型模型,这些模型利用大规模的自我监督预训练来使模型具有许多小型模型所不具备的能力。中等规模模型参数数量在一亿或以下,而大型模型参数数量超过一亿。
2.3 参数高效的微调(PEFT)
许多模型压缩算法(如知识传递和剪枝)在压缩后需要进行微调甚至训练来恢复精度,但对于大型模型,全参数微调和训练成本高昂。因此,参数有效的微调(PEFT)算法被提出,旨在减少微调参数或迭代次数,降低微调成本。
3 量化
量化方法在降低内存成本和提高推理速度方面具有优势,特别是在支持低比特数据类型的硬件上。量化方法相对于其他压缩方法具有高压缩比、低成本和高灵活性等优势。我们将介绍标准量化方法和一些基本概念,并重点介绍近年来在LLM推理方面的量化方法,包括无需重新训练的方法和需要重新训练的方法。最后,我们将讨论一些高级主题,这些主题对未来的研究具有潜力。
3.1 基础概念
1)均匀量化。 均匀量化是一种基本的量化方法,它将实数值范围划分为均匀的有限区间,例如,对于b位整数的2b个区间。然后,同一区间内的实数值被映射到相同的整数。
2)非均匀量化。 非均匀量化可以提供更高的精度和更低的量化误差,但可能会因为涉及耗时的查找操作而效率低下。神经网络的权重通常不是均匀分布的,因此非均匀量化是可行的。
3)剪切范围和校准。 剪切范围和校准是均匀量化中的一个重要因素,选择合适的剪切范围可以减少异常值的数量,但也会导致更大的尺度系数和量化误差。常见的校准选择包括使用最小/最大值、绝对最大值或最小化信息损失。
4)对称/非对称量化。 对称/非对称量化是处理截断范围[α,β]的方法,当范围在0处对称时,称为对称量化;否则为非对称量化。非对称量化的剪枝范围更紧凑,对激活可能严重失衡的神经网络中的激活尤为重要。然而,在解量化步骤中,对称量化的计算效率更高。
5)量化粒度。 神经网络量化的分类标准是量化粒度,它对应于哪些权重/激活一起量化并共享量化参数。常见的量化粒度包括层级量化、通道量化、行/列量化、标记量化、组量化等。一般来说,更细的粒度可以减少量化误差,但需要存储更多的量化参数并引入更高的计算开销。
6)训练后的量化/量化感知训练。 训练后的量化/量化感知训练可以有效减少量化误差。其中,PTQ无需重新训练,而QAT需要重新训练。QAT通过模拟量化过程或微调量化模型来学习一个更好的性能点,但重新训练对于大多数研究人员来说成本高昂。
7)静态/动态量化。 静态量化是在推理前预先计算量化参数,通过校准输入找到典型的激活统计信息。动态量化是在运行时动态计算量化参数,通常更准确但需要较高的开销来计算所需的统计信息。
8)模拟/仅整数量化 。 模拟量化可以减少神经网络的内存成本和数据移动时间,对于一些工作表明LLM推断是内存密集型的来说有帮助。而仅整数量化可以利用特定硬件支持的高效低位操作加速。
9)仅权重/权重+激活量化。 量化目标是否仅是权重还是包括权重和激活。先前的工作[21]发现,激活量化通常更容易受到权重量化的影响,因此仅权重量化可以达到更低的位宽。然而,量化后的权重在乘以激活之前必须进行反量化,因此仅权重量化不能仅整数量化,在推理时将引入额外的计算开销。
根据这些基本概念将LLM的主要量化方法分类在表1中。
表1 LLMs几种强基线量化方法的详细分类。✓表示一种量化方法属于特定类别,×反之,◦表示一种量化方法可以在两种情况下使用。对于在不同位宽下工作的方法,我们报告最低的有效位宽。
3.2 中型语言模型的量化方法
中等规模的语言模型主要采用QAT方法,而不是PTQ方法,因为重新训练QAT带来的评估指标改进显著,特别是在极端低比特设置下。我们将首先介绍QAT方法,然后再介绍PTQ方法。QAT方法相对可以接受的成本代价,使得重新训练成为可能。
中等规模语言模型中的QAT, 主要致力于将BERT类模型中的权重和激活进行量化,以降低位宽。一些工作使用更复杂的方法实现了低于8位的量化宽度,并采用知识传递教育来克服性能下降。同时,一些工作在模型性能退化和量化位宽之间实现了自动平衡,通过可微神经架构搜索方法来自动分配参数的精度。这些技术有助于提高模型性能和效率。
中等规模语言模型中的PTQ,经过精心设计,通常不需要额外的微调和重新训练来补偿量化误差。一些方法如GOBO和I-BERT为特定的非线性函数设计了仅整数近似的方法,从而无需任何浮点运算即可实现端到端仅整数BERT推断。此外,使用更精细的粒度来减少量化误差,如组量化,可以将权重和激活量化为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)和权重+激活量化(weight + activation quantization)。
仅权重量化方法可以减少模型大小和内存使用,但无法享受低比特运算加速。这种方法在优化数据传输方面具有重要意义,但需要更多比特宽度存储权重。主要挑战包括LM推理依赖内存和激活模式阻碍量化过程。
权重+激活量化的方法通过同时量化权重和激活,以减少模型的内存使用和计算量,但这种方法存在挑战,包括量化误差对权重和激活的影响以及量化误差对模型性能的影响不同。一些方法采用量化误差最小化的方法,而另一些方法则采用量化误差和模型性能之间的权衡方法。
3.4 对LLM的量化感知训练(QAT)
量化感知训练是一种用于恢复量化模型性能的方法,通常涉及整个模型的重新训练。对于LLM模型,这种方法成本较高,因此一些尝试将量化与参数高效的训练方法相结合。当前针对LLM的QAT方法分为两类:全参数重新训练和参数-高效再训练。
全参数重新训练是一种在量化LLM时对LLM进行完整的参数重新训练的方法,通过使用边缘蒸馏方法、数据生成方法以及QAT和蒸馏技术,可以保留原始模型的涌现能力,同时减少内存使用和计算量。这种方法还使用数据生成方法生成数据,并使用原始LLM对生成的数据进行训练,以匹配量化LLM的输出分布。
参数-高效再训练是指采用参数高效的方法重新训练LLM。其中,QLoRA和QA-LoRA提出了将组量化集成到QLoRA中,缓解量化与低秩适应之间的不平衡问题。此外,还讨论了其他工作,如冻结量化指数并仅微调量化参数、使用二进制量化等。这些方法在具有相对可接受的计算预算下,采用低秩适应来重新训练量化LLM。这些方法有助于提高LLM的性能和效率。
3.5 关于LLM量化的其他主题
量化相关工作还包括设计高效的内核、量化方法以及将量化方法集成到实际应用中。一种有效内核LUT-GEMM用于扩展版本的BCQ方法,可表示均匀和非均匀量化,将OPT-175B模型的延迟加速了2.1倍,实现了3位量化。一些工作还专注于研究LLM中出现异常值的原因,并寻找从源头抑制异常值的方法。可量化变压器认为激活中的异常值是由于注意力头部的行为,并设计了截断softmax和门控注意力来赋予模型产生最小幅度(甚至完全零)的能力。这些工作为LLM的量化提供了重要的理论和实践指导。
4 剪枝
神经网络剪枝是一种压缩和加速技术,通过消除非必要权重或结构来保持网络性能。在LLMs中,剪枝效果不稳定,受限于微调过程。由于模型参数众多,微调成本高昂,难以实现剪枝的全部效果。为了增强和改进剪枝效果,需要进一步探索,以在LLMs中获得更好的结果。剪枝对于模型压缩至关重要。
4.1 基本概念
1) 剪枝单元: 剪枝单元在剪枝过程中起到关键作用,包括权重、神经元、注意力头、层等。非结构化剪枝关注单个权重,可以获得更高的稀疏度比并保持更好的性能,但计算效率较低。结构化剪枝可以轻松实现推理速度提升,但稀疏度比低于非结构化剪枝模型。在结构化剪枝中,需要避免集成结构删除导致模型性能下降。
2) 剪枝度量: 剪枝度量是用于确定是否剪枝或保留元素的准则,包括基于幅度的、基于损失的和基于正则化的方法。这些方法可以单独使用,也可以组合使用。GBLM-Pruner结合了三种剪枝方法,通过比较权重的绝对值、梯度和L1或L2范数来确定剪枝单元的重要性,有助于提高模型性能和泛化能力。
3) 动态/静态剪枝: 动态剪枝在训练过程中实时调整模型结构,以适应数据分布的变化,但计算复杂度较高;静态剪枝则在训练结束后一次性剪枝,计算复杂度较低,但可能无法充分利用数据分布的信息。
4) 迭代/一次性剪枝: 迭代式方法在训练、微调过程中多次迭代,保持模型性能,适用于剪枝较小的模型,计算时间较长,但效果较好;一次性方法只进行一次剪枝,不涉及迭代和微调,适用于剪枝较大的模型,计算时间较短,但可能无法保持模型性能。
5)全局/局部剪枝: 全局剪枝方法通过比较所有剪枝单元来识别并消除不那么重要的单元,可能导致特定区域过度剪枝。局部剪枝方法对每个区域的稀疏性施加约束,以避免模型崩溃的风险。
6) 数据驱动和免数据裁剪: 数据驱动裁剪依赖于可用数据推导出裁剪决策,表现更优,但免数据裁剪独立于数据输入执行网络裁剪,简单易实现且在复杂方法中取得具有竞争力的结果。免数据裁剪解决了在某些场景下数据集可能不可用的挑战。
7) 上/下游剪枝: 语言模型训练分为预训练和微调两个阶段。上游修剪在微调前对模型进行修剪,保留其多功能性;下游修剪在微调过程中进行,指导模型专注于特定任务。上游修剪有助于提高模型的泛化能力,下游修剪则有助于提高精度和效率。
4.2 中型语言模型的剪枝方法
针对语言模型的专业设计剪枝方法专门针对其独特特性,不同于传统的剪枝方法。其中包括专门针对基于转换器的模型和适用于多种不同架构模型的通用方法。剪枝方法分为无结构和结构化方法,
4.2.1 针对中型语言模型的非结构化剪枝
非结构剪枝方法在不考虑任何特定约束的情况下,将非必要的权重置为零。我们按照修剪标准的顺序介绍三种修剪方法:基于规模的剪枝、基于损失的剪枝和正则化。这些技术有助于减少模型参数数量,提高模型性能和效率。
基于规模的剪枝。 基于规模的剪枝是一种简单有效的方法,它考虑了权重和激活值的规模。在中型语言模型中,剪枝方法主要关注权重的规模。幅度修剪是一种常用的剪枝方法,研究发现约30-40%的权重可以丢弃而不影响BERT的性能。一次性修剪所有任务在微调前对所有任务进行一次性修剪,无需为每个任务单独修剪,同时保持性能完整性。与幅度修剪相比,渐变幅度修剪引入了稀疏度比例计划,在整个修剪过程中逐渐降低稀疏度比例。一次性修剪和GMP⋆都是专门应用于语言模型修剪的GMP的实现。GMP⋆还引入了一个初始的实质性修剪步骤,以更好地适应高目标稀疏度,最终导致性能改善。
基于损失的剪枝。 基于损失的剪枝是一种更准确的剪枝方法,通过分析权重对损失函数的贡献来确定哪些权重可以被剪枝。它包括基于梯度和基于Hessian矩阵的两种主要方法。在语言模型剪枝中,基于损失的剪枝取得了很好的效果,例如SparseGPT和LLM Surgeon方法。这些方法将OBD和OBS方法应用于GPT-family模型和非结构化和结构化剪枝中,实现了高效的大规模语言模型剪枝。
正则化。 正则化方法包括 L1、L2 和 Lo 正则化,其中 Lo 正则化在模型压缩中更为常用。Lo 正则化将权重的 Lo 范数纳入损失函数,以实现非零权重的稀疏化。然而,离散的 Lo 范数在梯度下降优化中存在挑战,因此使用硬混凝土分布作为二进制掩码的近似,如图4。
图4 使用蒙特卡洛模拟对硬混凝土分布的近似概率密度直方图。该硬混凝土分布的参数为对数α=0,β=0.5,γ=−0.1,和ζ=1.1。在该规格下,硬混凝土分布大致将其质量的一半分配到{0,1}中,其余分配到(0,1)中。
其他。
非结构剪枝方法在高稀疏度下保持模型性能,但面临推理加速挑战。N:M稀疏性原则通过要求连续的M组权重中不超过N个权重具有非零值,实现有效的推理加速。这种压缩依赖于硬件的独特架构,如稀疏张量核心。N:M稀疏性与非结构化修剪方法无缝集成,提供推理速度提升。例如,稀疏模式可以基于权重的幅度进行初步确定,2:4稀疏性在没有牺牲性能的情况下,展示了计算速度的两倍显着加速。
4.2.2 针对中型语言模型的结构化剪枝
结构化剪枝在应用于中型语言模型时,选择适当的剪枝单位与度量同样重要。通常考虑的剪枝单元包括注意力头、全连接层神经元、隐层维度等。使用与架构相关的结构作为剪枝单元能产生更理想的结果,因为这可以保留模型构造中固有的基本原则。接下来将深入探讨结构化剪枝的领域,包括基于权重的剪枝、基于损失的剪枝和正则化技术。
基于权重的剪枝。 修剪单元权重的加权和可以作为有意义的表示,这可以广泛地应用于CNN中的卷积核。同样地,也可以将其扩展到中型语言模型。例如,可以将权重大小与L2范数进行加权和,以表示注意力头、FFN神经元和权重块中的相应重要性。然后,根据其重要性得分的顺序去除不重要的结构。
基于损失的剪枝。 基于损失的剪枝方法在注意力头部得到了关注,其中米歇尔等人提出了一种迭代剪枝方法,剪枝注意力头部的20-40%不会显著损害目标任务上的测试准确性。然而,可区分子集剪枝表明,米歇尔等人对可剪枝的Transformer头数量做出了显著低估。此外,块移动修剪方法通过考虑任意大小的块并集成到运动修剪中来扩展结构方法。同时,也有许多方法同时修剪FFN中的神经元和注意力头。一些结构化剪枝方法可以泛化,因为其中的剪枝单元是神经元,例如稀疏与低秩逼近在神经元级别剪枝权重矩阵。
正则化。 除了基于损失的剪枝方法,正则化方法也是适用于中型语言模型的有结构剪枝技术中的一类。其中,L0正则化因其广泛的应用而脱颖而出。这些L0正则化方法主要应用于剪枝注意力头和FFN神经元,并使用低秩剪枝和增广拉格朗日方法来调节稀疏度比率。此外,L1正则化也得到了相关研究,通过稀疏性诱导的目标学习可压缩组件的掩码,得到不同大小的剪枝模型。这些剪枝后的模型随后可以通过因果传递目标进行微调以提高性能。
其他。 结构化剪枝还有层修剪、令牌修剪等方法。层修剪的特点是规模相对较小,需要更详细的修剪方案来确定哪些应该被修剪。令牌修剪则涉及在推理过程中从序列中删除不重要的令牌,以减少计算需求。学习令牌剪枝(LTP)是一种直接有效的方法,用于根据输入序列穿过转换器层的情况来适当地删除不重要令牌。每个令牌的剪枝度量由Transformer块中归一化注意力概率的总和确定。除了这些,结构化剪枝还包括许多不同的单元,例如谱归一化身份先验(SNIP),它采取了一种策略来剪枝注意力层和FFN子层,即将残差连接转化为严格的身份映射。
4.3 LLM的修剪方法
在这一部分,我们将介绍针对LLM的剪枝方法,反映中等规模语言模型剪枝方法部分中建立的顺序。针对LLM的剪枝方法采用与中等规模语言模型所使用的并行方法相同的方法,某些方法中的一些区别主要在于省略微调过程。为了便于对这些方法进行更全面的比较,我们将这些剪枝方法的特性进行了整合,具体可见表3。
表3 对LLM的各种修剪方法的总结
4.3.2 LLM的非结构化剪枝
非结构剪枝方法回避微调过程,采用回避微调过程的方法,如表3,可以在模型性能相对折衷的情况下达到50%的稀疏度比率。后续的非结构化剪枝方法在各种NLP任务中超越SparseGPT和Wanda,获得优越结果。这些非结构化的剪枝方法需要最少的校准数据,可分为基于规模的剪枝和基于损失的剪枝。
基于规模的剪枝。 基于规模的剪枝是一种基于权重大小的剪枝方法,它通过剪枝权重较小的神经元来减少模型的大小。在LLM中,这种方法通常结合激活值来评估神经元的重要性。Wanda和RIA等方法使用权重和激活值的乘积作为剪枝指标,而E-Sparse方法还引入了信息熵作为剪枝指标。
基于损失的剪枝。 基于损失的剪枝方法,包括一阶和二阶方法。其中,二阶剪枝方法包括OBD和OBS,而SparseGPT将OBS应用于GPT家族模型,无需微调过程且不会损失太多精度。此外,还介绍了LLM外科医生对无结构和结构剪枝的通用性,以及基于梯度的一阶剪枝方法。Shao等人引入了新型剪枝度量,为剪枝过程提供全面和精细的评估,并提出了稀疏性比率分配给每个矩阵的方法。
4.3.3 LLM的结构化剪枝
LLM的结构剪枝方法,不受硬件限制,能够在剪枝过程后实现推理加速,但需要微调过程来恢复性能。这种方法开创性的方法有LLM-Pruner,作为后续方法的基准,促进了有意义的比较。微调在非结构剪枝中已被废弃,但在LLM中广泛采用。LLM的结构化剪枝包括基于规模的剪枝、基于损失的剪枝和正则化。
基于规模的剪枝。 基于规模的剪枝方法将行或列作为剪枝单位。例如,FLAP方法以列为剪枝单位,通过“波动度量”来测量每个列的重要性得分。波动度量是输入特征的样本方差,与权重矩阵相应列的平方范数相关联。此外,FLAP还引入了偏差补偿机制,以消除组件删除所带来的负面影响,从而避免了微调的必要性。
基于损失的剪枝。 在应用于LLM的基于损失的结构化剪枝方法领域中,梯度信息至关重要。现有方法以不同方式利用梯度信息,如定义剪枝结构、选择剪枝目标等。与传统方法相比,这些方法避免了预定义的剪枝单元,能够动态识别和指定剪枝单元。例如,LLM-Pruner在修剪过程中移除非关键耦合结构,通过结构依赖性的定义自动识别和提取。LoRAShear在依赖图中发现最小删除结构,专门针对LoRA模块构建依赖图,利用知识分布分析来识别关键结构。Ji等人提出了一种新颖的方法,使用非神经模型,特别是梯度提升决策树(GBDT)作为精度预测器,进一步优化搜索空间和搜索过程,以自动识别最佳修剪模型。
正则化。 剪枝LLaMA和Compresso都是应用于LLMs的正则化方法,其中剪枝LLaMA通过联合修剪粗粒度和细粒度模块,引入了目标结构剪枝和动态批量加载两个新颖组件,实现了紧凑替代方案并优于从头开始训练的模型。而Compresso将LoRA集成到L0正则化中,通过协作剪枝范式提高LLM在剪枝过程中的理解和合作,从而提高性能并适应修改后的模型结构。两者都利用了剪枝技术来优化模型结构并加速训练过程。
4.4 关于LLM剪枝的其他主题
4.4.1 提高LLM的剪枝效率
为了增强LLMs定制修剪方法的效果,已经开发出多种辅助技术,包括定制稀疏性比率、后修剪微调方法和硬件优化。这些技术可以与现有方法集成,增强整体修剪效果。其中,一种定制稀疏比率的方法是“离群加权分层稀疏”(OWL),它根据每一层观察到的离群比率定制非均匀分层稀疏比率。另一种后修剪微调方法是“动态稀疏无训练”(Dynamic Sparse No Training),它引入了无需训练的微调方法,可进行轻微更新并最小化重建误差。实验表明,这些技术能够显著提高现有剪枝方法(如Wanda和SparseGPT)的性能,说明剪枝性能的潜在提升可以通过与剪枝方法核心无关的手段实现。
4.4.2 LLM剪枝的未来工作
尽管LLM领域在修剪方面取得了一定成果,但仍面临两大挑战。首先,将修剪与其他方法(如量化和知识蒸馏)相结合对于实现竞争力强的性能至关重要。当前LLM修剪的成果相对不太令人满意,因此,增强修剪方法的内在有效性,确保其独立使用时的熟练程度是关键。其次,LLM修剪中的微调成本是一个重大挑战。许多方法采用一次性修剪而无需微调来最小化计算负担,但这会损害修剪模型的性能。科研人员和从业人员必须应对无法执行完整微调的挑战,特别是当处理旨在增强修剪性能的LLM时。解决这些挑战对于提高修剪技术的有效性和实用性至关重要。
5 知识蒸馏(KD)
知识蒸馏是一种将教师模型的知识转移给学生模型的技术,通过简化学生模型,使其能够以更简洁和更有效的方式表示教师模型的知识。
5.1 基本概念
知识蒸馏主要分为以下四类:基于逻辑的知识蒸馏(logit-based KD)、基于特征的知识蒸馏(feature-based KD)、基于关系的知识蒸馏(relation-based KD)和黑箱知识蒸馏(black-box KD)。前三种蒸馏方法属于白盒蒸馏,需要访问教师模型内部数据。而黑盒知识蒸馏则是通过教师模型的预测结果来传递知识,不需要访问模型内部数据。当代封闭源大型模型内部信息不可获取,只能得到预测结果。黑盒知识蒸馏是一种有效的知识传递方式。在图5中,我们简要概述了这些知识蒸馏方法及其之间的关系。
图5 知识蒸馏分类
5.2 中等规模语言模型的知识蒸馏方法
中等规模的语言模型通过预训练和微调两个阶段进行训练,其中预训练阶段使用大规模的无标签数据集学习语言的通用特征和结构,微调阶段使用带标签的数据使其适应特定任务。模型蒸馏可分为微调蒸馏和预训练蒸馏两类。微调蒸馏是在微调阶段使用知识蒸馏的方法,而预训练蒸馏是在预训练阶段使用知识蒸馏的方法。表4展示了各种中等规模模型蒸馏方法的训练阶段、知识来源和损失函数。这些方法有助于提高模型性能和泛化能力。
5.3 大语言模型的知识蒸馏方法
大型语言模型数量增长,但许多闭源,限制了学生模型的知识获取。知识蒸馏通过利用教师模型的响应,即知识剩余来源,将信息传递给学生模型。根据学生模型的知识来源,大型语言模型的知识蒸馏可分为黑盒蒸馏和白盒蒸馏。黑盒蒸馏适用于学生模型可以从教师模型响应之外的其他来源获取知识的场景,而白盒蒸馏适用于学生模型只能从教师模型响应中获取知识的场景。
6 紧凑架构设计
紧凑架构设计是一种提高效率和精简的理念,通过优化网络结构和算法,显著提高模型效率,同时减少计算资源和内存的使用。它可分为微观和宏观两个层次进行研究,重点优化注意力计算和Transformer架构设计。
6.1 高效注意力
Transformer中的标准自注意力机制时空复杂度为O(N2),阻碍了处理长序列问题的能力。为了解决这个问题,出现了高效注意力工作,包括稀疏注意力、线性近似注意力和闪存注意力等。
6.2 神经架构搜索(NAS)
神经架构搜索(NAS)是一种有前途的解决方案,用于自动设计神经网络模型的结构和参数。为了解决硬件设备部署和资源有限硬件设备上的低延迟推理问题,提出了HAT方法,通过离线训练延迟预测器来加速搜索速度。HAT还观察到关注多个编码层对解码层是有益的,不同的硬件对模型有不同的偏好,这为不同硬件条件和延迟要求下的Transformer模型提供了一种高效的NAS方案。同时,它可以很好地与其他压缩加速方法相结合。
7 动态网络(DyNN)
扩大语言模型的规模可以提升其在自然语言处理任务上的性能,但会带来巨大的计算成本和内存需求。动态神经网络(DyNN)仅使用网络的一部分来处理每个输入,使得整个模型在资源受限的环境下更灵活、更有效地满足计算需求。目前对DyNN的研究主要包括早期退出、级联推理和专家混合(MoE)。早期退出是为了在深度神经网络(DNN)的早期层中动态终止推理过程,从而降低计算成本并提高响应时间。级联推理利用一系列不同规模的语义模型来处理不同复杂程度的请求。MoE在多个子网络上横向扩展前馈网络(FFN),其中只有一个或少数几个子网络在单个前向传递过程中被激活。MoE被广泛纳入当今LLMs的架构中,以提供高效而强大的服务。表5中总结了一些具有代表性的MoE方法。
表5 各种MoE方法总结
7.1 将MoE与其他高效技术结合使用
在稀疏MoE模型领域,研究人员探索了将传统模型压缩技术引入MoE模型的几种方法。其中,Switch Transformer将大型稀疏模型转化为小型密集模型,DeepSpeed-MoE将大型教师MoE模型转化为具有较浅专家网络的小型学生MoE模型,并采用阶段式KD训练策略。MoE模型的剪枝旨在去除冗余或影响较小的组件,而Z-code尝试了两种专家选择方法:随机选择和基于验证集利用率的选择。这些方法在保留MoE模型质量的同时,减少了内存消耗和资源消耗。实验结果表明这些方法的有效性。
8 加速框架
随着Transformer模型的发展,各种模型层出不穷,但由于应用场景不同,对延迟、吞吐量、内存等有额外要求,导致模型难以部署。本文介绍了一些针对LLM的推理加速框架,这些框架在不同场景下有效提高了模型的效率。我们将框架分为一般框架和专用框架,并根据泛化性进行了分类。
表6 各种加速框架的总结
来源 | 数据分析及应用
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓