【文献阅读】Faster and Lighter LLMs: A Survey on Current Challenges and Way Forward

更快更轻量级的大语言模型:当前挑战与未来发展方向综述

摘要

尽管大语言模型(LLMs)表现出色,但由于推理过程中需要大量的计算资源和内存,其广泛应用面临挑战。最近在模型压缩和系统级优化方法方面的进展旨在提高大语言模型的推理效率。本综述概述了这些方法,重点介绍了最新进展。通过对LLaMA(/2)-7B模型的实验,我们评估了各种压缩技术,为在统一环境中高效部署大语言模型提供了实用见解。对LLaMA(/2)-7B模型的实证分析突出了这些方法的有效性。基于综述的见解,我们找出了当前的局限性,并讨论了提高大语言模型推理效率的潜在未来方向。我们在https://github.com/nyunAI/Faster-LLM-Survey上发布了用于复现本文结果的代码库。

针对的评估方法:

A100Exllama:研究使用GPTQ量化的Exllama引擎。

A100Exllamav2:探索最新的ExllamaV2,该版本具有EXL2和GPTQ量化功能。

A100Llamacpp:审视Llama架构的C++实现,以提升速度。

A100MLCLLM:探索MLCLLM,该分支提供广泛的硬件和平台支持。

A100TGI:研究用于大语言模型(LLM)生产推理的文本生成推理工具包。

A100VLLM:探索VLLM。

A100TensorRTLLM:研究英伟达的TensorRTLLM推理引擎。

A100GPTQ:通过AutoGPTQ探索GPTQ量化方法。

A100HF:研究多种量化方法,以及每种方法的基线生成速度。

A100Omniquant:探索OmniQuant量化方法。

Hugging Face模型中心(HF Hub)获取的模型和规模。

1. 引言

以GPT系列[Brown等人, 2020]和LLaMa系列[Touvron等人, 2023a; Touvron等人, 2023b]为代表的大语言模型的出现,为文本理解、摘要、语言翻译和生成等各类语言相关任务带来了一场新的革命。这些模型通常包含数十亿个参数,在捕捉自然语言中的复杂模式、精细上下文和语义表示方面表现卓越。因此,它们已成为各种应用中不可或缺的工具,推动了人工智能、信息检索和人机交互等多个领域的发展。

尽管大语言模型性能无与伦比,但其大规模应用受到了巨大的计算和内存需求的阻碍,这给在资源受限的环境中进行部署带来了挑战。例如,加载一个LLaMa-70B 模型,不包括模型推理所需的内存,就需要140GB的VRAM。对高效部署的需求促使最近出现了针对大语言模型的模型压缩和系统级修改技术的研究。这些早期工作已经找到了提高大语言模型推理效率的潜在途径。然而,目前的改进往往伴随着模型性能的显著下降,需要探索新的研究方向以找到解决这一问题的理想方案。

最近的一项综述研究简要概述了最近提出的大语言模型压缩 方法,以及用于基准测试的评估指标和数据[Zhu等人, 2023]。然而,为了进一步推动研究朝着提高大语言模型实际推理效率的方向发展,仍缺乏全面的研究。在这篇综述文章中,我们探索了通过模型压缩和系统级优化来提高大语言模型效率的现有方法。为了公平地比较各种方法,我们对应用于LLaMA(/2)-7B 模型的不同压缩技术进行了实证观察。我们的评估包括那些具有实际优势的方法,涵盖了现有文献中不同推理引擎提供的结构化剪枝、量化和系统级优化方法。我们分享了从这些实验中获得的宝贵见解,以帮助人们对高效的大语言模型有更实用的理解。此外,我们公开了与实验相关的代码和基准测试。我们还研究了当前深度学习通用压缩方法以及专门针对大语言模型提出的压缩方法所面临的困难,并讨论了克服这些问题的潜在研究方向。

总体而言,本文的贡献如下:

我们简要概述了模型压缩领域,重点介绍了对更轻量级、更快的大语言模型领域 做出显著贡献的关键方法。

作为模型压缩的补充,系统级修改在加速大语言模型推理方面发挥了重要作用,我们也对这些方法进行了讨论。

为了提供实际视角,我们在标准化设置下对知名的大语言模型压缩方法进行了实证分析。从中得出的见解有助于根据部署环境 对大语言模型压缩方法的选择做出明智决策。

基于我们的综述和实证分析得出的见解,我们系统地指出了现有局限性,并提出了实现大语言模型推理最优效率的可行途径。

2. 模型压缩:概述

模型压缩技术已成为一个关键的研究领域,为提高资源密集型深度学习模型的效率提供了有前景的解决方案。开发高效大语言模型(LLMs)的领域可以从该领域的见解和方法中显著受益。在深入探讨构建高效大语言模型的主题及其相关现有工作之前,我们先概述一些深度学习模型压缩中常用的方法。下面,我们首先介绍传统的模型压缩方法,并简要讨论与传统深度学习模型相关的发展。随后,我们概述现有文献中与大语言模型压缩相关的工作。

2.1 深度模型的压缩

架构剪枝是指通过消除冗余或影响较小的连接、神经元或整个层,系统地降低神经网络复杂度的过程[Janowsky, 1989]。该技术旨在提高模型效率、降低计算成本并减轻过拟合,同时不会显著影响性能。剪枝涉及根据各种标准识别并删除连接或单元,例如权重大小[Li等人, 2016]、激活模式[Molchanov等人, 2016]或敏感性分析[Sanh等人, 2020]。剪枝后的模型保留其关键特征,同时实现更紧凑的表示,这在计算资源有限的场景中(如边缘设备或移动应用)尤为有价值。

在广泛研究的剪枝方法中,-[Frankle和Carbin, 2019]对权重初始化和剪枝后的网络结构对神经网络剪枝的影响提供了基本见解。-[Liu等人, 2017; Chavan等人, 2022]引入了一种方法,通过对通道缩放因子施加稀疏性正则化,对卷积神经网络(CNNs)中的通道进行剪枝,并减小Transformer中权重维度的大小。移动剪枝通过利用一阶信息 (即保留远离零的权重)对BERT[Kenton和Toutanova, 2019]模型进行大规模剪枝,与保留较大权重的零阶方法 形成对比。[Lagunas等人, 2021]在Transformer层的权重矩阵中引入块结构 ,并对其应用移动剪枝 以实现实际的加速。最近,[Jiang等人, 2023a]认为对于一阶剪枝微调多余 的,并提出了静态模型剪枝(SMP) ,这是一种无需微调的语言模型剪枝方法

量化降低了神经网络中数值的精度,通常是从32位浮点数降低到较低的比特宽度表示,例如8位整数,从而缩小了模型的内存占用,加快了推理速度,并能够在计算资源有限的硬件上更高效地部署。在量化过程中,权重和/或激活值被舍入到一组离散的值,这在计算效率和模型准确性之间进行了权衡。即使精度降低,最先进的量化方法也能够将对性能的影响降至最低。

量化感知训练(QAT) [Ni等人, 2020]涉及在整个训练过程(包括前向传递和反向传播)中对模型参数进行量化。LSQ[Esser等人, 2019]为每个权重提出了一个可学习的步长,与其他网络参数一起进行学习。[Tailor等人, 2021]引入了一种与架构无关的图神经网络剪枝 方法。另一方面,训练后量化(PTQ )[Banner等人, 2019]找出权重和激活的最优裁剪范围通道比特宽度设置 。OSME[Choukroun等人, 2019]提出了一种训练后量化方法,该方法最小化量化张量与相应浮点张量之间的12 距离。

知识蒸馏旨在训练一个计算效率高的模型(通常称为学生模型),以模仿更大、更复杂的模型(称为教师模型)的预测。这个过程涉及将教师模型中嵌入的知识(通常以其软概率或中间表示为特征)转移到学生模型中。当在计算资源有限的场景中部署模型时,知识蒸馏特别有用,因为它能够创建较小的模型,同时保留较大模型的性能。此外,知识蒸馏有助于解决过拟合等问题,提高泛化能力,并便于将深度复杂模型学到的知识转移到更简单的架构中。

知识蒸馏技术可分为三类,即基于响应的、基于特征的和基于实例关系 的。基于响应的蒸馏[Hinton等人, 2015]训练学生模型模仿教师模型的最终输出,而基于特征的蒸馏[Tian等人, 2022]训练学生模型模仿教师模型的中间特征图 。基于关系 的蒸馏更进一步,使用一个目标函数来建模学生和教师网络各种特征图 之间的相似性相关性。最近,[Chen等人, 2023b]在预训练阶段使用知识蒸馏,将BERT模型的大小缩小了40%,使其速度提高了60%,同时保留了97%的语言理解能力。

低秩分解通过将权重矩阵分解为较小维度的矩阵来降低模型的计算复杂度,这些较小的矩阵反过来近似初始的满秩矩阵。这也减少了模型中需要存储的参数数量,并加快了矩阵乘法运算,从而降低了内存和延迟需求。

[Jaderberg等人, 2014]提出了一种与架构无关的方法,使用张量分解和判别式微调来加速卷积层;而[Denton等人, 2014]提出了结合低秩分解的聚类方法,以实现更快的卷积神经网络。[Sainath等人, 2013]研究了声学模型中的低秩矩阵分解,将分解应用于网络的最后一层。[Lebedev等人, 2015]引入了规范多adic分解,通过非线性最小二乘法计算,用于加速卷积神经网络。[Tai等人, 2016]提出了一种全局分解优化算法,因此比迭代方法表现更好。

2.2 大语言模型的压缩

与传统深度学习模型相比,大语言模型的压缩是一项独特的挑战,主要原因在于大语言模型的规模巨大。许多已有的压缩方法依赖于在压缩阶段执行微调步骤以恢复损失的性能这一范式。然而,由于大语言模型规模庞大,这种方法在应用于大语言模型时遇到了显著的限制,这就需要将大语言模型压缩作为一个独立的新研究领域,转变处理范式。

剪枝架构

LLM-Pruner[Ma等人, 2023]利用单个梯度步骤进行泰勒级数展开,以估计预训练大语言模型的重要部分。LoRAPrune [Zhang等人, 2023]通过使用LoRA[Hu等人, 2021]权重的梯度,性能优于LLM-Pruner,提供了计算效率。LoRAShear[Chen等人, 2023a]识别出大语言模型中的依赖关系,将可训练变量分为不同组,并通过剪枝和微调实现压缩。Sheared LLaMA [Xia等人, 2023]引入了有针对性的结构化剪枝和动态批量加载,用于端到端的组件移除。FLaP[An等人, 2023]是一种无需微调的结构化剪枝方法,它使用基于波动的度量来确定各种权重列的重要性得分。

非结构化剪枝方法,如SparseGPT[Frantar和Alistarh, 2023],采用一次性技术,无需微调。WANDA[Sun等人, 2023]根据权重值与激活输入的乘积对权重进行剪枝,无需微调。最近的另一项工作建议融合OBS[Hassibi等人, 1993]和OBD[LeCun等人, 1989]准则来选择权重,并根据从海森矩阵导出的敏感性确定层的稀疏性[S.等人, 2023]。虽然上述结构化和非结构化方法显示出了潜力,但在实现的压缩水平下,观察到的性能下降仍然相对较高。需要进一步努力开发能够实现高效大语言模型的剪枝方法。

量化

这类方法在大语言模型的压缩 方面相对更为成功。LLM.int8() [Dettmers等人, 2022]使得在训练后将更高比特的大语言模型权重转换为8位而不降低性能成为可能。他们提出了一种两阶段量化方案 ,包括向量量化和对异常值的混合精度分解。SmoothQuant [Xiao等人, 2023]是一种无需训练的训练后量化方法,将大语言模型的权重和激活都降低到8位。QLoRA[Dettmers等人, 2023]引入了4位NormalFloat(NF4)和双重量化,以节省内存,同时不损失模型性能。OmniQuant[Shao等人, 2023]引入了可学习权重裁剪(LWC)和可学习等效变换(LET) 。LWC通过优化裁剪阈值防止权重达到极端值,而LET通过LET对权重而非激活进行量化来处理激活异常值。SqueezeLLM [Kim等人, 2023]通过使用基于敏感性的非均匀量化 方案实现了高达3位的压缩,其中使用二阶信息 来找到最优的比特精度 。GPTQ[Frantar等人, 2023]使用二阶信息将高达1750亿参数的模型压缩到每个权重低至3位,同时精度损失最小,将之前提出的8位方法推向了更小的尺寸。[Lin等人, 2023]观察到保留1%的关键权重 有助于减少量化性能的下降。他们提出了激活感知权重量化(AWQ) ,该方法找到最佳的通道缩放 ,在通用语言建模和特定领域任务中优于现有技术。ZeroQuant-FP[Wu等人, 2023]专注于浮点量化,发现对于激活,FP8优于INT8,对于权重,FP4与INT4相当。他们还在方法中纳入了低秩补偿 以进行增强。EXL21提出了一种混合精度量化算法,在测量量化误差时为每个层计算不同的精度类型。他们的算法在测量过程中保存所有的尝试和相关的错误率,给定一个目标精度,该算法通过为每个层的模块选择具有最低错误率的目标精度来对模型进行量化。GGUF/GGML2提出了一组混合量化 以实现K-Quants,即大部分为K量化的输出。例如,4位K-Quant对一些注意力层和多层感知器层使用6位,对其他层使用通常的4位。

LLM-QAT[Liu等人, 2023]提出了一种无数据蒸馏方法,他们查询预训练模型 以生成数据,然后使用蒸馏损失 训练量化的学生模型。除了权重和激活 之外,通过对KV缓存进行量化,他们可以将7B、13B和30M的LLaMA模型量化到4位。BitNet[Wang等人, 2023a]引入了一种1位大语言模型Transformer架构。它主要用BitLinear替换PyTorch中的标准nn.Linear来训练1位权重。随着模型规模的增加,它全面优于在FP16上训练的同类模型。[Tao等人, 2022]提出了令牌级对比蒸馏,并使用动态缩放使量化器适应不同的模块。

知识蒸馏

在知识蒸馏方法中,白盒和黑盒方法都被用于压缩大型开源语言模型。广义知识蒸馏(Generalized KD)[Agarwal等人, 2023]不是仅仅依赖于一组固定的输出序列,而是利用教师对学生自生成输出序列的反馈,在这些序列上训练学生模型 。TED[Liang等人, 2023]采用两阶段训练过程。在第一阶段,特定任务损失训练学生模型和教师模型中的过滤器。在第二阶段,学生模型及其过滤器使用任务感知的逐层蒸馏损失,以及学生-教师损失和特定任务损失进行训练。在另一项工作[Jha等人, 2023]中,学生模型用教师模型的一部分层 进行初始化 ,并在与教师模型相同的语料库 和目标上进行训练。这有助于在不使用任何蒸馏损失的情况下实现与任务无关的压缩。

其他蒸馏方法包括黑盒技术,如Lion[Jiang等人, 2023b],其中学生网络通过由模仿、判别和生成阶段组成的三阶段对抗循环进行训练。在其判别阶段,使用一个专有大语言模型来 寻找硬指令,即学生输出与教师输出有显著差异的指令。最后一步,专有大语言模型生成更多类似于硬指令的样本,学生在这些样本上进行训练以完成循环。DISCO[Chen等人, 2023b]是一种反事实知识方法,其中给专有大语言模型一个提示,并使其在提示中生成反事实增强。然后,特定任务的教师模型过滤掉这些增强,学生模型在这些增强上进行训练。SCOTT[Wang等人, 2023b]使用对比解码从教师模型生成推理依据以及通常的问答对,以训练学生模型。

低秩近似

TensorGPT [Xu等人, 2023]通过TensorTrain分解压缩大语言模型的嵌入层,并将其存储在简化的矩阵乘积态中,可以以分布式 方式进行计算。LoSparse [Li等人, 2023]将大语言模型中的权重矩阵近似为一个稀疏矩阵和另一个低秩近似矩阵之和。低秩矩阵通过奇异值分解捕捉神经元之间的表达特征,而其余特征由稀疏矩阵捕捉。[Kaushal等人, 2023]表明,将大语言模型中的矩阵简单分解为两个稀疏低秩矩阵的乘积,可以在对困惑度影响较小的情况下实现显著的压缩和加速。

总体而言,使用低秩近似来压缩大语言模型的研究方向是新的,但显示出提高推理效率的潜力。最近的两项工作表明,低秩近似通常可以提高推理能力,并通过在权重空间[Sharma等人, 2023]和/或潜在特征空间[Chavan等人, 2023]中进行逐层秩降低来实现压缩。这些方法的优点是由于其对涉及矩阵的逐层处理方法,在压缩过程中需要的计算资源最少。然而,应该注意的是,使用这些技术实现的无损压缩水平仍然有限,从实际角度来看还需要进一步改进。

系统级方法

这里我们重点介绍那些改进大语言模型互补基础设施和运行时架构的方法。

分页注意力机制(Paged Attention)[Kwon等人, 2023]:受操作系统中经典虚拟内存和分页技术的启发,它允许在不连续的内存中存储连续缓存的键值对

张量并行(Tensor Parallelism):将一个张量划分为多个分片,分布到不同的GPU上,每个GPU独立并行处理分片,最后在步骤结束时同步结果。

流水线并行(Pipeline Parallelism):允许在层级别将模型垂直划分到多个GPU上,每个GPU处理一层或多层,实现流水线中不同阶段的并行处理。

CPU/GPU卸载(CPU/GPU Offloading)[Song等人, 2023]:将特定的权重层传输到GPU设备进行矩阵乘法,然后将计算结果传输回辅助设备(如内存),这样既优化了并行处理能力,又让辅助设备处理其余内存密集型计算。

Flash Attention(/v2)[Dao等人, 2022; Dao, 2023]:通过输入块平铺采用增量式softmax归约 来优化注意力计算,避免对整个输入的访问,并通过存储前向传播中的softmax归一化因子来加速反向传播,无需从高带宽内存(HBM)读取大的注意力矩阵。在Flash Attention的基础上,FlashAttention2最小化非矩阵乘法的浮点运算次数,优化在线softmax技术,在序列长度上引入并行性,并优化每个线程块内的线程束之间的工作负载划分以减少同步,从而在现代GPU上实现性能优化。

融合操作 (Fused Operations):将多个计算任务合并,比如合并现有内核创建新内核 ,以最小化多次内核API调用带来的开销。
推测解码(Speculative Decoding)[Leviathan等人, 2023]:从一个选定的较小模型高效生成多个未来令牌,并使用较大模型并行验证它们,实现每步同时解码多个令牌。

这一类别中值得注意的实现包括vLLM [Kwon等人, 2023]、Llama.cpp、ExLlama(/v2)、TensorRT-LLM、MLC-LLM、PowerInfer[Song等人, 2023]等 。vLLM通过一个将逻辑和物理KV块分离的KV缓存管理器采用分页注意力机制,实现了KV缓存的动态增长。ExLlama(/v2)实现了融合内核,以最小化在不连续块上操作时的启动开销和API调用开销。Llama.cpp是LLaMA架构的底层C/C++实现,支持多种BLAS后端以实现快速处理,它基于GGUF量化方案并支持CPU和GPU卸载。MLC-LLM专注于跨平台原生部署的编译器加速和运行时优化,它将模型执行逻辑 封装在一个容器------中间表示模块(IRModule) 中,该模块捕获计算的层次结构 以进行优化和代码生成,它采用分页注意力机制、融合操作 ,并为多种硬件平台自动生成优化内核代码 。TensorRT-LLM实现了带QKV元素即时预处理的掩码多头注意力机制,支持分页注意力、INT8/FP8缓存、动态批处理以及张量/流水线并行以加速,动态批处理与操作融合进一步提升了性能。PowerInfer采用GPU-CPU混合方法,将持续激活的热神经元预加载到GPU上以实现快速访问,在CPU上计算可变的冷神经元,并集成自适应预测器和神经元感知稀疏算子以优化效率。

总体而言,这些方法与模型压缩方法相辅相成,提高了大语言模型的运行时效率。这些推理引擎展示了优化软件架构和基础设施(作为模型压缩的补充)的可行性和优势。

3. 实验分析

如前所述,存在多种模型压缩方法,对于何时使用哪种方法,或者哪种方法优于其他方法,目前尚无明确共识。因此,我们在此对不同的大语言模型压缩方法进行实验分析,并给出重要见解。在所有实验中,我们提供了实际的推理指标,包括模型权重内存(WM)、运行时内存消耗(RM)、推理令牌速率以及在Nvidia A100 40GB GPU上计算的WikiText2困惑度。

LLaMA-7B的剪枝。在本次分析中,我们使用三种最新的大语言模型剪枝方法对LLaMA-7B模型进行结构化剪枝研究。表1展示了这些方法在20%和50%稀疏度下的性能得分。值得注意的是,所有压缩方法在较低稀疏度下的困惑度方面都表现出有效性能。Wanda-SP表示如[An等人, 2023]所述的适配结构化剪枝的Wanda。明显的是,Wanda-SP和LLM-Pruner在50%稀疏度时影响模型性能,结果并不理想。另一方面,FLaP和经过微调的LLM-Pruner在这个稀疏度下表现良好。比较RM、WM和困惑度,这两种方法表现相似,FLaP在性能上略优于基于微调的LLM-Pruner。需要注意的是,除了性能更优之外,FLaP无需训练,这使其成为大语言模型剪枝的首选方法。

量化后的LLaMA2-7B。表2展示了不同量化方法对提高大语言模型推理效果的对比研究。对于每种量化方法,我们默认使用Pytorch作为推理引擎,在Pytorch不支持时使用专有引擎。可以看出,所有模型的困惑度大多保持不变,仅有轻微下降。正如预期的那样,较低的精度导致较低的工作内存和运行内存消耗。重要的是,我们发现4位量化时,OmniQuant能最大程度保持性能。然而,GPTQ和AWQ在不同引擎上有更广泛的支持。另一个有趣的发现是,即使低于4位的量化会导致模型性能下降,但得到的模型仍优于在相似压缩水平下通过剪枝得到的模型

| 方法 | 硬件支持 | 量化类型 | WM (GB) | RM (GB) | Tokens/sec | 困惑度 |

LLaMA2-7B的系统级优化。我们还考虑了系统级优化方法,并通过采用现有文献中提出的各种推理引擎来提高大语言模型的推理效率。相关结果见表3。可以看出,不同方法在不同性能指标上各有优势。TensorRT-LLM在所有指标上都表现出色,在NVIDIA GPU上尤为突出。它在GPTQ 4位量化时提供了最佳的令牌速率,然而,高效的4位支持仅适用于新硬件(安培及更新系列的GPU支持4位运行时)。同样可以明显看出,在相同精度下,GPTQ比AWQ速度更快,但困惑度略差。此外,MLC-LLM与TensorRT-LLM相比性能似乎略低,但其对多种硬件的兼容性使其在特定场景中成为不错的选择。

4. 挑战与未来方向

大规模剪枝/蒸馏计算成本高昂 。架构剪枝和知识蒸馏策略在压缩深度学习模型方面广受欢迎。然而,这些技术需要进行多个微调步骤,其计算需求可能与初始训练步骤相当,甚至更高。在大语言模型的背景下,鉴于其本身巨大的计算需求,这使得这些技术变得不切实际。虽然已经做出了一些努力来应对这一挑战,但即使是少量的压缩增益,也往往会导致显著的精度下降。规避该问题的可能方法包括:

重新审视无需训练的剪枝方法 ,探索其在大语言模型中的潜力。例如,知识保留剪枝专注于减少网络中不需要的知识上下文,而非消除权重,可以对其进行改进并适配大语言模型。由于这类方法大多无需训练,它们可以在仅增加少量计算成本的情况下实现高效的大语言模型。

探索大语言模型的逐层剪枝。逐层剪枝的直接实现需要根据回归损失定义局部损失函数,并在确保局部输出可重现的同时压缩子网络。然而,在这种方法中,早期层的小误差很容易传播到后期层,导致压缩网络性能不佳。

大语言模型的局部蒸馏 。克服蒸馏问题的一个潜在解决方案是开发局部蒸馏方法。该方法不是将整个教师大语言模型的信息压缩到一个较小的学生模型中,而是在较小规模的学生子网络中学习教师网络的局部部分。然后可以设计一种策略,将这些子网络组合成一个完全压缩的学生大语言模型。这种方法有望成为解决与大语言模型蒸馏相关计算挑战的潜在方案。

培育较小的语言模型以达到期望性能。压缩大语言模型的主要障碍在于微调过程中的计算挑战,这归因于模型的巨大规模。一个替代且具有挑战性的研究方向是使用明确的神经网络生长策略,将较小的语言模型(SLMs)培育成大语言模型。这种方法避免了训练完整规模大语言模型的需求,并且最大的计算负担由通过小型语言模型(SLM)成长得到的最终压缩大语言模型决定。

在剪枝时使用参数高效微调(PEFT)方法进行微调。 为了解决剪枝过程中全规模微调的挑战,另一种方法是采用PEFT方法。与传统方法不同,PEFT不需要更新模型权重,只更新添加的掩码和PEFT参数[Zhang等人, 2023]。这显著降低了微调过程的计算强度。然而,目前PEFT方法在实现大语言模型的大规模压缩方面存在局限性,这表明需要进一步研究开发专门用于压缩大语言模型的PEFT方法。

即时量化-反量化使推理变慢 。在推理过程中,使用诸如FP4等较低精度的浮点格式在内存效率和计算速度方面带来了双重挑战。虽然当代硬件通常支持FP16和INT8 等格式,这些格式能够大幅减少内存占用,但较低精度的转换通常需要量化(Quant)和反量化(Dequant)操作 。这些操作会带来计算开销,与使用像FP16这样的较高精度格式相比,会导致推理过程变慢。因此,虽然采用较低精度格式可以提高内存效率,但它们会对推理速度产生不利影响,需要在两者之间找到一个合适的平衡点。一个潜在的解决方案是开发简化的量化 反量化操作,旨在减轻推理速度方面的开销。另一种策略是根据所使用硬件的规格来选择合适的精度格式。同时,硬件方面的进步也至关重要,需要更多流行硬件支持较低精度格式。

逐层低秩近似中的秩选择困难 。虽然低秩近似 在大语言模型压缩方面展现出巨大潜力,但这种方法伴随着一系列挑战,特别是在确定控制秩降低过程的超参数方面。对于如何选择低秩近似策略,目前还没有一个明确的共识,难以将该方法推广到不同的模型。此外,求解系统级分解系统在计算上的不可行性增加了复杂性,使得在保持性能的同时实现模型大小的最优缩减变得具有挑战性。

必须认识到,确定在不同层中保留的最优秩 并非一个简单的超参数搜索问题。其中许多方法计算成本高昂,在大语言模型的背景下尤其如此。因此,在采用低秩近似时,有必要探索和开发一种有效的策略搜索合适的秩

现有评估指标可能不太适用。在压缩大语言模型的同时保持其处理广泛上下文信息的能力是一项挑战,需要开发合适的评估指标 来解决这个问题。另一个因素是保真度的损失。激进的压缩可能会导致模型保真度的显著损失,影响语言模型生成准确且与上下文相关输出的能力。大语言模型的几个这样的特性需要在其压缩变体中得到体现,而这只能通过正确选择指标来识别。

Python作为一种解释型语言会导致执行时间较慢。虽然Python是一种通用且广泛使用的编程语言,但它本质上是解释型的,这可能会导致性能瓶颈,特别是在深度学习等计算密集型任务中。CPython(默认的Python解释器)中的全局解释器锁(GIL)进一步限制了多个线程的并发执行,限制了该语言充分利用多核处理器潜力的能力。这凸显了寻求替代解决方案以提高深度学习工作流程速度的必要性。

随着优化库和框架(如TensorFlow和PyTorch)的发展,其中一些问题已经得到解决,这些库和框架结合了用C++或CUDA等低级语言实现的高性能内核。然而,Python在其他几个方面仍然限制了模型性能。一个典型的例子是Llama.cpp ,将LLaMA-7B转换为C++实 现后,速度得到了显著提升。这种转变体现了在深度学习模型的背景下选择性能优化语言的影响。此外,基于Rust的模型因其卓越的速度而受到关注。Rust既注重内存安全又注重性能,在加速计算方面表现出有效性,特别是在速度至关重要的场景中。因此,为了优化推理速度,从Python转向C++、Rust或其他类似语言可能是未来的一个发展方向。

**伦理和偏差问题不一定能得到保证。**大语言模型最初是在广泛的数据集上进行训练的,以确保模型在统计上对任何特定情况都没有偏差。然而,在模型压缩过程中,通常会使用特定的数据集。由于大语言模型可能会丢失一些与目标数据集无关的通用特征,通过标准评估实践有可能引入未被注意到的偏差。因此,需要开发创新的评估策略,以确保在生成的压缩大语言模型中尽量减少伦理问题和偏差。

5. 结论

总之,我们的综述广泛探讨了大语言模型的压缩,涵盖了模型级和系统级的效率提升。我们讨论了各种压缩方法,并通过对LLaMA(/2)-7B进行的实验提供了实际见解,为优化大语言模型提供了有价值的信息。对综述和实验结果的分析突出了当前在提高大语言模型推理方面存在的瓶颈,这表明为了实现高效性需要进一步的发展。我们期望这篇综述能够成为推动该领域前进、实现高效大语言模型推理目标的一块基石。

相关推荐
阿正的梦工坊17 分钟前
PyTorch 中的 nn.ModuleList 是什么?与普通列表有啥区别?
人工智能·pytorch·python
HXQ_晴天29 分钟前
深度学习中卷积层(Conv)、BN层(Batch Normalization)和 ReLU层(Rectified Linear Unit)的详细介绍
人工智能·深度学习·batch
武狐肆骸29 分钟前
第十三站:卷积神经网络(CNN)的优化
人工智能·神经网络·cnn
lihuhelihu33 分钟前
精神分裂症患者GAF评分的可视化分析|使用集成学习模型 LightGBM
人工智能·python·机器学习·scikit-learn·集成学习·sklearn·boosting
从零开始学习人工智能34 分钟前
关于大型语言模型的结构修剪
人工智能
椒颜皮皮虾྅34 分钟前
【OpenVINO™】在 Intel Ultra AI PC 设备上使用 OpenVINO™ C# API本地部署YOLOv11与YOLOv12
人工智能·c#·openvino
AIGC_ZY41 分钟前
torch.einsum 的 10 个常见用法详解以及多头注意力实现
人工智能·pytorch·python
会飞的AI1 小时前
LlamaFactory-webui:训练大语言模型的入门级教程
人工智能
wyz09231 小时前
python 之协程笔记
开发语言·笔记·python
小杨4041 小时前
LLM大语言模型一(概述篇)
人工智能·llm·aigc