返回 文章 apply CMS 文章

缓存感知预填-解码分离架构:长上下文LLM服务吞吐量提升40%

CPD通过缓存感知路由和三级KV缓存层次结构,将冷热预填请求隔离到不同计算资源,避免长上下文冷请求阻塞热请求,从而提升长上下文LLM服务性能。

LLM推理长上下文缓存感知预填-解码分离
成长分 / 100 75 综合收获、行动、留存与影响

缓存感知预填-解码分离架构:长上下文LLM服务吞吐量提升40%
为什么值得读了解长上下文LLM服务中TTFT高且不稳定的根本原因——冷热请求共享预填容量导致排队。

学习CPD架构如何通过工作负载分离和缓存复用实现40%的吞吐量提升。

关键洞察
  1. 长上下文服务中,热请求(可复用缓存)与冷请求(需完整计算)共享预填容量,导致热请求被冷请求阻塞,TTFT飙升。
  2. CPD引入预-预填充节点专门处理冷请求,普通预填充节点处理热请求,解码节点保持隔离,实现工作负载分离。
  3. 三级KV缓存层次结构(GPU内存、主机DRAM、分布式缓存)加速缓存复用,频繁访问的上下文自然向GPU靠近。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:14761

摘要

服务长提示词并不意味着响应速度必然缓慢。在 Together AI,我们构建了缓存感知的预填-解码分离架构(CPD),这是一种通过缓存命中率有意将冷热工作负载分开的服务架构,从而实现快速的上下文复用。通过隔离繁重的预填阶段并利用分布式 KV 缓存,CPD 在长上下文推理中实现了高达 40% 的可持续吞吐量提升,并显著降低了首令牌延迟(TTFT)——尤其是在混合的真实流量场景下。

当今的 AI 原生应用正将上下文长度推向新的极限。从多轮对话、编码助手到智能体记忆和检索增强系统,长提示词正成为常态。然而,高效服务这些大上下文仍然是一个挑战:TTFT 上升且变得更加不稳定。推理性能越来越不仅取决于模型计算,还取决于系统如何处理共享上下文。在实际工作负载中,许多请求并非完全全新。有些请求包含大量之前见过的上下文——例如,共享的系统提示词、对话历史或常见文档。我们将这些称为热请求。其他请求则引入大部分新上下文,需要完整计算——这些是冷请求

最近的进展,如前缀缓存和预填-解码分离(PD),已经改善了长上下文服务。前缀缓存通过复用之前计算的提示词前缀的 KV 缓存来减少冗余工作,而 PD 则将计算密集的预填阶段与延迟敏感的解码阶段分开,以减少它们之间的干扰。结合其他相关技术,如分块预填、序列/上下文并行等,它们共同帮助降低开销并提高硬件利用率。

然而,在极高负载下的实际工作负载带来了超出常见服务场景的新挑战。考虑一个系统,其中一些并发用户提交超过 10 万令牌的全新大提示词,而其他用户则继续多轮对话,这些对话大多复用之前的上下文。PD 确保解码不会被预填阻塞,但所有预填——无论是冷还是热——仍然共享相同的预填容量。大的冷提示词会占用这些资源数秒,而本可通过缓存复用快速服务的热请求最终在同一个队列中等待。结果,TTFT 增加不是因为这些请求需要大量计算,而是因为它们被卡在需要大量计算的请求后面。

为了解决这个问题,我们构建了一种缓存感知的分离服务架构,该架构使用独立的计算资源处理热请求和冷请求。通过识别请求包含多少可复用上下文,系统可以做出更智能的调度决策——减少不必要的等待,并在计算资源之间更有效地路由工作。系统不是让昂贵的冷预填主导共享容量,而是为热请求开辟快速路径,同时仍然高效处理新上下文。

因此,缓存感知的分离设计使系统能够在负载下更优雅地扩展。如图 1 所示,在尾部延迟敏感的 SLA 下,它始终比传统基线维持更高的可达吞吐量。在我们的评估中,CPD 将可持续 QPS 比现有分离设计提高了高达 35–40%,同时即使在存在大量冷提示词的情况下也保持更严格的尾部延迟界限。

__wf_reserved_inherit

图 1. 延迟 SLO 下的最大可达 QPS。

CPD 的工作原理

我们提出缓存感知的预填充-解码分离(CPD),它通过缓存感知路由共享 KV 缓存层次结构扩展了标准的预填充-解码分离服务。核心思想很简单:不要让昂贵的“冷”预填充阻塞可复用上下文的快速路径

该系统将推理分为三个角色:

预-预填充节点:处理低复用(冷)提示,计算新上下文,并将 KV 缓存写入分布式缓存。预填充节点:优先处理高复用(热)请求,从缓存读取 KV 块,而不是重新计算前缀。解码节点:保持延迟敏感,并与预填充干扰隔离。

预填充和解码已经分离,但 CPD 增加了一个专门的预-预填充层,用于处理几乎没有缓存复用的请求。这些节点计算大型新上下文,并将其 KV 缓存写入分布式缓存。同时,普通预填充节点专注于可以复用现有状态的请求,从缓存读取 KV 块,而不是重新计算它们。解码节点保持隔离且延迟敏感。

在底层,CPD 依赖于三级 KV 缓存层次结构,如图 2 所示。最快的层位于 GPU 内存中,其次是主机 DRAM,以及通过 RDMA 连接的集群范围分布式缓存。当冷请求由预-预填充节点处理时,其 KV 状态被写入分布式缓存。后续的相似请求可以以高带宽批量获取此状态,将原本需要数秒的计算转变为数百毫秒的传输和少量重新计算。随着时间的推移,频繁访问的上下文自然地向 GPU 靠近,进一步缩短延迟。

__wf_reserved_inherit

路由器将这些整合在一起。对于每个请求,它估计提示中有多少可以从缓存中提供。低复用的请求被引导到预-预填充节点,而高复用的请求直接进入普通预填充节点。这种工作负载分离防止了大型冷预填充饱和共享计算资源,同时允许系统吸收新上下文并持续预热缓存。结果是,即使在混合和突发性的长上下文工作负载下,服务栈也能保持快速路径的快速。

重复请求时会发生什么

当相同或相似的长上下文多次出现时——这在副驾驶、智能体和多轮聊天场景中很常见——CPD 的优势变得明显。每个请求都将工作负载从繁重的计算绑定进一步推向前缀缓存复用。

__wf_reserved_inherit

请求 1 — 冷(引导)

当大型上下文首次出现时,它被分类为。路由器将其发送到预-预填充节点,该节点执行完整的预填充计算。同时,生成的 KV 缓存被写入分布式缓存。

此请求支付全部计算成本,但它通过将新上下文转换为可复用状态来预热系统

请求 2 — 热(分布式缓存复用)

当相同上下文再次出现时,路由器现在将其识别为。无需重新计算前缀,普通预填充节点通过 RDMA 从分布式缓存中获取 KV 块并将其加载到 GPU 内存中。

现在,数秒的计算被高带宽传输和轻量处理所取代。延迟大幅下降,同时 GPU 计算压力也降低。

请求 3 — 热(本地复用)

如果上下文在同一节点上保持活跃,其 KV 状态可能已存在于 GPU 或主机内存中。无需分布式缓存传输——系统直接复用本地缓存。

此时,预填充开销变得极小,延迟进一步缩短。原本需要数秒计算的 10 万 token 上下文现在可以在几百毫秒内完成服务。此外,CPD 不仅复用前缀——它将重计算与复用驱动的流量隔离,使系统能够扩展长上下文推理,而不会让冷负载主导共享资源。

评估

我们从两个对实际负载下长上下文服务系统至关重要的互补维度评估 CPD:

负载增加时的延迟和吞吐量扩展——随着目标 QPS 增加,TTFT(p50 和 p90)及每 GPU 吞吐量如何变化。竞争下的有效服务容量——在预填充侧饱和导致延迟快速膨胀之前,系统每 GPU 能维持的可持续 QPS。

我们将传统的基于 PD 的部署与 CPD 进行比较,重点关注缓存感知的分离如何改变混合热冷负载下的饱和行为和延迟:

2P1D/2P2D(基线):两个预填充节点和一个或两个解码节点,使用标准 PD 路由,所有请求共享相同的预填充容量。CPD-1D/2D:一个缓存感知的流水线,由专用预预填充层、一个普通预填充层和一个或两个解码节点组成,由 CPD 感知的路由器协调,区分热请求和冷请求。

所有实验均在 NVIDIA B200 GPU 上进行。每个预填充阶段在每个节点上使用跨 4 个 B200 GPU 的张量并行,而解码阶段使用数据并行,并在 4 个 B200 GPU 上进行注意力分片。我们将最大在途请求数限制为 24,以反映实际的准入控制并避免无界的尾部放大。

对于每个目标 QPS,系统在 30 秒内逐渐增加流量,然后维持稳态负载 600 秒。QPS 从 0.4 到 1.6 以 0.2 为步长扫描,以捕捉从轻负载到饱和的系统行为。

工作负载配置

为了反映实际的长上下文推理工作负载,我们基于一个具有大共享上下文和多轮交互的编码智能体场景设计了一个基准测试。此工作负载模拟了 AI 辅助软件开发环境,其中智能体在多轮交互中维护大量代码库上下文——读取文件、分析依赖、实现更改并迭代修复。使用合成数据,包含真实的热冷预填充请求混合,以考验 CPD 的调度决策。

结果

图 4 共同展示了随着系统负载增加,CPD 如何重塑延迟扩展行为和服务容量。

比较2P1D、2P2D、CPD-1D和CPD-2D模型在不同目标QPS下性能的四条折线图。

图4. 在目标QPS增加的情况下,2P1D/2P2D与CPD之间的性能比较。

饱和行为

随着目标QPS的增加,当预填充容量成为主要瓶颈时,两个系统开始出现差异。2P1D基线更早达到饱和,实现的QPS在每GPU约0.75–0.8 QPS处趋于平稳,此后排队延迟迅速增长。相比之下,在同一工作负载下,CPD继续扩展到每GPU约1.1–1.15 QPS,在进入饱和之前,可持续吞吐量提高了约40%

饱和点的右移与图4(左下)中的吞吐量曲线一致,其中CPD在负载增加时保持更高的有效预填充吞吐量。通过将冷预填充与缓存支持的热请求分离,CPD防止了长时间运行的冷提示独占共享预填充容量,使系统能够在更高的提供负载下高效运行。

负载下的延迟

在轻负载下,2P1D和CPD之间的中位TTFT(p50)相当,表明CPD在未拥塞状态下不会引入额外开销。然而,随着QPS向基线的饱和点增加,行为急剧分化。

对于2P1D,TTFT p50急剧上升超过1秒,并迅速进入多秒区域,反映了在大冷预填充后的排队情况。CPD表现出明显更平缓的增长:即使在基线已经饱和的目标QPS水平下,CPD仍保持亚秒到低秒的中位TTFT,如图4(左上)所示。这一改进直接源于工作负载隔离——重用缓存上下文的温请求不再被迫在昂贵的冷预填充执行之后等待。

尾部延迟(TTFT p90)显示出更微妙的模式。在中等负载下,两个系统表现出相似的p90行为。随着负载进一步增加,两种设计的p90 TTFT都上升,但在评估范围内,CPD始终低于或与基线相当(图4,右上)。重要的是,CPD在中位延迟上取得了显著收益,而没有引入不成比例的尾部放大。虽然冷流量突发仍可能增加预填充层内的排队,但其影响基本得到控制,保持了可预测的尾部行为。

吞吐量效率

图4中的吞吐量分解突出了这些改进的根本原因。CPD在高QPS下维持了更高的每GPU预填充吞吐量,而基线的预填充吞吐量随着排队加剧而趋于平稳并下降。两个系统之间的生成吞吐量大致相当,表明观察到的性能差异主要由更高效的预填充调度驱动,而非解码端优化。

关键结果与讨论

图4显示,在混合温冷工作负载下,CPD改变了长上下文服务的运行点。将解码容量从1D增加到2D提高了整体吞吐量,并延迟了基线和CPD配置的饱和,证实了解码端并行性有助于提高服务容量。

重要的是,即使解码容量扩展,CPD 仍能持续带来一致的改进。在 1D 和 2D 设置下,CPD 均能维持更高的每 GPU 有效 QPS,并且与相应基线相比,其中位 TTFT 的增长更为平缓。此外,CPD 保持相当或更高的解码吞吐量,表明其优势不仅限于预填充隔离,还延伸至更高效的端到端流水线利用。

这些改进并非源于原始模型执行速度,而是得益于预填充路径上的缓存感知隔离。通过防止长时间运行的冷预填充阻塞缓存支持的热请求,CPD 即使在重负载下也为重用保留了快速路径。这凸显出,随着上下文窗口的增长,系统级调度和重用感知设计成为推理性能中与模型和硬件效率同等重要的首要因素。