当前位置: 首页 > news >正文

【文献阅读】Advances and Challenges in Large Model Compression: A Survey

ACM, 2024

大模型压缩的进展与挑战:综述


中国科学院沈阳自动化研究所机器人学国家重点实验室;中国科学院网络化控制系统重点实验室;中国科学院机器人与智能制造创新研究院

摘要

随着计算机技术的发展,大模型已从早期的简单算法逐渐演变为如今具有庞大参数规模和高计算复杂度的复杂深度神经网络。这些大模型极大地推动了人工智能技术的发展,在图像、语音、文本等领域实现了革命性的突破。然而,大模型对计算和存储的需求也在快速增长,这严重制约了它们在计算资源受限环境中的部署和应用。为解决这一问题,模型压缩技术应运而生并得到了极大的发展。本文从模型压缩技术的角度,系统综述了大模型压缩的关键技术、应用场景、面临的挑战及未来发展方向。我们的工作旨在为从业者和研究者提供该技术发展的详细参考,并强调模型压缩技术在推动轻量化人工智能发展中的重要作用1。
https://doi.org/10.1145/3675417.3675487

关键词

大模型、模型压缩技术、人工智能。

1 引言

在过去几年中,人工智能(AI)领域发生了巨大的变化,尤其是深度学习技术的快速发展。其中,大模型,特别是基于 Transformer 架构的大模型,已成为推动自然语言处理(NLP)、计算机视觉(CV)[1]、时间序列智能 [2] 等领域前沿发展的关键驱动力 [3]。

这些模型因其优异的性能和广泛的应用潜力而受到高度关注。然而,随着模型规模的不断增长,它们所需的计算资源和存储空间也呈指数级增长,这不仅增加了训练和部署的成本,还限制了大模型在资源受限环境中的应用范围 [4]。

在此背景下,模型压缩技术通过减小模型大小和计算需求,提供了一条可行的解决路径,从而使复杂模型在边缘设备上运行成为可能 [5]。因此,模型压缩与加速对于推动人工智能技术更广泛的应用至关重要,尤其是在资源受限的场景中。

尽管近年来该领域取得了显著进展,但现有研究的碎片化和多样性使得对这些技术的全面理解和评估变得复杂。有鉴于此,本文旨在概述大模型压缩的最新进展,识别现有研究中的挑战和差距,并提供一个系统的视角来理解和评估不同的模型压缩技术。

我们回顾了大模型压缩的重要技术和方法,探索如何在尽可能保持模型性能的同时有效减小模型大小和计算复杂度。我们详细探讨了各种模型压缩技术,如图 1 所示。我们还强调了该领域当前面临的挑战,并讨论了未来的研究方向,旨在促进大模型压缩技术的进一步发展和应用56。

图 1:大模型压缩方法概述。

2 评估标准

2.1 性能指标

这些指标主要关注模型在特定任务中的性能、效率、泛化能力和可扩展性,例如准确率、F1 分数等,它们反映了压缩模型在下游任务中的表现8。

2.2 效率指标

参数数量、FLOPs(浮点运算次数)、内存使用量和推理时间等关键指标可以量化模型压缩带来的计算和内存节省。这些指标反映了模型压缩在提高效率和降低资源需求方面的有效性9。

3 方法

3.1 剪枝

与传统模型剪枝一样,大模型剪枝也分为结构化剪枝和非结构化剪枝,如图 2 所示。

图 2:非结构化剪枝和结构化剪枝15。

Figure 2: Unstructured and structured pruning

非结构化剪枝以大模型的单个权重或单个神经元为剪枝目标。Frantar E 等人 [6] 首次提出了一种针对 GPT 系列模型的一次性剪枝方法 Sparsegpt,该方法通过使用 Hessian 矩阵近似计算每层中每个权重的剪枝难度,然后依次处理每层权重矩阵的每一列以选择要剪枝的权重,并利用未剪枝权重的更新公式来补偿剪枝误差10。

Sparsegpt 将 OPT-175B 和 BLOOM-176B 模型压缩到 50%-60% 的稀疏度,减少的权重超过 100 亿个。然而,Sparsegpt 需要权重更新过程,计算开销较高。基于此,Sun 等人 [7] 提出了一种简单高效的网络剪枝方法 Wanda。Wanda 考虑了输入特征的影响,并在输出方面进行权重比较,从而无需更新权重即可高效地对语言模型进行剪枝。Wanda 的速度是 SparseGPT 的 300 倍,并且压缩后的模型在零样本任务和语言模型任务上表现出与 SparseGPT 相当甚至更好的结果11。

结构化剪枝通过移除整个结构组件(如神经元、通道或层)来简化大模型,每次针对一整套权重。Ma 等人 [8] 提出了一种新的与任务无关的剪枝方法 LLM-Pruner,该方法实现了一种基于参数和结构重要性的重要性估计方法,能够自动识别语言模型内部的结构依赖关系,并基于估计的重要性对模型进行结构化剪枝。

还采用微调方法,用少量数据对剪枝后的模型进行再训练,大大降低了对大型训练语料库的依赖。即使在 LLaMA-7B、Vicuna-7B 和 ChatGLM-6B 这三个大型语言模型上移除 20% 的参数,压缩后的模型仍能保持原始模型 94.97% 的性能。Santacroce 等人 [9] 研究了结构化剪枝对生成式语言模型的影响。

它提出了一种新的基于唯一性正则化和全局 Top-v 剪枝的方法 GUM,用于对生成式模型的 MLP 层进行结构化剪枝。作者通过实验发现,与随机剪枝相比,现有的结构化剪枝方法在提高模型性能方面并不如预期有效。它还分析了剪枝方法在保持模型质量和多样性方面的两个重要标准 —— 唯一性和显著性。在原始模型超过 50% 参数被剪枝的情况下,准确率下降范围在 1%-5% 之间,训练时间几乎可以减半。这项研究为理解和改进生成式模型的结构化剪枝奠定了基础12。现有方法仍存在准确率和鲁棒性显著下降的风险,一些超参数需要大量实验进行调优。模型的稳定性可能会受到影响,需要再训练的方法仍然占用大量资源13。

图 3:知识蒸馏14。

3.2 知识蒸馏

如图 3 所示,大模型的知识蒸馏目标与传统模型相同。大模型的知识蒸馏与传统知识蒸馏目标一致,都是旨在将知识从大模型(通常为教师模型)迁移到较小的模型(学生模型)中16。

白盒:可以利用教师模型的内部层输出和参数进行更深层次的知识迁移。Gu 等人 [10] 提出了 MINILLM,它能够从大型生成式语言模型中高效地蒸馏出更小规模的语言模型。在标准知识蒸馏方法中使用反向 KL 散度代替正向 KL 散度,更适合从生成式语言模型中进行知识蒸馏。Rishabh Agarwal 等人 [11] 提出了广义知识蒸馏(GKD),它能够有效缓解自回归序列模型在传统知识蒸馏中训练期间与推理期间输出序列分布不匹配的问题。

该方法不仅依赖于固定的输出序列集,还在学生模型自己生成的输出序列上对其进行训练,并利用教师模型对这些序列的反馈。在摘要生成、机器翻译和算术推理等任务上,教师模型的知识能够很好地迁移到小得多的学生模型中。基于白盒的知识蒸馏方法需要理解和处理教师模型的内部结构,这会使蒸馏难度增加1718。

黑盒:无需了解教师模型的内部结构,只需其输出即可进行蒸馏。huang 等人 [12] 提出通过上下文学习蒸馏将大型预训练语言模型的少量实例学习能力迁移到较小的模型中。将上下文学习目标与语言建模目标相结合,蒸馏模型同时学习从上下文示例中获取任务知识的能力。

在两种不同的少实例学习范式下进行的上下文学习蒸馏实验表明,该方法在两种范式下都取得了一致的改进。Namgyu Ho 等人 [13] 提出了一种新的方法 Fine-tune-CoT,将大型语言模型所具备的如链式思维(CoT)等复杂推理能力迁移到小型语言模型中。

该方法使用大型语言模型作为推理教师,生成多个推理解释作为训练样本,然后微调小型语言模型。这种方法使得原本仅存在于大型模型中的链式思维能力得以迁移,为小型模型在实际应用中实现推理功能开辟了可能性。Wang 等人 [14] 提出 SCOTT 利用对比解码从教师模型中获取支持正确答案的论据,并使用反事实推理训练学生模型,使其生成的论据与预测结果一致,经过训练的学生模型在保持与教师模型相当性能的同时,生成的论据更可靠。

还分析得出,通过纠正学生模型生成的论据,可以更好地对模型进行调试和改进。总体而言,SCOTT 知识蒸馏方法利用对比解码和反事实推理这两种主要技术,来训练出一个自洽且生成的论据与预测结果一致的学生模型。Li 等人 [15] 提出了两种提高学生模型泛化能力的策略:

1)更好地模仿教师模型的视觉表征空间,并促进视觉 - 语言对齐的一致性;

2)通过语言建模丰富教师模型的视觉表征空间,使教师模型中的语言表征包含更丰富、更细微的语义属性,从而在知识迁移的同时有效区分不同类别,并保留对未知概念的泛化能力19。Hou 等人 [16] 提出了一种新的动态 BERT 模型 DynaBERT,它可以通过选择不同宽度和深度的子网络来灵活调整模型大小和延迟,以满足不同边缘设备的硬件性能要求。

DynaBERT 首先训练一个可变宽度的 BERT 模型,然后利用知识蒸馏将知识从完整模型迁移到子网络,同时采用神经网络重连来保留在更多子网络中共享的重要注意力头和神经元。在不同的效率约束下,其子网络的性能优于其他 BERT 压缩方法20。

3.3 量化

传统模型量化相对简单,而大模型量化的复杂性和挑战主要源于其规模庞大、结构复杂、对精度要求高以及需要兼容广泛的硬件和应用场景。大模型的量化方法主要有两种,如图 4 所示21。

图 4:QAT 和 PTQ22。

量化感知训练(QAT)

量化目标被无缝集成到模型的训练过程中。Liu 等人 [17] 提出了 LLM-QAT,这是一项用于大模型量化感知训练的开创性工作,旨在进一步提高量化水平。它提出了一种利用预训练模型生成数据来训练量化学生模型的方法。这种方法能够高效地对量化后的大型语言模型进行训练,从而降低模型的计算成本和环境影响。

LLaMA 模型的权重可以压缩到原始大小的 1/4-1/8,且精度损失很小。Kim 等人 [18] 提出了 PEFT,它运行在两阶段过程中。在第一阶段,将每个全连接层的参数矩阵量化为低位整数矩阵和标量向量。在第二阶段,针对每个特定的下游任务微调标量向量。这种策略极大地压缩了模型大小,减少了部署时的推理延迟,并降低了所需的总体内存23。

训练后量化(PTQ)

在 LLM 的训练阶段完成后对其参数进行量化,无需再训练。Yao 等人 [19] 提出了 ZeroQuant 方法用于大型 Transformer 模型的训练后量化,它采用组权重量化、令牌激活量化和逐层知识蒸馏来实现高效且低成本的量化。

采用 W8A8/16 量化 GPT-NeoX 20B 模型后,在 19 个任务上的平均准确率基本保持不变,而对 GPU 的需求从 2 个减少到 1 个,处理速度从 65 毫秒提高到 25 毫秒,整体效率提高了 5.2 倍。它能够在保持非常好的下游任务性能的同时,有效降低 Transformer 模型的计算成本和存储需求。Guo 等人 [20] 提出了一种新的量化算法 OliVe,用于加速大型语言模型。

OliVe 采用离群值 - 受害者对(OVP)量化策略,将离群值与其相邻的正常值配对,牺牲正常值来容纳离群值,从而实现更高效的硬件加速。与其他离群值感知量化方法相比,基于 OliVe 的加速器在速度和能效方面分别超过 4.5 倍和 4.0 倍,同时保持较高的模型准确率。在 GLUE 和 SQuAD 等语言模型任务上的 4 位量化结果优于其他方法。

Wei 等人 [21] 研究了离群值问题,这是 Transformer 语言模型低位量化中的一个重要瓶颈。该框架实现了 6 位 PTQ 和 4 位 QAT 接近浮点级别的准确率,超过了其他方法的现有水平。通过他们的分析发现,Layer Norm 中的 γ 参数在很大程度上放大了离群值,并且不同词汇元素产生的离群值影响也存在差异。

因此,他们提出了一种名为 “离群值抑制框架” 的方法。该框架由两个组件组成:γ 迁移和基于词汇元素的修剪。γ 迁移通过将 γ 参数迁移到后续模块来实现离群值抑制,且不会增加计算成本。

基于词汇元素的修剪利用不同词汇元素范围的差异,采用粗粒度和细粒度的方法高效地找到最佳修剪范围。该方法探索了离群值在量化中的影响机制,并设计了一套有效的抑制方法,为 Transformer 模型低位量化的进一步优化提供了有益的思路。所提出的 “离群值抑制框架” 可应用于这两种量化训练过程,以提高量化效果🔶1-62🔶1-63🔶。

3.4 低秩分解

它旨在通过将给定的权重矩阵分解为两个或多个维度显著更低的小矩阵来近似该权重矩阵,并且广泛应用于大模型的微调中。Chen 等人 [22] 提出了一种名为 DRONE 的低秩压缩方法,用于 BERT 等大型自然语言处理模型中的权重矩阵压缩。DRONE 通过对权重矩阵进行数据驱动的低秩分解来近似权重矩阵,它具有简单的闭式解,并且可以高效计算。在不同的任务和设备上,可以实现 1 倍到 15 倍不等的速度提升。

与其他方法结合使用时,压缩效果会进一步增强。该方法可应用于 BERT 模型中的全连接层和自注意力层,也可用于压缩蒸馏后的 BERT 模型,以进一步提高压缩率。Edalati 等人 [23] 提出使用 Kronecker 分解技术来压缩 GPT 模型。利用 Kronecker 分解来表示 GPT 模型中线性层的权重矩阵,从而减小模型的大小和计算开销。

Kronecker GPT-2 模型(KnGPT2)首先基于 GPT-2 模型的 Kronecker 分解版本进行初始化,随后进行非常轻量级的预训练,最后在下游任务上进行微调。与 DistilGPT2 模型相比,在参数数量相近的情况下,KnGPT2 模型在语言模型任务和 GLUE 任务上的性能都有显著提升🔶1-68🔶。

3.5 权重共享

权重共享通过在多个计算中重用相同的参数,提供了一种解耦计算和参数的方法。权重共享减少了推理内存

占用和参数数量。Sho Takase 等人 [24] 研究了 Transformer 网络内部层的权重共享策略,并提出了三种新的权重共享策略:顺序共享、循环共享和反向循环共享。通过机器翻译和自动语音识别等任务的实验结果表明,与仅将一层参数共享到所有层(即通用 Transformer)相比,该方法在参数数量、计算时间方面更高效,在结果方面也更优1。

3.6 早期退出(EE)

置信度估计通过内部分类器预测当前层的预测结果是否可靠,若可靠性超过阈值则可提前退出。[25] Wang 提出了 SkipBERT,它通过跳过 BERT 模型的浅层来实现更高效的推理。如果预测结果的最大 logit 分数高于预设阈值,则直接返回结果,无需经过后续的转换层。这种早期退出机制可以根据输入文本的长度和难度,选择是否跳过某些层的计算,从而进一步提高模型的推理速度。

内部集成利用多个内部分类器进行投票或预测一致性判断,以决定是否提前退出。例如,当多个连续的内部分类器的预测结果一致时,就可以提前退出。Zhou 等人 [26] 提出的基于耐心的早期退出(PABEE)方法,利用多个具有相同结构的内部分类器(线性分类器)的预测结果。

其核心思想是在每层中内置分类器,如果这些分类器的预测结果在一定步骤内保持一致,则提前终止推理。这既可以提高模型效率,又能增强模型的鲁棒性。实验结果表明,在 ALBERT 模型上使用该方法,在提高任务准确率的同时减少了推理时间。

学习提前退出通过学习模块预测当前层是否可以提前停止。例如,训练一个线性模块来预测当前内部分类器是否可以提前停止,若预测可以提前停止且可靠性超过阈值,则执行提前退出。Xin 等人 [27] 提出了一种新的微调策略和学习退出模块(LTE),使早期退出能够应用于除分类任务之外的回归任务。

学习退出(LTE)模块用于估计每层隐藏状态的确定性,以替代分类任务中用于提前退出决策的输出概率分布的置信度。LTE 模块是一个辅助模块,通过训练学习到隐藏状态嵌入空间的不同区域对应不同的确定性水平,为回归任务中的提前退出决策提供依据。

还提出了一种交替微调策略:在奇数轮采用联合微调目标,即同时微调所有分类器;在偶数轮采用两阶段微调目标,即仅微调最后一层分类器,保持前面层的参数不变。这种策略交替利用联合微调和两阶段微调的优势,在兼顾所有层分类器的同时保留最后一层分类器的高质量,从而实现更好的模型质量 - 效率权衡21-73🔷1-75🔷。

总体而言,早期停止与早期退出主要基于置信度输出、集成预测或学习模块,根据特定标准和阈值判断是否可以提前停止,以加快推理速度。早期退出不会减小模型大小(总参数数量),而是通过基于特定标准在特定层终止推理来加速模型推理。虽然它不会使模型变小,但减少了计算量并实现了加速3。

3.7 令牌跳过

Saurabh G 等人 [28] 提出了 PoWER-BERT,通过利用词向量令牌(中间转换块输出)中的冗余性,逐渐剔除不重要的词向量以减少计算量,从而提高 BERT 模型的推理速度,还设计了一种基于自注意力机制的词向量重要性评分策略,用于动态选择每个输入序列中应保留的词向量。

与 BERT-BASE 模型相比,该模型的推理速度至少提高 2.0 倍,最高可达 4.5 倍,同时将准确率下降控制在 1% 以内。令牌跳过与早期退出类似,都是在不减小预训练语言模型(PLM)大小的情况下对其进行动态加速,其核心思路是基于重要性跳过一些更高层次的令牌4。

4 挑战与未来展望

尽管模型压缩技术取得了显著进展,但仍面临诸多挑战。首先,如何在压缩模型的同时尽可能保持其性能,是模型压缩领域的核心问题。其次,不同的压缩技术适用于不同的场景和模型,如何选择合适的压缩策略以及如何有效组合不同的压缩技术,是实现模型压缩的关键。最后,随着深度学习模型结构的不断创新和发展,如何适应新的模型结构也是模型压缩需要面对的挑战5。

未来的研究方向包括:1)开发智能自动轻量化框架,在应用需求和硬件约束下自动匹配最优轻量化策略,减轻开发者负担并优化轻量化效果;2)探索新兴模型压缩技术的集成,例如生成对抗网络(GANs)或基于最新理论的算法的应用,以期提高性能和效率;3)研究跨模态学习环境下的轻量化方法,探索不同模态数据之间的联系和差异,并设计高效策略应对这些差异;4)将模型可解释性与轻量化相结合,在增强模型透明度和用户信任的同时为优化提供见解6。

5 结论

本研究深入分析了大模型压缩技术,展示了在资源有限的环境中有效运行 AI 应用的潜力。我们的成果不仅加深了对当前大模型压缩技术的理解,还突出了面临的挑战,为开发更有效、更智能的压缩策略提供了坚实基础。在大模型压缩领域,研究和应用前景依然十分广阔,我们期待未来能见证更多创新成果,为模型的高效部署和广泛应用做出贡献7。

http://www.xdnf.cn/news/1349317.html

相关文章:

  • `strncasecmp` 字符串比较函数
  • Unreal Engine IWYU Include What You Use
  • Vue 插槽(Slots)全解析2
  • ubuntu - 终端工具 KConsole安装
  • AI + 教育:个性化学习如何落地?教师角色转变与技术伦理的双重考验
  • SymPy 中抽象函数的推导与具体函数代入
  • Spring Ai 1.0.1中存在的问题:使用MessageChatMemoryAdvisor导致System未被正确的放在首位
  • c++最新进展
  • fdisk工具源码编译生成
  • DAY14-新世纪DL(DeepLearning/深度学习)战士:破(优化算法)2
  • 多线程下为什么用ConcurrentHashMap而不是HashMap
  • 【Android】 连接wifi时,强制应用使用流量
  • 【从零开始java学习|第九篇】方法的相关知识与练习
  • 【微服务的数据一致性分发问题】究极解决方案
  • 日志的配置
  • 一键部署openGauss6.0.2轻量版单节点
  • Spring原理
  • 最近 | 黄淮教务 | 小工具合集
  • 世界模型一种能够对现实世界环境进行仿真,并基于文本、图像、视频和运动等输入数据来生成视频、预测未来状态的生成式 AI 模型
  • Maxscript如何清理3dMax场景?
  • 打工人日报20250822
  • More Effective C++ 条款01:仔细区别 pointers 和 references
  • Java设计模式-外观模式
  • 滑动窗口+子串+普通数组算法
  • Elasticsearch搜索原理
  • HEVC(H.265)与HVC1的关系及区别
  • Unreal Engine UProjectileMovementComponent
  • 异步开发的三种实现方式
  • Unreal Engine USceneComponent
  • Unreal Engine Simulate Physics