内容目录

文章来源于互联网:万字综述大模型高效推理:无问芯穹与清华、上交最新联合研究全面解析大模型推理优化

近年来,大语言模型(Large Language Models, LLMs)受到学术界和工业界的广泛关注,得益于其在各种语言生成任务上的出色表现,大语言模型推动了各种人工智能应用(例如ChatGPT、Copilot等)的发展。然而,大语言模型的落地应用受到其较大的推理开销的限制,对部署资源、用户体验、经济成本都带来了巨大挑战。例如,将包含700亿参数量的LLaMA-2-70B模型进行部署推理,至少需要6张RTX 3090Ti显卡或2张NVIDIA A100显卡,以部署在A100显卡上为例,该模型生成512长度的词块(token)序列需要耗时超过50秒。
许多研究工作致力于设计优化大语言模型推理开销的技术,优化模型的推理延迟、吞吐、功耗和存储等指标,成为许多研究的重要目标。为了对这些优化技术有更全面、更系统的认知,为大语言模型的部署实践和未来研究提供建议和指南,来自清华大学电子工程系、无问芯穹和上海交通大学的研究团队对大语言模型的高效推理技术进行了一次全面的调研和整理,在《A Survey on Efficient Inference for Large Language Models》(简称LLM Eff-Inference)这篇万字长文综述将领域相关工作划分归类为三个优化层次(即数据层、模型层和系统层),并逐个层次地介绍和总结相关技术工作。此外,该工作还对造成大语言模型推理不高效的根本原因进行分析,并基于对当前已有工作的综述,深入探讨高效推理领域未来应关注的场景、挑战和路线,为研究者提供可行的未来研究方向。
                    图注:《A Survey on Efficient Inference for Large Language Models》(LLM Eff-Inference)
一、大模型推理效率瓶颈分析
目前主流的大语言模型都是基于Transformer架构进行设计。通常来说,一个完整的模型架构由多个相同结构的Transformer块组成,每个Transformer块则包含多头自注意力(Multi-Head Self-Attention, MHSA)模块、前馈神经网络(Feed Forward Network, FFN)和层归一化(Layer Normalization,LN)操作。
大语言模型通常自回归(Auto-regressive)的方式生成输出序列,即模型逐个词块生成,且生成每个词块时需要将前序的所有词块(包括输入词块和前面已生成的词块)全部作为模型的输入。因此,随着输出序列的增长,推理过程的开销显著增大。为了解决该问题,KV缓存技术被提出,该技术通过存储和复用前序词块在计算注意力机制时产生的Key和Value向量,减少大量计算上的冗余,用一定的存储开销换取了显著的加速效果。基于KV缓存技术,通常可以将大语言模型的推理过程划分为两个阶段(分别如下图中(a)和(b)所示):
  • 预填充(Prefilling)阶段:大语言模型计算并存储输入序列中词块的Key和Value向量,并生成第一个输出词块。
  • 解码(Decoding)阶段:大语言模型利用KV缓存技术逐个生成输出词块,并在每步生成后存储新词块的Key和Value向量。
                                          图注:大语言模型推理的两个阶段,即预填充阶段(a)和解码阶段(b)
大语言模型在实际部署应用中,我们通常关注其延时、吞吐、功耗和存储,而在大语言模型推理过程中,有三个重要因素会直接影响上述效率指标,分别是计算开销(Computational Cost)、访存开(Memory Access Cost)和存储开销(Memory Cost)。进一步地,本综述深入分析探究,并总结归纳除出影响上述指标和因素三点根本因素,分别为:
  • 模型规模:主流大语言模型庞大的模型规模会导致巨大的计算量、访存量和存储量;
  • 注意力算子:作为大语言模型的核心算子,注意力算子具有与输入长度呈平方关系增长的计算和存储复杂度;
  • 解码方式:主流的自回归解码方式导致极低的计算-访存比和硬件利用率,同时动态增长的KV缓存会导致碎片化的内存使用,对访存开销和存储开销带来增长。
                                图注:大语言模型推理效率瓶颈分析图示
二、大模型高效推理技术领域纵览
本综述将大语言模型高效推理领域的技术划分为三个层次,分别为:
  • 数据层优化技术:指通过优化输入提示词或规划模型输出内容优化推理效率。这类优化技术通常不需要修改模型本身,因此避免了大量的模型训练或微调开销;
  • 模型层优化技术:指通过设计高效的模型结构或模型压缩技术优化推理效率。这类技术通常需要对模型进行预训练或微调来恢复任务精度,同时通常对输出结果是有损的;
  • 统层优化技术:指通过优化推理引擎或服务系统优化推理效率。这类技术通常不需要额外的模型训练开销,同时可以保证对输出结果是无损的。
                             图注:本综述的分类体系
2.1 数据层优化技术
数据层优化技术可以划分为两大类:输入压缩(Input Compression)和输出规划(Output Organization)。
2.1.1 输入压缩技术

在实际利用大语言模型做回答时,通常会在输入提示词中加入一些辅助内容来增强模型的回答质量,例如,上下文学习技术(In-Context Learning,ICL)提出在输入中加入多个相关的问答例子来教模型如何作答。然而,这些技术不可避免地会增长输入词提示的长度,导致模型推理的开销增大。为了解决该问题,输入压缩技术通过直接减小输入的长度来优化模型的推理效率

本综述将该类技术进一步划分为四个小类,分别为:

  • 提示词剪枝(Prompt Pruning):通常根据设计好的重要度评估指标删除输入提示词中不重要的词块、句子或文段,对被压缩的输入提示词执行在线压缩。
  • 提示词总结(Prompt Summary):通过对输入提示词做文本总结任务,在保证其语义信息相同地情况下缩短输入的长度。该压缩过程通常也是在线执行的。
  • 基于软提示词的压缩(Soft Prompt-based Compression):通过微调训练的方式得到一个长度较短的软提示词,代替原先的输入提示词(在线执行)或其中固定的一部分内容(离线执行)。其中,软提示词指连续的、可学习的词块序列,可以通过训练的方式学习得到。
  • 检索增强生成(Retrieval-Augmented Generation):通过检索和输入相关的辅助内容,并只将这些相关的内容加入到输入提示词中,来降低原本的输入长度(相比于加入所有辅助内容)。
2.1.2 输出规划技术

传统的生成解码方式是完全串行的,输出规划技术通过规划输出内容,并行生成某些部分的的输出来降低端到端的推理延时。以该领域最早的工作“思维骨架”(Skeleton-of-Thought,以下简称SoT)[45](无问芯穹于2023年7月发布的工作,并被ICLR2024录用)为例,SoT技术的核心思想是让大语言模型自行规划输出的并行结构,并基于该结构进行并行解码,提升硬件利用率,减少端到端生成延时。
具体来说,如下图所示,SoT将大语言模型的生成分为两个阶段:在提纲阶段,SoT通过设计的提示词让大语言模型输出答案的大纲;在分点扩展阶段,SoT让大语言模型基于大纲中的每一个分点并行做扩展,最后将所有分点扩展的答案合并起来。SoT技术让包含LLaMA-2、Vicuna模型在内的9种主流大语言模型的生成过程加速1.9倍以上,最高可达2.39倍。在SoT技术发布后,一些研究工作通过微调大语言模型、前后端协同优化等方式优化输出规划技术,达到了更好的加速比和回答质量之间的权衡点。
                             图注:输出规划技术SoT[45]示意
2.1.3 知识、建议和未来方向
随着大语言模型需要处理的输入提示词和模型的输出结果越来越长,数据层的优化技术越来越重要。在这类技术中,输入压缩技术主要优化预填充阶段中注意力算子带来的平方量级的计算和存储开销,而输出规划技术则主要通过降低解码阶段中大量的访存开销,此外,一些研究尝试利用大语言模型本身做输出规划,并取得了不错的效果。
最近,各种各样新的提示词流程(Prompting Pipelines)和大语言模型智能体(LLM Agents)出现,这些新的框架在增强大语言模型能力的同时,也引入了更长的输入提示。利用输入压缩技术可以有效优化此类问题,同时,这些流程和智能体框架在输出内容中引入了更多可并行性,因此输出规划技术可能会在优化这类框架的效率上起到关键作用。除此之外,还有一些新工作关注如何直接设计更高效的智能体框架。
2.2 模型层优化技术
模型层优化技术可以划分为两大类:高效结构设计(Efficient Structure Design)和模型压缩(Model Compression)。前者通常需要将新设计的模型从头进行预训练,而后者通常只需要微调恢复精度即可。
2.2.1 高效结构设计

目前主流的大语言模型大多采用Transformer架构,从结构上看,参数量占比最多的前馈神经网络(以下简称FFN)和平方复杂度的注意力算子是导致模型推理效率低下的主要原因。基于此,本文将高效结构设计领域的技术进一步划分为三类:
🔹高效FFN设计(Efficient FFN):该领域的主流方法为混合    专家(Mixture-of-Experts,MoE)技术,其核心是为不同的输入词块分配不同数量的FFN(称为专家),减少推理过程中被激活的FFN权重数量。基于MoE的Transformer模型除了包含若干个专家FFN外,还包含一个负责分配专家的路由(Router)模型。该领域的研究工作主要关注三个方向:
  1. 更高效地获取专家FFN的权重或构建更轻量化的专家FFN;
  2. 优化路由模型使其分配更加平衡,避免因分配不平衡导致的精度和效率下降;
  3. 优化MoE模型的训练方式,使得训练更加稳定。
🔹高效注意力算子设计(Efficient Attention):该领域的研究工作可以分为:
  1. 多询问(Multi-Query)注意力技术,即在不同的注意力头之间共享部分Key和Value来降低访存开销和内存占用;
  2. 低复杂度(Low-Complexity)注意力技术,主要包括基于核函数(Kernel-based)的注意力算子和低秩注意力(Low-Rank)算子。
🔹Transformer替代架构(Transformer Alternates):最新的研究工作逐渐关注于设计新的模型架构来取代Transformer架构,这些新模型架构大多具有线性或近似线性的复杂度,在处理文本长度较长时有显著的性能优势。本综述将这类工作总结为两大类:
  1. 状态空间模型(State Space Models,SSMs)。这类模型的核心思想是将历史信息压缩到一个隐状态(state)中,通过状态间的转移建模新的信息。聚焦于状态空间模型的研究可以分为两个方向,一方面研究状态转移矩阵初始化和参数化的方式,另一方面研究与其他模型结构(如Transformer、门控单元等)的融合架构。
  2. 非状态空间模型。这类工作主要包含两个分支,分别是采用长卷积做序列建模,以及采用基于注意力机制做改进的线性建模算子。下表列举了典型的Transformer替代架构的复杂度,可以总结出该类架构的研究趋势:
    🔸训练方面,新架构倾向于采用卷积或类注意力算子的形式来保持训练的并行性;
    🔸推理方面,新架构倾向于在预填充阶段保证和输入长度呈线性的计算复杂度,在解码阶段保证与文本长度无关的计算复杂度。
                             图注:典型Transformer替代架构的训练和推理复杂度(n表示序列长度,d表示隐表征维度)
2.2.2 模型压缩技术

本综述将大语言模型高效推理领域的技术划分为三个层次,分别为:
🔹模型量化(Model Quantization):模型量化是一类应用广泛的模型压缩技术,其通过将模型的权重从高比特数转换成低比特数来降低模型的计算和存储开销。值得注意的是,大模型在推理的不同阶段有不一样的效率瓶颈,因此需要适配不同的量化方法。在预填充阶段,推理效率主要受限于较高的计算量,因此通常采用权重激活量化(Weight-Activation Quantization)的方式;在解码阶段,推理效率主要受限于较高的访存量,因此通常采用仅权重量化(Weight-only Quantization)的方式。从量化流程来看,模型量化可以划分为:
  • 训练后量化(Post-Training Quantization,PTQ):指对预训练后的模型直接做量化,不需要重新训练量化后的模型。这类方法对量化后模型的精度损失较大,但因其不需要额外的模型训练开销,因此在大语言模型领域应用最为广泛。下表总结了典型的训练后量化方法在各个维度的比较。此外,在实际应用中,开发者通常还需要关注量化对大语言模型各种能力的损失,无问芯穹于2024年1月发布的工作QLLM-Eval[204](已被ICML2024录用)从不同量化模型、量化参数和量化维度全面研究了量化对模型能力的影响,并给出了针对量化技术的使用指南。
                             图注:典型的训练后量化算法的比较
  • 训练感知量化(Quantization-Aware Training,QAT):指在模型的训练中加入模型量化过程,并通过训练减小量化带来的精度损失。相比于训练后量化,训练感知量化方法通常具有更高的精度,但其需要大量的数据和计算量来做模型训练。因此,目前该子领域的研究主要关注于如何在数据层面和计算量层面降低模型训练带来的开销。
🔹模型稀疏(Model Sparsification)。模型稀疏分为权重稀疏(即权重剪枝)和注意力稀疏(即稀疏注意力):
  • 权重剪枝(Weight Pruning):指通过将模型中不重要的权重和对应结构移除,降低模型的计算和存储开销。权重剪枝可以分为非结构化剪枝(Unstructural Pruning)和结构化剪枝(Structural Pruning)两大类,两者区别主要在于剪枝粒度不同,如下图所示。其中,在非结构化剪枝领域,目前的研究工作主要关注于如何加速对大模型的剪枝过程,以及如何设计更有效的重要度分析指标和剪枝率分配策略。而在结构化剪枝领域,目前的研究工作大多关注于如何设计规整的剪枝结构来支持结构化的剪枝。
                               图注:非结构化剪枝和结构化剪枝比较
  • 稀疏注意力(Sparse Attention):指通过减少冗余的注意力计算,来降低预填充阶段的计算开销和解码阶段中KV cache带来存储和访存开销。该领域的研究工作主要关注于设计更有效的稀疏模式(Sparse Pattern),包括静态稀疏(下图中(a)和(b)所示)以及动态稀疏(下图中(c)和(d)所示)。无问芯穹于2023年9月发布的工作SemSA[204],通过对每个注意力头自动选择注意力掩膜和掩膜扩展方式,在平均稀疏度相同的情况下,大幅提升稀疏注意力大语言模型的有效上下文长达3.9倍。
                                           图注:典型注意力稀疏模式比较
🔹结构优化(Structure Optimization):结构优化技术指通过修改模型的架构或结构来达到更好的精度-效率之间的权衡。在该领域有两类代表性的技术:
  • 神经网络架构搜索(Neural Architecture Search):指自动化地搜索出最优的模型架构。然而,这类方法目前只在中等规模的语言模型上得到应用,在大语言模型上还未获得实际的优化效果,原因是该技术通常需要在搜索过程中对采样到的架构进行训练评估,对大模型来说需要花费巨大的训练开销。
  • 低秩分解(Low Rank Factorization):指将一个大的权重矩阵近似分解成两个低质小矩阵的乘积,通过该技术,可以降低大语言模型权重的存储开销和访存开销。该领域的研究工作主要聚焦于设计分解方式,以及将该技术与其他模型压缩技术(例如量化、剪枝等)结合获得更高的效率优化效果。
🔹知识蒸馏(Knowledge Distillation):知识蒸馏指用一个大模型(教师模型)来辅助训练一个小模型(学生模型),从而将大模型的知识传递给小模型,通过小模型更小的开销达到相似的精度效果。知识蒸馏主要分为白盒(White-box)和黑盒(Black-box),前者可以获得教师模型的架构和权重,因此可以利用更多的信息(例如特征、输出概率等)训练学生模型,而后者多针对基于API接口访问的大模型,这类模型的架构和权重无法获取,因此仅能通过构造数据来训练学生模型。在知识蒸馏领域,当前的研究工作主要关注设计更有效的蒸馏损失函数,以及构造更有效的蒸馏数据来辅助学生模型的学习。
                                图注:白盒蒸馏和黑盒蒸馏比较
🔹动态推理(Dynamic Inference):动态推理技术指在推理过程中,基于输入数据的不同,动态决定最合适的推理结构。根据所依赖的输入数据维度,可以进一步将该领域的技术分为样本级别(Sample-level)和词块级别(Token-level)的动态推理。该领域的研究方向主要聚焦于设计更有效的退出模块,以及解决大语言模型解码过程中并行推理和KV缓存的问题。
                                    图注:样本级别和词块级别的动态推理比较

2.2.3 知识、建议和未来方向

在高效结构设计领域,Transformer的替代架构受到了许多研究者们的关注,诸如Mamba[73]、RWKV[60]以及它们的变体架构都在各类任务上验证了它们高效的推理能力。然而,这些新架构相比Transformer架构在某些方面是否仍然存在缺陷还并未被探究清楚。此外,本文认为将新架构和传统的Transformer架构做融合,可以达到效率和精度之间更好的权衡,是一个有潜力的研究方向。
在模型压缩领域:
  • 模型量化是目前最常用也是最推荐使用的模型压缩技术,一方面,该技术可以很方便快捷地压缩大语言模型,另一方面,该技术能在有效提升模型效率的同时,尽可能地保证模型的精度损失最小。然而,模型量化技术仍然不可避免地会对模型的能力造成负面影响,因此需要根据任务和应用场景谨慎选取最合适的模型量化算法。
  • 模型稀疏方面,目前有许多研究工作关注稀疏注意力技术,并将其应用在处理长文本的场景中,然而这类技术通常会损失部分信息,导致任务精度的下降,因此如何在保留有效信息的同时还能高效处理长文本是一个值得探索的问题。而在权重剪枝领域,有研究工作[217]指出目前的剪枝方法在不显著影响任务精度的前提下,仅能达到较低的剪枝率水平,因此设计更有效的模型剪枝算法是一个值得研究的方向。
  • 结构优化方面,神经网络架构搜索技术受限于其高昂的评估成本,难以被应用在大语言模型的压缩上,然而这种自动化压缩的思想仍然值得进一步的探索。另一方面,低秩分解技术受限于其难以同时保证任务精度和压缩比例。
  • 此外,还有一些工作探究将不同的模型层技术结合,例如将混合专家技术和低秩分解结合、将模型量化和权重稀疏结合、将模型量化和低秩分解结合、将权重剪枝和低秩分解结合。这些方法展示了整合多种压缩技术以实现大型语言模型更佳优化的潜力。
2.3 系统层优化技术
大语言模型推理的系统层优化主要集中在优化模型的前向推理过程。在大语言模型的前向推理计算图中,注意力算子和线性算子占据了大部分运行时间。系统层优化技术包含对这两种算子的优化,同时还会考虑设计更高效的大语言模型解码方式。此外,在在线服务的场景中,请求通常来自多个用户。因此,除了前述优化之外,在线服务还面临与异步请求相关的内存、批处理和调度方面的挑战。总的来说,本综述将系统层优化技术分为高效的推理引擎(Inference Engine)和服务系统(Serving System)。
2.3.1 推理引擎

图和算子优化(Graph and Operator Optimization)是高效推理引擎技术中重要的一类方法,其中,算子优化还进一步包含对注意力算子和线性算子的优化。无问芯穹于2023年11月发布的工作FlashDecoding++[231](已被MLSys2024录用),通过对注意力和线性算子的针对性优化和计算图层面的深度算子融合技术,显著提高了大语言模型推理效率,在NVIDIA和AMD GPU上,吞吐率相较HuggingFace提升分别达到4.86和4.35倍。
                               图注:高效推理引擎领域研究总结
猜测解码(Speculative Decoding)是一类通过并行解码来加速大模型解码过程的技术,其核心思想是使用一个小模型来预测未来的若干个词块,再用大模型并行地验证这些词块是否准确。具体来说,猜测解码可以大致分为两个阶段:猜测阶段验证阶段
猜测阶段,对于当前的输入文本,猜测解码方法首先利用一个“便宜”的草稿模型(Draft Model)生成连续的若干个草稿词块(Draft Token),值得注意的是,该草稿模型往往具有相比于大语言模型小得多的参数量和计算量,因此这一过程带来的开销非常小。
验证阶段,猜测编码使用大语言模型对草稿词块进行并行验证,并接收通过验证的草稿词块作为解码结果。猜测编码的加速效果与草稿模型的预测准确率和验证接收方式有关,现有大多研究工作关注于设计更好的草稿模型,或设计更有效的验证接收方式。下表对比了典型的猜测解码算法。
                           图注:典型猜测解码算法比较
2.3.2 服务系统

服务系统的优化旨在提升系统处理异步请求的效率。这类优化技术主要包括:内存管理(Memory Management)、连续批处理(Continuous Batching )、调度策略(Scheduling Strategy)和分布式系统( Distributed Systems)。此外,本文还比较了市面上常见的开源推理框架的推理延时和系统吞吐,如下表所示。
                                     图注:高效服务系统领域研究总结
                            图注:开源推理框架比较
2.3.3 知识、建议和未来方向

系统层优化技术在不降低准确性的情况下提高了推理效率,因此在大语言模型的时间部署中非常普遍。在最近的研究中,算子优化已经与实际的服务场景密切结合,例如,RadixAttention[50]专门被设计用于前缀缓存,而tree attention技术[225]用于加速猜测解码的验证。应用和场景的更迭将继续为算子的发展提出新的要求和挑战。
三、未来研究展望
本文进一步总结了未来的四个关键应用场景,并讨论了高效性研究在这些场景中的重要性:
  • 能体和多模型框架。在最近的研究中,大语言模型智能体和多模型协同框架受到了许多关注,这类技术可以提升大语言模型的应用能力,使得模型能更好地服务于人类。然而模型的数量增多,以及输入到模型中的指令变长,都会使得智能体或框架系统的推理效率变低。因此需要面向这些框架和场景进行大模型的推理效率优化。
  • 长文本场景。随着输入模型文本变得越来越长,大语言模型的效率优化需求变得愈发提升。目前在数据层、模型层和系统层均有相关的技术来优化长文本场景下大语言模型的推理效率,其中设计Transformer的替代新架构受到了许多关注,然而这类架构还未被充分探索,其是否能匹敌传统的Transformer模型仍未清楚。
  • 边缘端部署。最近,许多研究工作开始关注于将大语言模型部署到边缘设备上,例如移动手机。一类工作致力于设计将大模型变小,通过直接训练小模型或模型压缩等途径达到该目的;另一类工作聚焦于系统层的优化,通过算子融合、内存管理等技术,直接将70亿参数规模的大模型成功部署到移动手机上。
  • 安全-效率协同优化。除了任务精度和推理效率外,大语言模型的安全性也是一个需要被考量的指标。当前的高效性研究均未考虑优化技术对模型安全性的影响。若这些优化技术对模型的安全性产生了负面影响,一个可能的研究方向就是设计新的优化方法,或改进已有的方法,使得模型的安全性和效率能一同被考量。
如果你对文章感兴趣,可以联系学术作者进一步讨论:ningxuefei@mail.tsinghua.edu.cn

文章来源于互联网:万字综述大模型高效推理:无问芯穹与清华、上交最新联合研究全面解析大模型推理优化

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

分类文章

personal_logo
Dongming
自由职业者

推荐活动

推荐文章

【操作攻略】GPU云环境的使用介绍
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
【课程总结】day19(中):Transformer架构及注意力机制了解
【重拾数学知识】矢量的点乘和叉乘
【课程总结】Day11(上):手势图像识别实战(LeNet模型)
【课程总结】day34:多模态大模型之ViT模型、CLIP模型论文阅读理解
【目录】AI知识学习路线图
【课程总结】day33:文生图StableDiffusion模型初步了解以及部署体验
【课程总结】day32(下):Xinference部署向量化模型
【课程总结】day31:多模态大模型初步了解
滚动至顶部