MAGICDEC: BREAKING THE LATENCY-THROUGHPUT TRADEOFF FOR LONG CONTEXT GENERATION WITH SPECULATIVE DECODING

发表时间: 2024-08 · arXiv:2408.11049

原文: https://arxiv.org/abs/2408.11049

作者/机构: Ranajoy Sadhukhan1∗, Jian Chen1∗, Zhuoming Chen1, Vashisth Tiwari1, Ruihang Lai1, Jinyuan Shi2, Ian En-Hsu Yen2, Avner May3, Tianqi Chen1, Beidi Chen1
1卡内基梅隆大学 2Moffett AI 3Together AI

速读

一句话结论 本文提出了 MagicDec 框架,通过为草稿模型引入 KV Cache 压缩技术,打破了长上下文和大批量推理中投机解码的效率瓶颈,在不损失生成质量的前提下,实现了最高 2.51 倍的吞吐量与延迟双重提升。

要解决什么问题 传统的投机解码(Speculative Decoding, SD)通过小模型起草、大模型验证来降低延迟,但业界普遍认为它无法胜任高吞吐量场景。卡点在于机制上的计算资源竞争:当批量大小(batch size)增加时,算术强度提高,线性层的计算会占满 GPU 算力,导致大模型验证草稿 token 的计算成本急剧上升。如果草稿的命中率不高,大模型就会把宝贵的算力浪费在验证错误 token 上,使得投机解码效率不增反降。现有的批处理技术(如 vLLM)靠增大批量来提高吞吐量,但这会牺牲每个 token 的延迟;而量化等模型压缩手段又会掉精度。因此,如何在不牺牲输出质量的前提下,同时兼顾长序列大批量推理的低延迟和高吞吐量,成为了一个亟待解决的核心卡点。

怎么做的 核心思路是放弃压缩草稿模型的权重,转而压缩草稿模型的 KV Cache。该设计能绕开原有卡点,源于作者发现的“临界序列长度”现象。在中长序列和大批量的场景下,推理瓶颈会发生转移:KV Cache 的内存占用会超过模型参数,并随批量大小线性增长。此时,现代 GPU 加载海量 KV Cache 的内存耗时远超计算耗时,推理从受计算限制转变为受内存限制。因为验证和解码共享相同的 KV 加载成本,所以在超过临界长度后,验证步骤的额外计算开销就被掩盖了,投机解码重新变得高效。为了最大化该优势,MagicDec 的关键设计由三个部件构成:草稿模型大小、草稿 KV 预算、以及 KV 压缩算法。首先,在长上下文中,使用目标模型自身配合压缩 KV 进行“自投机”,比使用独立的小型草稿模型能获得显著更高的 token 接受率(轻松超过 90%)。其次,系统需要动态分配草稿 KV 预算,以在草稿生成成本和接受率之间找到平衡。最后是 KV 选择策略,相比于每次生成都要重新搜索的动态算法(如 PQCache),预先收集稀疏 KV 的静态算法(如 SnapKV)消除了搜索开销,综合收益更高。方法的加速比由以下定义性公式决定。假设目标模型和草稿模型解码一个 token 的时间分别为 $T_T$ 和 $T_D$,验证 $\gamma$ 个 token 的时间为 $T_V(\gamma)$,预期生成长度为 $\Omega(\gamma,\alpha)$($\alpha$ 为接受率),则投机解码的加速比为:$$ \text{Speedup} = \frac{T_T \cdot \Omega(\gamma,\alpha)}{T_D \cdot \gamma + T_V(\gamma)} $$ 当引入 KV 压缩策略时,草稿模型的总耗时 $T_D \cdot \gamma$ 会被替换为 $T_{select}(K) + T_D(K) \cdot \gamma$,其中 $T_{select}(K)$ 是保留 $K$ 个 token 的 KV 选择成本,$T_D(K)$ 是基于这 $K$ 个 token 的解码时间。通过优化该目标函数,MagicDec 确保了极低的草稿延迟和极高的接受率。

效果如何 实验在 8x A100、8x H100 和 L40 GPU 上进行,主要评估模型为 LLaMA-3.1-8B,并在 LLaMA-3.1-70B、Qwen2.5 等模型上进行了泛化测试。测试任务包括 PG-19 数据集生成及 Ruler 长文本任务。对比基线主要包括两条路线:一是标准的自回归解码(代表无投机路线),二是使用 TinyLlama-1.1B 作为草稿模型的标准投机解码(代表压缩模型权重的传统路线)。量化结果显示,在序列长度超过 4000 的大批量设置下,基于 SnapKV 压缩的 MagicDec 展现出显著优势,在 LLaMA-3.1-8B 上最高实现了 2.51 倍的加速比。在 Qwen2.5-32B 和 Mistral-7B-v0.3 上也分别测得了 1.51 倍和 2.06 倍的加速。实验证明,当序列极长且批量极大时,自投机反超了小型草稿模型,因为此时极高的接受率带来的收益远大于加载大模型权重的成本。该方法的局限性在于,它仅针对解码阶段的性能优化,并未解决长上下文在预填充阶段的计算挑战。此外,由于该方法依赖于掩盖计算开销,它在具有更高算力与内存带宽比的高端 GPU(如 H100)上能取得比普通硬件更好的加速效果。

A1 主要贡献

本文旨在解决在长上下文应用(如交互式聊天机器人、文档分析和智能体工作流)中,同时实现大型语言模型(LLM)服务的低延迟和高吞吐量这一挑战。

核心问题:
传统的推理优化技术面临一个固有的权衡:
1. 投机解码(Speculative Decoding, SD):通过使用一个较小的草稿模型预测多个 token,再由目标模型验证,可以无损地降低延迟。然而,现有观点认为,当批量大小(batch size)增加时,验证成本会急剧上升,导致 SD 效率低下,因此不适用于高吞吐量场景。
2. 批处理(Batching)技术:如 vLLM 等通过增大批量大小来提高吞吐量,但这通常以牺牲每个 token 的延迟为代价。
3. 模型压缩技术:如量化、剪枝等可以同时改善延迟和吞吐量,但通常会牺牲模型输出的质量。

基于这些挑战,本文提出了一个核心问题:我们能否在不牺牲准确性的前提下,同时提高长序列推理的吞吐量和延迟?

研究目标与创新点:
本文对上述问题给出了肯定的回答,并指出对于中长序列的大批量推理场景,投机解码(SD)可以被有效地用来同时改善吞吐量和延迟。这一结论基于以下几个关键洞察:

  1. KV Cache 成为大批量长上下文场景下的主要瓶颈:在长上下文和大批量推理中,KV Cache 的内存占用会超过模型参数,并随批量大小线性增长。尽管计算量也随之增加,但现代 GPU 极高的峰值 FLOPS 与内存带宽比导致 KV Cache 的加载时间增长远快于计算时间,使 LLM 推理变得更加受内存带宽限制(memory-bound)。

    图1:(a) LLaMA-3.1-8B 推理时间分解与批量大小的关系(输入长度=16384,硬件=8xH100s)。(b) 在32k提示长度下,自回归解码和基于StreamingLLM的自投机解码在LLaMA-3.1-8B上的吞吐量与每token延迟的关系。(c) LLaMA-3.1-70B的草稿token接受率比较。使用Top-k注意力进行自投机解码比其他草稿-目标对实现了更高的接受率,即使在内存比例更低的情况下也是如此。x轴表示草稿模型内存占用与目标模型内存占用的比率。
    图1:(a) LLaMA-3.1-8B 推理时间分解与批量大小的关系(输入长度=16384,硬件=8xH100s)。(b) 在32k提示长度下,自回归解码和基于StreamingLLM的自投机解码在LLaMA-3.1-8B上的吞吐量与每token延迟的关系。(c) LLaMA-3.1-70B的草稿token接受率比较。使用Top-k注意力进行自投机解码比其他草稿-目标对实现了更高的接受率,即使在内存比例更低的情况下也是如此。x轴表示草稿模型内存占用与目标模型内存占用的比率。

  2. SD 的有效性取决于一个“临界序列长度”:现有研究认为 SD 在大批量下效率低,但这只适用于短序列。当序列长度超过一个“临界长度”后,即使在非常大的批量下,KV Cache 的加载成本也会成为主导因素。此时,验证步骤的计算开销相对于 KV 加载成本变得不那么重要,使得 SD 再次变得高效。

  3. 压缩 KV Cache 是更有效的投机策略:为了在大批量处理中最小化昂贵的验证步骤,高 token 接受率至关重要。研究发现,相比压缩模型权重(使用更小的草稿模型),压缩草稿模型的 KV Cache 能在相似的内存约束下实现显著更高的接受率。如图 1c 所示,仅压缩模型权重难以达到 90% 的接受率,而 KV 压缩则可以轻松超过这一水平。

本文贡献总结:
基于以上洞察,本文提出了 MagicDec 框架,证明了与普遍认知相反,通过利用 KV 压缩,投机解码(SD)即使在大批量场景下也能实现显著的加速。

A3 背景知识/关键Observation/设计原则

本节介绍了对投机解码和 LLM 推理性能的理论分析。首先回顾投机解码加速的数学公式,并确定影响它的关键因素。其次,分析长上下文场景中的 LLM 推理,重点说明了使投机解码能够在大批量下实现加速的瓶颈转移。最后,论证了在长上下文、大批量的场景下,基于压缩 KV 的草稿模型是实现高加速比的必要条件。

3.1 投机解码加速分析

3.2 KV Cache 瓶颈使投机解码加速成为可能

本节分析了随着序列长度和批量大小的增加,推理瓶颈如何转移,以及这种转移如何影响第3.1节中讨论的因素。

3.3 压缩 KV Cache 实现更高效的投机

本节解释了为什么在长上下文、大批量场景下,KV 压缩比轻量级草稿模型更受青睐。主要有两个原因:

A2 方法细节

本节介绍了 MagicDec 为确定正确草稿策略而执行的权衡分析。在第3.3节中,我们已经阐述了在这种情况下采用基于压缩 KV 的草稿策略的原因。然而,要有效利用 KV 压缩,我们需要考虑三个不同因素:(a)草稿模型大小,(b)草稿 KV Cache 大小或草稿 KV 预算,以及(c)KV 压缩算法。所有这三个因素都必须被考虑,以在草稿成本和接受率之间达到完美的平衡。

4.1 基于压缩 KV 草稿的加速通用公式

4.2 草稿模型大小选择

4.3 草稿 KV 预算选择

4.4 KV 选择策略的比较研究

A4 实验环境

A4 实验结果

5.1 端到端加速

5.2 比较不同的 KV 压缩方法

5.3 消融研究

A5 结论

结论总结
优化 LLM 推理的吞吐量和延迟极具挑战性,尤其是在长上下文、大批量场景下。本文的分析揭示,与现有误解相反,投机解码在这种场景下是有益的,并且其效用会随着批量大小的增加而增强。在寻找有效的草稿策略时,我们发现,在相同的内存预算下,KV 压缩比模型压缩更容易实现更高的接受率,这一优势在大批量和长上下文长度的场景下更为显著。基于这些洞见,我们探索了不同的 KV 压缩算法作为草稿策略,并提出了一个感知瓶颈的通用框架,以根据任务、批量大小和序列长度选择合适的草稿策略。

局限性与未来工作
* 局限性:MagicDec 仅关注长上下文 LLM 服务的解码性能,而预填充(prefill)阶段在这些场景中也同样充满挑战。此外,MagicDec 在高端 GPU 上往往能取得更好的加速效果,因为它们具有更高的 FLOPS 与内存带宽比和更大的 HBM 容量。
* 未来工作
* 可以将 MagicDec 与专注于提升预填充性能的工作(如【2, Mnemosyne: Parallelization strategies for efficiently serving multi-million context length llm inference requests without approximations, 2024, arXiv】、【48, DistServe: Disaggregating Prefill and Decoding for Goodput-Optimized Large Language Model Serving, 2024, arXiv】)相结合,以同时改善预填充和解码性能。
* 可以探索在卸载(offloading)和分布式设置中采用投机解码,以减少通信开销,从而更好地利用普通设备的资源。

A6 附录

A.1 系统实现

A.2 在 A100 上的各种批量大小和上下文长度的结果

A.3 与 MLC-LLM 结果的比较

A.4 SnapKV 和 StreamingLLM 的进一步结果

A.5 Qwen 和 Mistral 模型的结果

A.6 TinyLLama1.1B-LLaMA2-7B-32K 结果