The Roadmap to Mastering LLM Inference Optimization
TL;DR · AI 摘要
LLM推理优化需针对预填充和解码阶段的性能瓶颈,通过内存管理、模型压缩等技术提升吞吐量并降低延迟。
核心要点
- 预填充阶段计算密集,解码阶段受内存带宽限制,需差异化优化。
- KV缓存和PagedAttention可减少内存访问,提升解码效率。
- 多GPU并行与模型压缩能降低大模型推理成本30%以上。
结构提纲
按章节快速跳转。
- §引言
当前LLM推理性能瓶颈导致系统在实际部署中失效,优化是关键解决方案。
预填充阶段计算密集,解码阶段受内存带宽限制,二者需不同优化策略。
KV缓存、PagedAttention等策略通过减少内存访问提升吞吐量。
量化、剪枝和多GPU并行可降低推理成本并扩展处理能力。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- LLM推理优化
- 两阶段瓶颈
- 预填充(计算密集)
- 解码(内存带宽限制)
- 优化技术
- 内存管理(KV缓存/PagedAttention)
- 模型压缩(量化/剪枝)
- 多GPU并行
金句 / Highlights
值得收藏与分享的关键句。
GPU内存带宽而非原始计算能力是生成阶段的限制因素。
PagedAttention通过分页机制将内存使用降低40%。
多GPU并行结合模型压缩可使大模型推理成本降低30%。
掌握大语言模型推理优化的路线图 - MachineLearningMastery.com 掌握大语言模型推理优化的路线图
掌握大语言模型推理优化的路线图
作者: Bala Priya C 发布于: 2026年9月21日 分类: 人工智能
0
分享
在本文中,你将学习大语言模型(LLM)推理优化的原理,以及如何应用相关技术使语言模型在生产环境中运行得更快、更便宜且更可靠。
我们将涵盖的主题包括:
- 两阶段推理过程(预填充和解码)如何产生根本不同的性能瓶颈,理解这一区别如何驱动优化技术的选择。
- 内存管理策略(如键值缓存、分页注意力和前缀缓存)结合批处理方法和注意力优化,如何直接提升吞吐量和延迟。
- 模型压缩方法、投机解码和多GPU并行如何降低推理成本并扩展大模型或高负载场景的容量。
让我们直接进入正题。
引言
对于大多数团队来说,让大语言模型生成正确输出已经是一个解决的问题。然而,在实践中,让模型以足够快的速度、足够低的成本和足够的可靠性生成正确输出,通常是系统失效的地方。当请求队列增长的瞬间,模型可能开始错过延迟目标,而当批处理大小和上下文长度增加时,成本将比预期更快地上升。
推理优化的使命就是弥合这一差距——在不修改训练模型的前提下,使同一模型能处理更多请求,速度更快,成本更低。相关技术范围从完全不需要模型修改的调度调整,到直接嵌入模型本身的架构级注意力变体。
要开始,首先要理解大语言模型推理的工作原理。
第一步:理解两阶段推理过程
每个通过仅解码器的LLM的前向传播过程都包含两个具有根本不同性能特征的阶段,大多数优化技术针对其中一个或两个阶段。
第一个阶段是预填充阶段。当请求到达时,模型会同时处理所有输入标记,以计算生成第一个输出标记所需的中间状态——键和值张量。由于完整的输入在一开始就已知,因此此计算高度并行化,可充分利用GPU资源。预填充阶段是计算密集型的。
第二个阶段是解码阶段。在生成第一个输出标记后,模型会按顺序自回归地生成后续标记。每个新标记都依赖于所有之前的标记,这使得单个序列内的并行生成变得不可能。此处的瓶颈发生了变化:GPU大部分时间都在等待数据从内存传输,而不是进行计算本身。解码阶段是内存带宽密集型的。
这一区别对后续所有内容都至关重要。在生成过程中,GPU内存带宽(而非原始计算能力)是限制性约束。任何减少GPU需要移动数据量的优化,或让GPU在每次内存访问中完成更多有用工作的优化,都会直接转化为更快的解码速度。
理解这一点也能解释为什么简单的基准测试会产生误导。首次生成token时间(TTFT)反映了预填充阶段的性能,而首次token之后每秒生成token数(TPS)则反映了解码阶段的性能。优化其中一个指标并不一定能够提升另一个指标,而采用何种技术取决于你的使用场景实际关注的是哪个指标。
如需深入了解,阅读《从提示到预测:理解LLMs中的预填充、解码和KV缓存》。
第2步:理解KV缓存及其引发的内存问题
解码阶段最重要的优化手段是KV缓存。模型不再在每次生成步骤中重新计算所有先前token的键和值张量,而是将它们存储在GPU内存中并重复使用。这种方案以牺牲内存换取计算效率,适用于计算成本高而内存资源充足的情况。
问题在于KV缓存的内存需求会随着批处理大小和序列长度的增加而同步增长。对于一个7B参数、16位精度的模型,中等长度序列的单个KV缓存就可能消耗数GB内存。当处理长上下文输入或大批次请求时,内存将成为限制同时处理请求数量的主要瓶颈。
原始的KV缓存管理方式会加剧这一问题。由于无法提前知道生成过程会持续多久,通常会预先为最大可能的序列长度分配内存,这会导致严重的内部碎片化。
PagedAttention通过借鉴操作系统虚拟内存分页的概念解决了这个问题。它不再为每个请求分配连续的内存块,而是将KV缓存划分为固定大小的块,按需非连续分配。随着token的生成动态创建新块,不进行任何预分配。这种方案显著降低了内存浪费,直接使相同硬件上能够支持更大的批处理规模和更高的吞吐量。vLLM默认实现了这一机制。
前缀缓存进一步扩展了这一思路。当多个请求共享相同前缀(如系统提示、分析文档、少量示例块)时,该前缀对应的KV缓存只需计算一次即可在所有共享该前缀的请求间复用。在RAG流水线和长系统提示的应用场景中,这可以消除大量冗余计算。
如需了解KV缓存的工作原理及其他推理缓存技术,参见《LLMs中的KV缓存:开发者的指南》和《LLMs推理缓存技术完整指南》。
第3步:探索批处理以优化GPU利用率
逐个处理请求会导致GPU大部分时间处于空闲状态。无论处理多少token,每次前向传播都需要将权重加载到内存中,因此随着批处理规模的增大,权重在批处理中的分摊成本会直接下降。更高的利用率意味着在更低的每token成本下实现更高的吞吐量。
静态批处理——等待收集固定大小的批处理后再进行处理——是原始的实现方式,但在实践中表现不佳。批处理中的请求会生成不同数量的输出token。直到最长请求完成之前,整个批处理无法推进,这意味着较快的请求需要等待,导致资源闲置。输出长度的高差异性会使静态批处理成为显著的吞吐瓶颈。
动态批处理通过设定最大批处理大小和超时时间,将短时间内到达的请求进行分组。当达到最大批处理大小或超时时间到达时,批处理开始执行,这在不使请求无限等待的情况下提高了GPU利用率。较短的超时时间会降低延迟但可能导致较小的批处理,而较长的超时时间虽然会增加排队延迟,但可以提升吞吐量。然而,一旦批处理开始,请求仍会一起推进,因此较短的请求可能仍会被较长的请求阻塞。
连续批处理(也称为飞行中批处理)通过将请求完成与批处理边界解耦来消除这一问题。当序列生成完成后,会立即从批处理中移除,并由新请求填补其位置——无需等待同一批处理中的其他序列完成。批处理会持续补充而非按固定轮次处理。这种方式即使在输出长度高度变化的情况下也能保持较高的GPU利用率,目前已成为vLLM和TensorRT-LLM等生产运行时的默认调度策略。
阅读《LLM推理中的静态、动态与连续批处理对比》可更全面了解这些批处理技术。
步骤4:优化注意力机制
注意力操作在大多数Transformer前向传播中占据计算主导地位,且在架构层面已积累了许多有意义的优化。
标准的多头注意力(MHA)机制为每个注意力头维护独立的键和值头。然而在多查询注意力(MQA)中,所有查询头共享同一组键和值头。计算过程保持不变,但解码阶段需要从内存移动的数据量显著减少——这在受内存带宽限制的操作中尤为重要。代价是会有小幅精度下降,且需要启用MQA进行模型训练或微调,才能在推理时受益。
分组查询注意力(GQA)位于MHA和MQA之间。键和值头被分组,多个查询头共享每个组。这种方式既能获得MQA大部分的内存优势,又能保留更多MHA的建模能力。
FlashAttention采用了不同方法——它不改变注意力架构,而是改变计算顺序。标准注意力实现会反复将中间值(注意力矩阵)读写到GPU全局内存。FlashAttention通过融合注意力操作并利用分块技术,将中间值保留在更快的片上SRAM中,大幅减少内存流量且不改变数学输出。作为标准注意力的即插即用替代方案,无需模型重新训练,这使其成为最容易应用的优化之一。
《现代LLM中注意力变体的视觉指南》是理解一些流行注意力变体的优秀资源。
量化降低模型权重的数值精度,可选地也降低激活值的精度。使用16位浮点数训练的模型,每个参数约占用2字节。在8位整数精度下,占用量降至1字节;在4位整数精度下,仅需0.5字节。对于70亿参数的模型,FP16与INT4精度的差异意味着GPU显存需求从约14GB降至约3.5GB——这种差距足以改变哪些硬件层级能够部署该模型。GPTQ和AWQ等量化感知技术使大模型的4位量化在保持质量损失最小的前提下成为可行方案,同时GPU也具备专用硬件加速低精度矩阵运算。
稀疏性利用了训练后的模型中许多权重值接近零且对输出贡献有限的观察结论。将这些权重精确置零后,可生成更高效存储和计算的稀疏权重矩阵。NVIDIA的Ampere及后续GPU架构包含对2:4结构化稀疏性的硬件支持——即每四个值中恰好有两个为零——在兼容操作中可实现最高2倍加速,且无需额外软件开销。
知识蒸馏通过训练小型学生模型来复现大型教师模型的行为,而非直接压缩教师模型本身。学生模型基于教师模型的输出分布进行训练,而非仅依赖真实标签,这比标准监督训练能传递更多信息。在延迟是主要限制因素的应用场景中,蒸馏通常比对原始模型进行压缩效果更好,因为学生模型的架构与教师模型匹配度更高。
第6步:在延迟敏感应用中使用推测解码
生成令牌时的自回归约束——每个令牌必须等待前一个令牌生成——是最大的瓶颈。推测解码在不违反数学原理的前提下突破了这一限制。
该方法使用小型快速的草稿模型生成多个令牌的候选序列。随后,完整的验证模型并行评估所有这些令牌——这之所以可行,是因为它们被当作一组独立的评分问题进行批量处理,而非顺序生成步骤。验证模型与草稿模型一致的令牌会被接受;首次出现不一致时,之后的所有内容都会被丢弃,生成过程将从该点继续。
正确性保证是精确的:被接受的令牌保证与完整模型自行生成的结果完全一致。加速优势来自于并行验证过程——当草稿模型与完整模型高度一致时,每次完整模型调用可有效生成多个令牌。该技术对延迟敏感且单次请求场景影响最大,例如交互式聊天,此时标准批量处理的增益不适用。在高吞吐量批量工作负载中,由于批量处理已使GPU保持繁忙,该技术带来的收益较小。
《机器学习从业者推测解码指南》是一份有用的参考资料。
第7步:通过并行处理进行扩展
当模型规模超出单块GPU的显存容量,或吞吐量目标需要比单个设备提供的计算能力更多时,并行处理会将负载分配到多块GPU上。
张量并行将单个层分布在不同设备上。权重矩阵被划分,每个GPU执行部分计算,然后设备同步结果。其主要优势是减少每个GPU的权重内存占用,同时分配计算以降低推理延迟。
流水线并行垂直分割模型,将连续层分配给不同GPU。每个GPU处理其分配的层,并将激活状态传递给下一阶段。其主要缺点是流水线气泡,即GPU因等待任务而空闲。微批次通过保持多个批次同时处理来减少这些气泡。流水线并行通常更适合非常大的模型和高吞吐量工作负载。
预填充-解码分离是一种较新的架构模式,将预填充和解码阶段路由到针对各自优化的硬件池。预填充计算密集,解码内存带宽密集——这是不同的硬件优化目标。分离它们可以让每个阶段在匹配其瓶颈的硬件上运行,并防止长时间的预填充操作阻塞解码能力。随着上下文长度的增长,这种模式变得越来越重要。
总结
大语言模型推理优化是一项分层的学科。以下是我们讨论内容的概述:
概念
关键思想
两阶段推理过程
理解推理的两个阶段:预填充(并行、计算密集、决定首令牌时间)和解码(自回归、内存带宽密集、决定每秒令牌数)。这种区分解释了不同优化适用的位置。
KV缓存与内存管理
学习KV缓存如何避免解码时重新计算注意力状态,长上下文为何使KV缓存成为内存瓶颈,以及PagedAttention和前缀缓存如何提高内存效率并重用计算。
批处理
通过批处理提高GPU利用率。比较静态批处理(固定批次,因输出长度变化导致空闲时间)与连续/飞行中批处理,后者动态替换已完成请求以最大化吞吐量。
注意力优化
使用多查询注意力(MQA)、分组查询注意力(GQA)和FlashAttention减少注意力开销。这些技术减少内存移动并加速推理过程中的注意力计算。
模型压缩
通过量化、稀疏性和知识蒸馏缩小模型规模,降低推理成本,在最小化精度损失的同时实现更快推理和更低内存占用。
推测性解码
通过使用小型草案模型生成候选令牌,并由大型模型并行验证,减少延迟。每个验证步骤可接受多个令牌而不改变最终输出。
并行性
使用张量并行、流水线并行和预填充-解码分离在多个GPU上扩展推理,支持更大模型和更高吞吐量,同时平衡内存和计算资源。
合适的组合取决于您的延迟目标、吞吐量需求、上下文长度和硬件预算。将实际工作负载与这些约束进行性能分析,并按影响程度依次添加技术。
以下资源值得与本文一起阅读:
- Modular的LLM推理手册
- NVIDIA的推理优化深度解析
学习愉快!
关于此主题的更多内容
- 局部优化与全局优化
- 算法选择与超参数联合优化
- 掌握 MLOps:实时模型部署与推理…
- 静态、动态与连续批处理在 LLM 推理中的应用
- 同时服务多个用户:连续批处理如何实现…
- 构建推理缓存以节省成本…