Back to blog

KVFlow: Efficient Prefix Caching for Accelerating LLM-Based Multi-Agent Workflows

面向LLM多智能体工作流的高效前缀缓存管理框架,通过Agent Step Graph和工作流感知驱逐策略实现最高2.19倍加速

KVFlow: Efficient Prefix Caching for Accelerating LLM-Based Multi-Agent Workflows

一、论文概述

项目内容
标题KVFlow: Efficient Prefix Caching for Accelerating LLM-Based Multi-Agent Workflows
作者Zaifeng Pan, Ajjkumar Patel, Yipeng Shen, Zhengding Hu, Yue Guan, Wan-Lu Li, Lianhui Qin, Yida Wang, Yufei Ding
机构UCSD、AWS
论文arXiv:2505.xxxxx
硬件NVIDIA H100 (80GB), PCIe Gen5
领域LLM推理系统、多智能体工作流优化

二、核心思想

问题定义

LRU问题示例

Figure 1: 循环智能体工作流中LRU驱逐策略的问题示例

基于LLM的智能体工作流(Agentic Workflow)通过协调多个专业化智能体来解决复杂任务。现有LLM推理系统使用前缀缓存(Prefix Caching)来复用智能体固定提示词的KV张量,但采用LRU(最近最少使用)驱逐策略存在根本性缺陷:

问题描述影响
无法预测未来使用LRU仅基于历史访问时间,无法预知即将执行的智能体频繁的缓存未命中
提前驱逐即将被复用的KV缓存可能因长时间未访问而被驱逐大量重计算开销
动态后缀保留最近执行的智能体生成的动态后缀(不太可能被复用)反而被保留浪费宝贵的GPU内存

核心问题:在多智能体工作流中,LRU策略导致即将执行的智能体KV缓存被错误驱逐,造成不必要的重计算和延迟。

解决方案概述

KVFlow是一个工作流感知的KV缓存管理框架,通过两个关键机制解决上述问题:

  1. 工作流感知驱逐策略:基于Agent Step Graph预测智能体执行顺序,优先驱逐距离执行较远的智能体KV缓存
  2. 全重叠KV预取机制:利用工作流信息提前从CPU加载即将执行的智能体KV缓存,消除缓存未命中的停顿

关键创新:

组件功能效果
Agent Step Graph抽象智能体执行依赖关系统一表达多种工作流结构
Steps-to-Execution计算每个智能体距离执行的步数指导驱逐决策
节点级驱逐优先级在缓存树节点级别分配驱逐优先级共享前缀的精细管理
全重叠预取后台线程异步加载 + 状态感知调度隐藏CPU-GPU传输延迟

三、技术架构

整体框架

Agent Step Graph

Figure 2(a): 两种不同Agent Step Graph中智能体的steps-to-execution值

KVFlow在SGLang v0.4.4基础上实现,扩展了radix树缓存机制以支持工作流感知驱逐和全重叠预取。

Agent Step Graph与Steps-to-Execution

Agent Step Graph抽象:

Agent Step Graph是一个灵活的抽象,捕获智能体之间的执行依赖关系,支持多种工作流结构:

工作流类型步骤聚合函数示例
同步屏障(AND)max(E1, E2) + 1Expresser等待两个Executor都完成
条件分支(OR)min(E1, E2) + 1Expresser在任一Executor完成后触发

Steps-to-Execution计算:

通过递归应用步骤聚合函数,Agent Step Graph能够在任意多智能体工作流中统一计算每个智能体的steps-to-execution值。该值表示智能体距离下次执行的预期步数。

工作流感知驱逐策略

驱逐优先级分配

Figure 2(b): 缓存树中每个KV节点的驱逐优先级分配

驱逐优先级分配算法:

Algorithm 1: PriorityAssign(ASG)
  for step, agent in ASG:
    node = agent.last_fixed_prompt_node
    while node != root:
      node.counter[step] += 1
      node.priority = min(node.priority, step)
      node = node.parent

驱逐过程:

Algorithm 2: Evict(tree_cache, required)
  leaves = get_leaf_nodes(tree_cache)
  heapify(leaves)  // 基于priority构建最大堆
  while free_gpu_memory < required:
    node = heappop(leaves)
    free_gpu_memory += evict(node)
    if node.parent becomes a leaf:
      heappush(leaves, node.parent)

关键设计决策:

决策说明理由
仅分配固定提示词部分动态后缀获得最高驱逐优先级动态内容不太可能被复用
节点级优先级而非智能体级别共享前缀需要精细管理
最小值传播共享节点取子节点中最小优先级确保只要有智能体近期需要就保留
多工作流冲突解决选择最低(最保守)优先级跨工作流的共享节点管理

全重叠KV预取

预取机制

Figure 3: 全重叠KV预取机制示意图

三层优化:

层级机制说明
反应式加载基线智能体调度时才开始加载KV
主动预取利用Step Graph预测后台线程提前加载即将执行的智能体KV
状态感知调度跳过加载中的请求优先调度KV已在GPU的智能体

预取细节:

预取详情

Figure 3(b): 预取过程的详细时间线

缓存节点状态:

状态说明调度行为
in GPU memoryKV在GPU内存中可立即调度
backup in CPUKV已备份到CPU需要加载
loading正在从CPU加载到GPU跳过,等待完成
offloading正在从GPU卸载到CPU排除在驱逐决策之外

关键优势:

  • PCIe支持全双工传输,KV加载与token生成输出不冲突
  • 当工作流包含分支时,保守地预取所有可能执行的下一个智能体
  • 预取未命中时不会浪费带宽,因为传输仅在活跃计算期间进行

实现细节

步骤信息捕获:

  • 假设每个sgl.function对应一个独立智能体
  • 执行时进行即时替换,将工作流元数据嵌入HTTP请求
  • 元数据包括:当前智能体身份、所有智能体的steps-to-execution

提示词分割:

  • 方案一:用户显式标记固定部分结束位置
  • 方案二:启发式方法,跟踪缓存命中历史,将一致命中的前缀视为固定部分
  • 自适应机制:如果固定提示词节点超过阈值周期未被复用,自动移除

客户端跟踪:

  • 为每个应用分配唯一客户端ID
  • 避免不同工作流中同名智能体的命名冲突

四、核心创新

创新点说明效果
Agent Step Graph灵活抽象智能体执行依赖支持条件分支、同步屏障等多种结构
Steps-to-Execution预测智能体距离执行的步数指导驱逐决策的基础
节点级驱逐优先级缓存树节点级别的精细管理共享前缀的高效复用
全重叠KV预取主动预取 + 状态感知调度消除缓存未命中的停顿
工作流感知利用工作流结构信息优化系统首个工作流语义驱动的系统级优化

与现有方法的关键区别:

方法驱逐策略预取机制工作流感知
SGLangLRU无否
SGLang + HiCacheLRU反应式加载否
vLLMLRU无否
KVFlowSteps-to-Execution全重叠预取是

五、实验结果

实验设置

配置详情
模型Qwen2.5-32B, Llama-3.1-8B
GPUNVIDIA H100 (80GB), PCIe Gen5 (64 GB/s)
基线SGLang (GPU-only), SGLang w/ HiCache, vLLM
工作流10阶段顺序工作流, PEER风格工作流
评估指标端到端延迟, 加速比
解码确定性解码 (temperature=0, greedy sampling)

单工作流延迟

加速比-分支1

Figure 4(a): Qwen2.5-32B在H100上,branches=1(确定性顺序工作流)的加速比

加速比-分支2

Figure 4(b): Qwen2.5-32B在H100上,branches=2(每个阶段随机选择两个智能体之一)的加速比

配置说明:横轴格式为 固定部分token / 动态部分token / 输出token

关键结果:

配置SGLangHiCachevLLMKVFlow
4096/32/32, branches=11.0×1.2×1.0×1.4×
8192/32/32, branches=11.0×0.8×1.0×1.4×
4096/32/32, branches=21.0×1.15×1.0×1.35×
8192/32/32, branches=21.0×0.8×1.05×1.5×

关键发现:

  • KVFlow在所有设置下均实现最高加速比
  • 固定前缀越长,KVFlow优势越明显(8192 vs 4096)
  • 输出token越多,相对收益递减(解码延迟主导)
  • HiCache在某些大上下文设置下性能反而下降

优化分解:

  • 仅启用工作流感知驱逐:平均1.11倍加速
  • 进一步启用全重叠预取:加速提升至1.29倍

开销分析:

  • CPU端优先级分配和预取调度与GPU计算重叠,无暴露CPU开销
  • 预取不干扰解码,因为token生成不涉及PCIe传输
  • 未使用的预取KV不浪费带宽或内存

高并发工作流性能

高并发性能

Figure 5: H100上不同固定提示词长度/并发数设置下的高并发工作流性能对比

关键结果:

设置SGLangHiCacheKVFlow
Qwen2.5-32B, 512/20-Task1.0×1.1×1.15×
Qwen2.5-32B, 1024/10-Task1.0×0.95×1.15×
Llama3-8B, 512/128-Task1.0×0.55×1.0×
Llama3-8B, 1024/64-Task0.95×0.55×1.25×

关键发现:

  • KVFlow在所有高并发设置下均优于基线
  • HiCache在高并发下表现特别差,甚至不如SGLang(0.55倍)
  • vs HiCache最高加速:2.19倍(1024固定token,64并发工作流)

PEER风格真实工作流

Token分布

Figure 6: PEER风格工作流中固定、动态和输出部分的token分布

PEER加速比

Figure 7: KVFlow在PEER风格多智能体应用上的加速比

关键结果:

  • Qwen/16-Task:KVFlow实现1.1倍加速
  • Llama/128-Task:KVFlow实现1.1倍加速
  • 在真实部署场景中展现出强大的实际应用潜力

局限性

  • 主要针对结构化智能体工作流,未来执行顺序可在一定程度上预测
  • 对高度不可预测的工作流(无法推断未来执行),KVFlow退化为SGLang默认行为
  • 退化时不会引入额外开销或正确性问题

六、相关工作对比

方法类型局限KVFlow优势
SGLangLLM推理引擎LRU驱逐,无工作流感知工作流感知驱逐 + 预取
vLLMLLM推理引擎块级LRU驱逐细粒度节点级驱逐
HiCacheCPU缓存扩展反应式加载,高并发性能差全重叠预取,状态感知调度
InferCept工具调用优化不考虑多智能体工作流专门针对智能体工作流
Autellix智能体调度不考虑缓存管理缓存管理与调度协同
ParrotServe语义变量调度不考虑缓存管理工作流语义驱动优化

KVFlow的独特优势:

  • 首个利用工作流语义优化LLM推理系统的工作
  • 同时优化驱逐策略和预取机制
  • 节点级精细缓存管理,支持共享前缀
  • 全重叠预取消除缓存未命中的停顿

七、总结

核心贡献

  1. Agent Step Graph抽象:灵活捕获智能体执行依赖,支持条件分支、同步屏障等多种工作流结构
  2. Steps-to-Execution计算:通过步骤聚合函数预测智能体距离执行的步数
  3. 工作流感知驱逐策略:基于steps-to-execution的节点级驱逐优先级,替代LRU策略
  4. 全重叠KV预取:主动预取 + 状态感知调度,隐藏CPU-GPU传输延迟
  5. SGLang原型实现:在SGLang v0.4.4基础上实现,可推广到其他推理系统

性能指标

指标数值
单工作流加速(大提示词)最高1.83倍
高并发工作流加速最高2.19倍(vs HiCache)
优化分解-仅驱逐平均1.11倍
优化分解-驱逐+预取平均1.29倍
PEER真实工作流加速最高1.12倍
额外开销可忽略

技术影响

  • 首次证明工作流语义可以用于系统级优化
  • 揭示了LRU策略在多智能体工作流中的根本性缺陷
  • 为LLM推理系统从通用优化向应用感知优化转变提供了范例
  • 代码基于SGLang实现,可推广到vLLM等其他系统

未来方向

  • 探索更复杂的动态工作流场景
  • 与其他优化技术(推测解码、KV缓存稀疏化)的协同
  • 分布式多GPU场景下的工作流感知缓存管理

八、关键图片索引

图片说明文件名
Figure 1LRU驱逐问题示例figure1-lru-problem.jpg
Figure 2aAgent Step Graph示例figure2a-agent-step-graph.jpg
Figure 2b驱逐优先级分配figure2b-eviction-priority.jpg
Figure 3a全重叠预取概述figure3a-prefetch-overview.jpg
Figure 3b预取详情figure3b-prefetch-detail.jpg
Figure 4a加速比(branches=1)figure4a-speedup-branches1.jpg
Figure 4b加速比(branches=2)figure4b-speedup-branches2.jpg
Figure 5高并发性能对比figure5-high-concurrency.jpg
Figure 6Token分布figure6-token-distribution.jpg
Figure 7PEER工作流加速比figure7-peer-speedup.jpg

九、参考资源