如何加速大模型推理?万字综述全面解析大语言模型高效推理技术
许多研究工作致力于设计优化大语言模型推理开销的技术,优化模型的推理延迟、吞吐、功耗和存储等指标,成为许多研究的重要目标。
此外,该工作还对造成大语言模型推理不高效的根本原因进行分析,并基于对当前已有工作的综述,深入探讨高效推理领域未来应关注的场景、挑战和路线,为研究者提供可行的未来研究方向。
论文标题:
A Survey on Efficient Inference for Large Language Models
https://arxiv.org/abs/2404.14294
▲ 图注:《A Survey on Efficient Inference for Large Language Models》(LLM Eff-Inference)
大模型推理效率瓶颈分析
为了解决该问题,KV 缓存技术被提出,该技术通过存储和复用前序词块在计算注意力机制时产生的 Key 和 Value 向量,减少大量计算上的冗余,用一定的存储开销换取了显著的加速效果。基于 KV 缓存技术,通常可以将大语言模型的推理过程划分为两个阶段(分别如下图中 (a) 和 (b) 所示):
预填充(Prefilling)阶段:大语言模型计算并存储输入序列中词块的 Key 和 Value 向量,并生成第一个输出词块。
解码(Decoding)阶段:大语言模型利用 KV 缓存技术逐个生成输出词块,并在每步生成后存储新词块的 Key 和 Value 向量。
大语言模型在实际部署应用中,我们通常关注其延时、吞吐、功耗和存储,而在大语言模型推理过程中,有三个重要因素会直接影响上述效率指标,分别是计算开销(Computational Cost)、访存开销(Memory Access Cost)和存储开销(Memory Cost)。进一步地,本综述深入分析探究,并总结归纳除出影响上述指标和因素三点根本因素,分别为:
模型规模:主流大语言模型庞大的模型规模会导致巨大的计算量、访存量和存储量;
注意力算子:作为大语言模型的核心算子,注意力算子具有与输入长度呈平方关系增长的计算和存储复杂度;
解码方式:主流的自回归解码方式导致极低的计算-访存比和硬件利用率,同时动态增长的KV缓存会导致碎片化的内存使用,对访存开销和存储开销带来增长。
大模型高校推理技术领域纵览
本综述将大语言模型高效推理领域的技术划分为三个层次,分别为:
数据层优化技术:指通过优化输入提示词或规划模型输出内容优化推理效率。这类优化技术通常不需要修改模型本身,因此避免了大量的模型训练或微调开销;
模型层优化技术:指通过设计高效的模型结构或模型压缩技术优化推理效率。这类技术通常需要对模型进行预训练或微调来恢复任务精度,同时通常对输出结果是有损的;
系统层优化技术:指通过优化推理引擎或服务系统优化推理效率。这类技术通常不需要额外的模型训练开销,同时可以保证对输出结果是无损的。
在实际利用大语言模型做回答时,通常会在输入提示词中加入一些辅助内容来增强模型的回答质量,例如,上下文学习技术(In-Context Learning,ICL)提出在输入中加入多个相关的问答例子来教模型如何作答。然而,这些技术不可避免地会增长输入词提示的长度,导致模型推理的开销增大。为了解决该问题,输入压缩技术通过直接减小输入的长度来优化模型的推理效率。
提示词剪枝(Prompt Pruning):通常根据设计好的重要度评估指标删除输入提示词中不重要的词块、句子或文段,对被压缩的输入提示词执行在线压缩。 提示词总结(Prompt Summary):通过对输入提示词做文本总结任务,在保证其语义信息相同地情况下缩短输入的长度。该压缩过程通常也是在线执行的。 基于软提示词的压缩(Soft Prompt-based Compression):通过微调训练的方式得到一个长度较短的软提示词,代替原先的输入提示词(在线执行)或其中固定的一部分内容(离线执行)。其中,软提示词指连续的、可学习的词块序列,可以通过训练的方式学习得到。 检索增强生成(Retrieval-Augmented Generation):通过检索和输入相关的辅助内容,并只将这些相关的内容加入到输入提示词中,来降低原本的输入长度(相比于加入所有辅助内容)。
🔹高效FFN设计(Efficient FFN):该领域的主流方法为混合 专家(Mixture-of-Experts,MoE)技术,其核心是为不同的输入词块分配不同数量的FFN(称为专家),减少推理过程中被激活的 FFN 权重数量。基于 MoE 的 Transformer 模型除了包含若干个专家 FFN 外,还包含一个负责分配专家的路由(Router)模型。该领域的研究工作主要关注三个方向:
更高效地获取专家 FFN 的权重或构建更轻量化的专家 FFN;
优化路由模型使其分配更加平衡,避免因分配不平衡导致的精度和效率下降;
优化 MoE 模型的训练方式,使得训练更加稳定。
多询问(Multi-Query)注意力技术,即在不同的注意力头之间共享部分Key和Value来降低访存开销和内存占用; 低复杂度(Low-Complexity)注意力技术,主要包括基于核函数(Kernel-based)的注意力算子和低秩注意力(Low-Rank)算子。
🔹Transformer 替代架构(Transformer Alternates):最新的研究工作逐渐关注于设计新的模型架构来取代 Transformer 架构,这些新模型架构大多具有线性或近似线性的复杂度,在处理文本长度较长时有显著的性能优势。本综述将这类工作总结为两大类:
状态空间模型(State Space Models,SSMs)。这类模型的核心思想是将历史信息压缩到一个隐状态(state)中,通过状态间的转移建模新的信息。聚焦于状态空间模型的研究可以分为两个方向,一方面研究状态转移矩阵初始化和参数化的方式,另一方面研究与其他模型结构(如 Transformer、门控单元等)的融合架构。
非状态空间模型。这类工作主要包含两个分支,分别是采用长卷积做序列建模,以及采用基于注意力机制做改进的线性建模算子。下表列举了典型的 Transformer 替代架构的复杂度,可以总结出该类架构的研究趋势:
🔸在训练方面,新架构倾向于采用卷积或类注意力算子的形式来保持训练的并行性;
🔸在推理方面,新架构倾向于在预填充阶段保证和输入长度呈线性的计算复杂度,在解码阶段保证与文本长度无关的计算复杂度。
在预填充阶段,推理效率主要受限于较高的计算量,因此通常采用权重激活量化(Weight-Activation Quantization)的方式;在解码阶段,推理效率主要受限于较高的访存量,因此通常采用仅权重量化(Weight-only Quantization)的方式。从量化流程来看,模型量化可以划分为:
训练后量化(Post-Training Quantization,PTQ):指对预训练后的模型直接做量化,不需要重新训练量化后的模型。这类方法对量化后模型的精度损失较大,但因其不需要额外的模型训练开销,因此在大语言模型领域应用最为广泛。 下表总结了典型的训练后量化方法在各个维度的比较。此外,在实际应用中,开发者通常还需要关注量化对大语言模型各种能力的损失,无问芯穹于 2024 年 1 月发布的工作 QLLM-Eval[204](已被 ICML 2024 录用)从不同量化模型、量化参数和量化维度全面研究了量化对模型能力的影响,并给出了针对量化技术的使用指南。
训练感知量化(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):指将一个大的权重矩阵近似分解成两个低质小矩阵的乘积,通过该技术,可以降低大语言模型权重的存储开销和访存开销。该领域的研究工作主要聚焦于设计分解方式,以及将该技术与其他模型压缩技术(例如量化、剪枝等)结合获得更高的效率优化效果。
在高效结构设计领域,Transformer 的替代架构受到了许多研究者们的关注,诸如 Mamba[73]、RWKV[60] 以及它们的变体架构都在各类任务上验证了它们高效的推理能力。然而,这些新架构相比 Transformer 架构在某些方面是否仍然存在缺陷还并未被探究清楚。此外,本文认为将新架构和传统的 Transformer 架构做融合,可以达到效率和精度之间更好的权衡,是一个有潜力的研究方向。
在模型压缩领域:
模型量化是目前最常用也是最推荐使用的模型压缩技术,一方面,该技术可以很方便快捷地压缩大语言模型,另一方面,该技术能在有效提升模型效率的同时,尽可能地保证模型的精度损失最小。然而,模型量化技术仍然不可避免地会对模型的能力造成负面影响,因此需要根据任务和应用场景谨慎选取最合适的模型量化算法。
模型稀疏方面,目前有许多研究工作关注稀疏注意力技术,并将其应用在处理长文本的场景中,然而这类技术通常会损失部分信息,导致任务精度的下降,因此如何在保留有效信息的同时还能高效处理长文本是一个值得探索的问题。而在权重剪枝领域,有研究工作[217]指出目前的剪枝方法在不显著影响任务精度的前提下,仅能达到较低的剪枝率水平,因此设计更有效的模型剪枝算法是一个值得研究的方向。
结构优化方面,神经网络架构搜索技术受限于其高昂的评估成本,难以被应用在大语言模型的压缩上,然而这种自动化压缩的思想仍然值得进一步的探索。另一方面,低秩分解技术受限于其难以同时保证任务精度和压缩比例。 此外,还有一些工作探究将不同的模型层技术结合,例如将混合专家技术和低秩分解结合、将模型量化和权重稀疏结合、将模型量化和低秩分解结合、将权重剪枝和低秩分解结合。这些方法展示了整合多种压缩技术以实现大型语言模型更佳优化的潜力。
猜测解码(Speculative Decoding)是一类通过并行解码来加速大模型解码过程的技术,其核心思想是使用一个小模型来预测未来的若干个词块,再用大模型并行地验证这些词块是否准确。具体来说,猜测解码可以大致分为两个阶段:猜测阶段和验证阶段。
猜测阶段,对于当前的输入文本,猜测解码方法首先利用一个“便宜”的草稿模型(Draft Model)生成连续的若干个草稿词块(Draft Token),值得注意的是,该草稿模型往往具有相比于大语言模型小得多的参数量和计算量,因此这一过程带来的开销非常小。
未来研究展望
无问芯穹正在寻找算子优化、推理框架、自然语言处理(NLP)算法、异构研发、分布式训练方向的专业人才!我们渴望有才华、有热情的您加入我们,共同推动技术的创新和应用的发展!
欢迎扫描下方的二维码,查看岗位信息!我们期待您的加入,链接上下游,共建AGI时代大模型基础设施,加速AGI落地千行百业!
参考文献
注:为了方便感兴趣的读者在原文中找到对应引用,本文的引用编号与综述原文保持一致,加粗引用为无问芯穹发布的工作。更多引用可以打开原文查阅。
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
微信扫码关注该文公众号作者