大语言模型推理优化:预填充、解码与企业级LLMOps
预填充与解码瓶颈、连续批处理、FlashAttention、量化技术、PagedAttention、推测性解码、分块预填充以及分散式服务。
设计高性能且成本效益高的大型语言模型服务,意味着要围绕真实的硬件限制来设计——而非仅仅封装一个API并期望GPU始终处于忙碌状态。
早期企业在生成式AI方面的预算主要用于模型训练和微调。一旦应用离开实验室,成本结构就会发生变化:持续的GPU密集型推理任务以及难以预测的延迟问题。
规模扩展迫使企业在硬件与成本之间做出权衡。高效且经济实惠的系统会超越表面的封装层,深入研究推理在芯片上的实际运行方式。
1. 两个阶段,两个瓶颈
每个推理请求都会分为预填充和解码两个阶段,而这两个阶段会遇到不同的硬件限制。
预填充阶段(通常受计算能力限制)
预填充会一次性处理所有提示词标记,并同时构建键值对激活值。过长的提示词会导致大规模矩阵乘法使计算资源饱和,因此这一阶段受计算能力限制。而较短的提示词或较小的批次则可能出现相反情况:由于算力不足,无法掩盖内存访问带来的负担,此时预填充便受内存限制。预填充时间就是用户需要等待的第一段时间。
解码阶段(通常受内存带宽限制)
提示词输入后,标记会逐个到来。在每一步中,模型权重以及不断增长的键值对历史记录都需要从高带宽内存(HBM)传输到GPU的SRAM中。在批次规模较小时,这种数据传输会频繁发生,导致GPU因带宽限制而非计算能力不足而停滞。
有一个关键因素决定了整个设计的走向。随着批次大小的增加,相同的权重获取操作可以在多个序列中分摊开,从而使解码过程重新趋向于受计算能力限制的阶段。正是这种转变促使了连续批处理的出现:它将解码过程置于算术单元始终处于繁忙状态的范围内。
延迟公式
总请求延迟可分为预填充阶段和解码阶段的延迟:
T_total = TTFT + (N_tokens − 1) × TPOT
- TTFT(生成第一个标记的时间)包括提示语的完整预填充以及第一个输出标记的产生时间——这体现了用户对系统初始响应速度的感知。
- TPOT(每个输出标记所需的时间),即标记间延迟,代表后续每一步解码所需的固定成本。
- N_tokens表示输出内容的总长度。
(N − 1)这个系数是刻意设计的:第一个令牌已经位于TTFT内部,因此只有其余的令牌需要乘以TPOT。将原始预填充计算与TTFT混用是一个常见的错误。TTFT是面向用户的,必须包含那第一步解码操作。
2. GPU处理流量之前的入口处理
除非在流量进入GPU之前进行净化、评估和过滤,否则峰值流量将会使GPU不堪重负。典型的处理路径为:API网关 → 多层语义缓存 → 若未找到结果,则由智能路由器根据复杂度评分,将任务发送到普通模型队列或前沿模型队列中。
核心组成部分:
- 多层语义缓存:采用精确匹配的键值对,同时结合余弦相似度cos θ ≥ τ进行判断。重复查询不会触发模型调用,从而同时降低成本和延迟。
3. 执行引擎:连续批处理与内存流
经过路由后,任务进入执行引擎。静态批处理会浪费资源——整个批次都要等待最耗时的序列完成。生产环境采用连续批处理(迭代级调度)方式,这样资源就能持续得到充分利用,且序列一旦完成就会立即释放。
连续批处理不仅关乎处理速度,还能让系统从受内存限制的模式转变为受计算能力限制的模式,从而使GPU能够直接进行运算,而无需等待HBM响应。
4. 直接解决阶段性瓶颈
缓存、路由和分批处理用于管理流量,而接下来的机制则用于重塑各个处理阶段。
预填充:FlashAttention
在传统注意力机制于HBM中生成完整的N×N得分矩阵时,预填充成本会随提示语长度的平方而增加。FlashAttention是一种具备I/O感知能力的分块内核,它通过将数据块流式传输到片上SRAM中来计算精确的注意力值,从而在不进行数学近似的情况下减少HBM的流量需求。这样既能得到精确的结果,又能缩短长提示语的处理时间。它已是大多数服务框架的默认选项,并常与分块预填充及后续的分解处理相结合使用。
量化
解码过程需要将权重从HBM传输到SRAM,这会产生相应成本。量化技术可通过将权重从FP16降至FP8、INT8或4位格式(如AWQ、GPTQ)来缩小权重大小,从而使每个标记传输的字节数减少。这样一来,有效带宽得以提升,更多序列能够存储在内存中。不过需要注意精度会有一定下降,需通过自身的测试来验证其影响程度。
分页KV缓存(PagedAttention)
传统的键值存储方式会逐个扩展令牌,从而占用大量内存。连续分配会导致碎片化,并迫使系统进行过度配置。PagedAttention则像操作系统的虚拟内存一样,将KV数据存储在固定大小的块中,从而消除碎片化问题,使相同硬件上能够处理更大的批次数据。结合连续批处理技术可进一步提升并发性能。
推测性解码
传统的顺序式、受内存限制的解码方式会在数据获取之间让计算单元处于空闲状态。推测性解码则利用了这些空闲时间:一个小型提案器会生成一段简短的令牌序列,主网络会在一次联合前向传播中验证该序列。被接受的令牌大约相当于一个大模型完成一步计算所需的时间。
正确性得以保持:匹配的前缀会保留;一旦出现首次不匹配,就会进行截断处理,目标模型则会从修正后的分布中重新采样。在贪婪解码模式下,标记与目标模型的匹配度是100%的;而在采样模式下,则要求分布在统计上保持一致。加速效果取决于草稿的通过率,因此草稿质量至关重要。
5. 两个阶段的调度:分块预填充与分解
预填充和解码过程需要不同的硬件资源。如果共享同一个GPU池,长时间的预填充操作会占用所有计算能力,从而导致其他请求的标记间延迟急剧上升。为此有两种互补的解决方案。
分块预填充
不必一次性进行大规模预填充,而是将提示语拆分成多个片段,并在同一批次中与解码步骤交错处理(Sarathi / Sarathi-Serve)。这样既能减轻对相邻任务的TTFT峰值影响,又能混合处理计算密集型与内存密集型任务。连续批处理决定哪些请求共享同一步骤,而分块预填充则决定了如何在不影响解码速度的情况下进行大规模预填充。
分散式服务
分块预填充可减少相互干扰;而分散式服务则通过将不同阶段部署在不同的硬件上彻底消除这种干扰(DistServe, Splitwise)。预填充任务在经过优化用于计算的节点群上处理,解码任务则在带宽优化型的节点群上执行,键值对则通过互连网络传输。每个阶段都在与其瓶颈相匹配的硬件上实现扩展。
确实存在权衡:KV传输成了新的瓶颈,且权重必须同时存储在两个池中。从大规模应用来看,针对不同阶段进行资源分配能更好地应对这些开销。规模较小的系统通常仅采用分块预填充的方式。
6. 系统影响与权衡
生产环境往往需要在性能、运营风险和基础设施成本之间做出取舍。这些数值会随着硬件、模型、流量及配置的不同而变化——应针对自身工作负载进行基准测试,而非直接套用通用比例。
多层语义缓存——包括精确的KV存储以及向量相似度检测。命中时可直接避免调用模型。成本为向量搜索所需的时间(几毫秒到几十毫秒),若τ值过低则可能出现过时或接近正确的答案。
智能路由——通过复杂度分类器将简单任务分配给小型模型,从而降低平均处理成本;但错误路由会影响服务质量。
连续批处理——在生成过程中进行迭代级连接。在并发环境下能提升利用率和吞吐量;但在整合阶段个别请求可能会排队。静态批处理仍适用于离线高吞吐量任务。
量化——低精度权重可减少HBM与SRAM之间的数据传输量。每块GPU能处理更多并发任务;需验证精度;不同内核对量化的支持程度各异。
分页KV存储——固定块结构可消除数据碎片。允许更大的批处理规模;但需要相应的块管理机制以及兼容的注意力计算内核。
推测性解码——由小型提案模型先提出建议,再由大型模型共同验证。每个大步骤可处理多个标记;结果还会受到第二个模型及接受率的影响。
当需要精确的延迟或成本数据时,应从目标工作负载的可重复基准测试中获取(如已发布的性能研究或内部负载测试),而非依赖固定的营销宣传数据。
7. 形成闭环
从原型到实际应用意味着要为硬件进行设计。需将预填充与解码分开处理,观察批量大小如何影响解码是在内存限制下进行还是计算资源受限下进行,对可预测的查询进行缓存,将简单任务分配给小型模型,并通过连续批量处理来整合令牌。接着可通过量化、分页式键值存储以及推测性解码来突破解码瓶颈,同时通过分块预填充和拆分处理来减少相位干扰。这些措施共同作用,能够在不使GPU过载的情况下应对峰值负载。
容量规划检查清单
当 TTFT 值上升时,需检查提示词长度分布、语义缓存命中率、FlashAttention 的可用性,以及长提示词是否仍以单次预填充的方式占用 GPU 资源。在并发量增加导致 TPOT 值上升时,需查看有效批量大小、KV 数据的驻留情况、量化级别,以及解码过程是否又回到了受内存限制的模式。
实用的每周检查应回答三个问题:我们是否对可预测的查询进行了缓存?我们是否将简单任务从高端模型中分流出去?我们是否优化了解码流程,让 GPU 能够执行算术运算而非等待 HBM?只要这些问题的答案是肯定的,通常就不必在优化服务架构之前就购买新的服务器机架。
只有在分块预填充和连续批处理已展现出明显优势之后,分解机制才应被纳入规划路线图。互连流量与重复权重都是实际存在的成本;当针对特定阶段的模型池在您的使用场景中明显优于共享模型群时,才需为这些成本买单。
记录下在您的硬件上解码操作因计算限制而达到临界点的批量大小。这个具体数值比任何通用博客中的图表都能更准确地确定连续批处理的优化目标。
操作员注意事项
语义缓存需要设置生存时间TTL并定期审查τ值;过低的τ值会导致接近正确但并不完全准确的答案。路由器需要带有标签的复杂度数据,否则就会将复杂的提示错误地发送给小型模型。连续批处理需要设定队列延迟的服务水平目标,以避免“更高吞吐量”掩盖交互过程中的问题。推测性解码则需要开发草稿接受度监控面板——如果接受率持续下降,那就意味着您为第二个模型付费却并未获得任何性能提升。
应将相关论文视为机制证明,而非可套用的百分比承诺。在宣称能节省成本用于融资之前,先在自己的GPU、提示词长度及并发环境下进行复现测试。
参考文献
这些机制背后的核心论文(编号为原文作者所标,非本人标注):
- Orca分布式Transformer服务框架——Yu等人,OSDI 2022(USENIX会议)。
- PagedAttention内存管理机制——Kwon等人,SOSP 2023(arXiv:2309.06180)。
- GPTQ训练后量化技术——Frantar等人,2022年(arXiv:2210.17323)。
- AWQ基于激活值的权重量化方法——Lin等人,2023年(arXiv:2306.00978)。
- FlashAttention考虑I/O开销的精确注意力机制——Dao等人,NeurIPS 2022(arXiv:2205.14135)。
- 用于加速Transformer推理的推测解码技术——Leviathan、Kalman、Matias,ICML 2023(arXiv:2211.17192)。