← 专题深读

专题深读 · 2026-10-27 · 进阶 · 作者 bombong

LLM 服务:连续批处理、PagedAttention 与预填充-解码分离

LLM 服务的瓶颈往往不在计算,而在 KV 缓存内存和请求调度。本笔记梳理连续批处理、PagedAttention 和预填充-解码分离各自解决了哪种瓶颈、付出了什么代价,以及近期研究把 KV 缓存迁移和压缩到了什么程度。

目录
要点
  • LLM 推理分为一次性处理输入的预填充和逐个生成 token 的解码两个阶段,两者的瓶颈不同(预填充受限于计算,解码受限于内存)。
  • 连续批处理在每生成一步 token 时重新组织批次,移出已完成的请求、加入新请求,从而减少 GPU 因长请求而空闲的时间。
  • PagedAttention 将 KV 缓存划分为固定大小的块进行管理。内存碎片减少,可同时接收更多请求,并且可以按块进行复用、替换和压缩。
  • 预填充-解码分离将两个阶段交给不同的 GPU,使其互不干扰。代价是 KV 缓存成了需要通过网络搬运的负担,这段传输时间会加到 TTFT 上。
  • 近期研究的方向是把 KV 缓存下放到 SSD、文件系统等更低的存储层级,并考察调度策略对尾延迟的影响有多大。

为什么需要:瓶颈在“排队方式”而非模型

在模型服务(让训练完成的模型实际响应请求的运维工作)中,大语言模型(LLM)的情况与普通 Web 服务器不同。每个请求的回答长度各不相同,回答以自回归模型的方式逐个拼接 token 生成。即使是进入同一块 GPU 的请求,有的 10 个 token 就结束,有的要过 2,000 个 token 才结束。

推理分为两个阶段。首先在预填充(prefill)阶段一次性读取整个提示词,并保存这一过程产生的中间计算结果 KV 缓存(注意力会反复使用的 Key、Value 值)。随后在解码(decode)阶段读取该 KV 缓存,逐个生成 token。预填充包含大量大型矩阵乘法,瓶颈在计算;解码每生成一个 token 都要从内存读取全部权重和 KV 缓存,瓶颈在内存带宽。

旧的静态批处理把多个请求打包一起运行,必须等包内最长的请求结束后才接收下一批。短请求即使提前结束也无法让出位置,KV 缓存还要按“最大长度”预先占用,造成 GPU 显存(VRAM)浪费。这正是延迟高、吞吐量(token/秒)低的原因。

因此,服务技术沿着回答三个问题的方向发展:何时加入和移出请求(连续批处理),如何在内存中存放 KV 缓存(PagedAttention),性质不同的两个阶段是否应在同一块 GPU 上运行(预填充-解码分离)。

核心思想:电梯、停车位、分工厨房

给三种技术各配一个比喻,理解起来会更快。连续批处理(Continuous Batching)就像电梯。静态批处理是所有乘客都下完之前不回一楼的电梯,而连续批处理则每层都停,该下的下、该上的上。这里的“层”就是生成一个 token 的一步。

PagedAttention(分页注意力)近似于把停车场划分成车位。不再为每个请求整块预留最大长度的空地,而是在需要时逐个分配小车位(块)。这一思路借鉴自操作系统以页为单位管理虚拟内存的方式。即使请求的 KV 缓存在物理上是分散的,只要有块表就能连续读取。

预填充-解码分离是餐厅厨房的分工。备料(预填充)是一次性快速处理大量食材的工作,烹饪(解码)则是逐盘少量、持续进行的工作。如果一位厨师交替做两件事,每当有备料任务进来,烹饪就会停下。交给不同团队就能互不干扰,但会新增把备好的食材(KV 缓存)搬到灶台的运输成本。

总结三种技术所做的取舍:连续批处理放弃了简单性,接受每一步的调度开销。PagedAttention 放弃了连续的内存布局,承受沿块表进行的间接引用。分离架构以消除阶段间干扰为代价,承担了网络传输。

单 GPU 处理与预填充-解码分离

在同一 GPU 上处理预填充与解码交替进行

  • 无需迁移 KV 缓存
  • 配置简单
  • 长预填充会使解码停顿

预填充-解码分离不同阶段使用不同 GPU

  • 两个阶段互不干扰
  • KV 缓存成为需经网络传输的负担
  • 传输时间计入 TTFT

공통 两者都以连续批处理和以块为单位的 KV 管理为基础

比较两种架构各自得到什么、付出什么。

如何工作

第一,请求到达后,调度器查看等待队列。连续批处理以 token 为单位插入和移出请求,因此每完成一步都会发生“移除已完成请求、加入新请求”。连续批处理调度研究(paper)将其描述为:随序列到达和结束,以 token 为单位交错处理请求的方式。为防止长提示词一次性涌入而使正在解码的请求停顿,通常还会配合使用把预填充切成小块插入的分块预填充(chunked prefill)。QBA 研究(paper)的模拟器把解码优先批处理、分块预填充、token 预算,以及在确认 KV 缓存余量后的准入控制,都作为服务引擎的行为进行建模。

第二,新请求的预填充生成 KV 缓存后,PagedAttention 式的内存管理器分配固定大小的块。由于按块管理,多个请求使用相同前缀(例如相同的系统提示词)时可以共享这些块;内存不足时也可以按块驱逐或下放到更低层级。后文将介绍的大多数 KV 缓存研究都以这种“块”为基本单位。

第三,在分离架构中,预填充 GPU 生成的 KV 缓存被发送到解码 GPU。光 KV 缓存网络研究(paper)指出,在响应开始之前,每个请求的 KV 缓存都必须从预填充 GPU 迁移到解码 GPU,而编码智能体的一轮交互往往要迁移整个长上下文的 KV 缓存。在带宽不足的网络中,这一传输会直接加到 TTFT(首个 token 耗时)上。

第四,解码 GPU 沿块表读取 KV 缓存,逐个生成 token,调度器在每一步重新组织批次。已完成回答的请求的块会被释放,或保留在缓存中供下一轮复用。

分离式服务中请求的流转路径请求队列 → 调度器; 调度器 → 预填充 GPU(准入); 预填充 GPU → 解码 GPU(KV 传输); 解码 GPU → KV 块池(读取块); KV 块池 → 下层存储(卸载); KV 块池 → 响应 token(生成); 解码 GPU → 调度器(下一步)请求队列调度器连续批处理预填充 GPU一次性处理提示词解码 GPU每次一个 tokenKV 块池PagedAttention下层存储CPU、SSD、文件系统响应 token准入KV 传输读取块卸载生成下一步
分离式服务中请求的流转路径 请求经过调度器,在预填充 GPU 上生成 KV 缓存,KV 再被转移到解码 GPU。解码每走一步都会回到调度器,重新组建批次。

发展脉络:压缩、复用与迁移 KV 缓存

按块管理普及之后,研究重点转向“如何节约使用 KV 缓存”。一个分支是复用。CacheTune(paper)认为,在长上下文中,预填充造成的 TTFT 是最大的瓶颈,并针对现有前缀缓存只在开头部分完全相同时才有效的局限。直接复用非前缀位置的 KV 会破坏片段之间的注意力关系、降低质量,因此它只挑选对恢复注意力重要的 token 重新计算,其余部分复用。

另一个分支是压缩与驱逐。EVICPRESS(paper)指出,用户增多时 KV 缓存很容易超出 GPU 内存,而现有研究只做了下放到更低层级的驱逐或压缩中的一种。因此它用一个效用函数对所有上下文的压缩和替换决策进行联合优化。KV 块联合编码(paper)跨请求和输入片段,把相似的块合并为一个共享表示,同时保持标准缓存结构不变。据报告,它实现了最高 4.38 倍压缩且几乎没有精度损失,在单机 vLLM 基准测试中 token 吞吐量提高了约 40%。

驱逐什么也被重新审视。近期性与频率自适应 KV 缓存(paper)指出,在常用的 LRU(最久未使用者优先驱逐)策略下,彼此无关的任务会互相挤出对方的缓存。它为最近使用的块和频繁使用的块动态分配空间,在合成文档问答任务中,缓存命中率较 vLLM 最高提升 10.8%,TTFT 最高降低 12.6%。不过在真实对话任务中,两者分别只有 2.1% 和 2.0%。

智能体和分离架构带来了新的压力。TokenCake(paper)处理的是等待外部函数调用的智能体的 KV 缓存在 GPU 内存中闲置的问题。它在函数调用期间预先下放缓存,并预测返回时间提前加载,在内存紧张的环境中,总延迟比 vLLM 最多降低 47.06%,有效 GPU 利用率提高 16.9 个百分点。在分离架构方面,SpectrumKV(paper)把 KV 传输从“发送/不发送”的二分法,变成了为每个 token 分配不同精度的问题;光 KV 缓存网络(paper)则把传输路径本身换成了光电路交换机。

最新动向

第一个趋势是把 KV 缓存下放到离 GPU 更远的地方。KVStream(paper)认为,在智能体、编码和文档任务中,待复用前缀的 KV 缓存已超出 GPU 和主机内存,存储 I/O 因此进入了推理阶段的关键路径。它的出发点是这样一个观察:节点本地的单块 NVMe 承担了所有读取,而已挂载的并行文件系统几乎处于闲置。于是它把块复制到所有层级,由空闲的层级去取下一个块。接入 LMCache 并在最多 128 块 GPU 上评估的结果显示,其读取速度在理论带宽上限的 5% 以内,离线吞吐量最高达到 LMCache 的 1.49 倍,请求密集时的平均 TTFT 最多降低至 1/6.1。

第二个趋势是重新审视调度策略。连续批处理调度研究(paper)考察了在不改变模型结构或内核、只更换轻量策略的情况下,延迟与吞吐量的平衡是否会改变。在六个模型和 L40S、A100、H100 GPU 上对八种策略运行 1,152 次的结果表明,即使模型、GPU、任务、批大小和预填充预算都相同,吞吐量、TTFT 和尾延迟也会因调度器选择而不同。在许多设置中,加入老化机制的“短提示词优先”是最强的实用基线。即便是事先知道剩余长度的理想调度器也不够,因为批处理和硬件效应会共同影响性能。

QBA(paper)从公平性角度看待同一问题。优先处理预测回答较短的请求可以降低平均延迟,但长请求会被严重推后。反过来,如果无限制地把等待已久的请求往前提,在拥塞时长请求又会被过度优待。QBA 会提升等待已久的长请求的优先级,但用配额和“债务”规则限制提升幅度,在大幅降低长请求尾延迟的同时,保住了平均延迟收益的相当一部分。

近期研究中值得注意的数字

最高 6.1 倍KVStream 平均 TTFT 降低(负载集中时)
最高 1.49 倍KVStream 离线吞吐量
1,152 次调度策略比较的运行次数
最高 4.38 倍KV 块联合编码压缩
均为各研究在自身实验条件下报告的最大值。条件不同,不能直接相互比较。
KV 缓存与调度研究地图 同一组中的研究以不同方式解决同一问题。它们是按主题归类的,并非继承关系。

局限与争议

预填充-解码分离并非没有代价。正如 SpectrumKV(paper)所说,分离使 KV 缓存变成需要通过网络发送的负担。为减少传输量而对 KV 进行量化时,各模型的承受程度不同。在该研究中,Qwen2.5-7B 在 INT4 KV 量化下严重崩溃,而 Mistral-7B 和 Gemma-2-9B 保持稳定。因此在部署时会运行简短的探测实验来决定是否使用 INT4。在归一化 KV 预算为 50% 的 WikiText-2 上,SpectrumKV 在三个模型上的困惑度变化为 +1.97%、-0.06%、-0.44%,对比方法 PDTrim 则为 +25.85%、+22.07%、+35.63%。

网络成本也是争议点。光 KV 缓存网络(paper)认为,在带宽不足的分组网络之后,传输会增加 TTFT;它在预填充计算期间预先预留光电路,从而隐藏机械式交换机的重构延迟。在使用真实服务轨迹的模拟中,它以 2:1 网络成本的 0.55~0.78 倍实现了与 400G 分组网络相近的性能,并能承受 384 端口机械式交换机 50ms 的重构延迟。不过需要注意,这是模拟结果。

把 KV 缓存下放到更低层级也取决于条件。KVStream(paper)的性能模型预测,负载越大,TTFT 收益越大;但如果得益于主机内存或请求到达顺序,复用部分已经留在缓存中,收益就会消失。压缩类方法属于有损压缩,需要按任务确认对质量的影响。EVICPRESS(paper)把质量和延迟纳入同一个效用函数,也是因为两者相互权衡。

调度伴随着公平性问题。“短者优先”能改善平均值,但可能让长请求饥饿(paper),而实验室中的理想策略在实际硬件上并不一定照样有效(paper)。只看平均延迟这一个数字来选择策略,会在尾延迟上出问题。

实践判断标准:何时用什么

连续批处理和 PagedAttention 式的块管理,几乎已是当今推理引擎(vLLM、SGLang、TensorRT-LLM 等)的默认配置。与其说需要单独选择,不如视为已开启,把时间花在按任务调整块大小、最大批次、预填充预算等参数上更为划算。需要关注的指标不是平均延迟,而是 TTFT、尾延迟(P90、P99)以及 KV 缓存命中率。

当长提示词与长输出混杂、相互干扰严重,并且 GPU 之间带宽充足时,值得考虑预填充-解码分离。如果提示词较短、流量较小,传输成本和运维复杂度很容易超过收益。在分离架构中若要对 KV 进行量化后发送,应先按模型逐一测试。同样是 INT4,有的模型会崩溃(paper)。

智能体任务需要单独考量。等待工具调用期间,KV 缓存会占用 GPU 内存(paper);待复用的前缀很大,存储 I/O 会成为瓶颈(paper)。对于这类任务,应优先考察 KV 缓存的下放与预加载以及多层级存储。如果不同任务共用一个缓存,应通过命中率确认 LRU 是否导致它们互相挤出缓存(paper)。

常见错误有三种:认为同样的 GPU、同样的模型就与调度器无关;期望合成任务上的改进数字在真实对话任务中原样重现(在 paper 中,10.8% 降到了 2.1%);只看压缩率而跳过质量检查。

服务配置检查清单

指标

  • 是否看 TTFT、P90、P99,而不只看平均值
  • 是否跟踪 KV 缓存命中率
  • 是否用真实流量而非合成负载进行测量

调度

  • 短请求优先是否会让长请求饿死
  • 是否调整了预填充预算和分块大小

KV 缓存

  • LRU 是否导致不同任务相互挤出缓存
  • 是否按模型分别测试了 KV 量化
  • 智能体等待期间是否卸载 KV
部署前需要确认的事项。

延伸阅读

如果想先把握模型服务的全貌,建议从连续批处理调度研究(paper)读起。它通过实验展示了连续批处理是什么,以及调度器如何改变吞吐量、TTFT 和尾延迟。接着读 QBA(paper),可以理解短请求优先与公平性之间的拉锯。

KV 缓存管理方面,比较自然的顺序是:先通过近期性·频率自适应缓存(paper)掌握替换策略的基础,再通过 EVICPRESS(paper)和 KV 块联合编码(paper)了解如何同时处理压缩与替换,最后通过 CacheTune(paper)把复用扩展到非前缀位置。

预填充-解码分离方面,把 SpectrumKV(paper)和光 KV 缓存网络(paper)放在一起读,可以从两个角度看“传什么”和“怎么传”。如果对智能体服务感兴趣,可以接着读 TokenCake(paper)和 KVStream(paper)。

相关术语

连续批处理 分页注意力 KV 缓存 TTFT 吞吐量(token/秒) 推理引擎 模型服务 量化

参考资料

奠基论文

最新研究

由 AI 根据所列参考资料撰写并经过审核。详情请查看原始资料。