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

framework 2507.07400
prefix-cachingkv-cache-managementmulti-agent-servingsglang-extensionscheduling

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

Zaifeng Pan, Ajjkumar Patel, Zhengding Hu, Yipeng Shen, Yue Guan, Wan-Lu Li, Lianhui Qin, Yida Wang, Yufei Ding (UCSD & AWS) | 2025-07 | arXiv:2507.07400 Category: framework | Tags: prefix-caching, kv-cache-management, multi-agent, sglang, scheduling Read: 2026-04-18

Core Contribution #

KVFlow replaces SGLang 的 LRU 前缀缓存驱逐策略,改为 workflow-aware 的 "steps-to-execution" 优先级 + 完全重叠的 CPU→GPU 预取,在多智能体(multi-agent)工作流场景下相比 SGLang+HiCache 实现 1.83–2.19× 端到端加速。

Summary #

现代 agentic workflow (MetaGPT、AutoGen、AFlow、PEER、GPTSwarm 等) 把多个 "角色固定、prompt 很大" 的 agent 按图(graph)组织起来,反复迭代调用 LLM。每个 agent 的 system prompt(角色 + few-shot example)常在 1–3k+ tokens,是 prefix caching 的天然受益者。但现有 serving 系统(SGLang/vLLM)使用 LRU 驱逐 —— 当 GPU 显存不够时,淘汰"最近最少使用"的 KV 节点。作者观察到这在 agentic workflow 中是反向信号:一个刚执行完、很快要再次执行 的 agent (例如 PEER 里 Executor → Expresser 的下一跳),LRU 恰恰会认为它"不新鲜"而优先驱逐,下一步立刻发生 cache miss。

KVFlow 的思路是把 workflow 拓扑信息 下推到 serving 后端。它引入 Agent Step Graph 抽象:每个节点是一次 agent 调用,边表示依赖;每个节点有一个 step aggregation function (max(...)+1 表示 join,min(...)+1 表示 conditional branch),从而对任意 DAG / 环 / 条件分支都能计算出每个 agent 的 steps-to-execution (STE) —— 最早可能被执行的步数距离。驱逐时,radix tree 上每个 KV 节点继承其"所属 agent"的 STE,STE 越小越靠近被重用,优先级越高,反之最先驱逐。因为多个 agent 可共享前缀(树形结构),共享节点取所有子 agent STE 的 最小值。同时,所有 agent 的 dynamic 后缀无条件取最高驱逐优先级。

在此基础上作者还给了两个配套机制:(1) proactive prefetching — 根据 Step Graph 预测下一步将被激活的 agent,在当前 agent 还在 GPU 上做 forward/decode 时,用后台线程把它的 KV 从 CPU 通过 PCIe 预取到 GPU,占用的是另一个方向的全双工带宽;(2) status-aware scheduling — 每个 cache 节点有 {in-GPU, in-CPU, loading, offloading} 四态,调度器跳过"仍在 loading"的请求去执行 ready 的请求,从而 GPU 不空转。实现基于 SGLang v0.4.4,对 radix tree 的驱逐函数和调度器做了扩展;前端通过 sgl.function 截获 HTTP 请求,把 workflow metadata 注入后端。评测在 A10G (Llama-3.1-8B, PCIe Gen1 2 GB/s) 和 H100 (Qwen2.5-32B, PCIe Gen5 64 GB/s) 上:单工作流 8192 fixed / 32 dynamic / 32 output 时相对 SGLang+HiCache 1.83×、相对纯 GPU SGLang 2.91×;64 并发 × 1024 fixed prompt 时相对 HiCache 2.19×。

Key Findings #

Phase 2: Logic Flow (约束推导型) #

时代定位 #

2024–2025 agentic workflow (MetaGPT / AutoGen / AFlow / LangGraph) 已成为 LLM 应用层的主流范式,但 serving 基础设施仍是"单请求 / stateless 模型"假设。Prefix caching 的 low-hanging fruit 已经被 SGLang (RadixAttention)、vLLM (automatic prefix caching) 吃掉;下一波优化要开始利用更高层的语义信息(workflow 拓扑、agent 依赖)来做 KV 生命周期管理。KVFlow 代表 "serving 层开始感知 application-layer graph" 的新方向,和 Parrot/Autellix 的调度级 workflow 感知是同期工作,但 KVFlow 聚焦在 prefix cache 这一被前人忽略的维度。

背景 #

现有路径:

约束推导 #

为何不可直接把所有 agent prompt 常驻 GPU?

当 4 个 agent × 各 8192 token × Llama-3.1-8B (32 层, 8 KV heads, 128 dim, FP16) ≈ 4 × 8192 × 32 × 8 × 128 × 2 × 2 B ≈ 4.3 GB 只算 prefix;实际 workflow 有 10+ agents + dynamic 后缀 + batch,24 GB A10G 直接爆。

为何不可 "刚用完就 evict"(MRU 反着来)?

Cyclic workflow 里下一步就要再用;MRU 会直接干掉热数据。

为何不可用 LFU?

首次执行所有 agent 频次相同,LFU 退化为 FIFO;且 workflow 换 phase 时频次已经过时。

为何不可用 "access-time-weighted LRU" (例如 priority = age × freq)?

仍然看的是"过去",对"未来"无预测能力;agent 再次激活的时刻由 workflow 拓扑决定,而不是由历史访问频次决定。

为何必须做到 KV node 粒度而不是 agent 粒度?

多个 agent 共享前缀时(例如 PEER 的 4 个 agent 都以同一条 system preamble 开头),在 agent 粒度上会产生冲突:"Planner 想驱逐前缀"但"Reviewer 想保留"。Radix tree 天然把共享前缀合并成同一 node,必须在 node 层做优先级聚合(作者选择了 min 规则)。

替代方案能预测未来?支持 branch/cycle?共享前缀一致性?实现复杂度
LRUN/AN/A(冲突)
LFUN/AN/A
MRU❌(反向误判)
Agent 级 STE❌(冲突)
KV-node 级 STE + min 聚合中高

破局 (Insight) #

"过去的访问模式在 agentic workflow 里是随机的,但未来的访问顺序是 application 自己给出的 DAG"。 与其让系统从时间序列里反推谁会被用到,不如让 application 直接把 workflow graph 递给后端。这就像公交调度——如果司机知道下一站是哪个站,就能提前开门;LRU 相当于让司机看后视镜猜下一站在哪。

核心技术壁垒 #

整个方案能 work 的关键不是 "STE 这个概念"(这是直觉的),而是 "KV-node 级 min 聚合 + 状态机 (in-GPU/CPU/loading/offloading) 与 radix tree 驱逐/调度器的原子集成"。具体地:

  1. 每次 agent 被调度时,后端必须在 同一个 radix tree 事务里 完成 "更新 STE → 重新计算 node 优先级 → 触发 proactive prefetch → 设置节点 loading 状态 → 从可驱逐列表中排除 offloading 节点",任何竞态都会导致正在 prefetch 的节点被误驱逐。
  2. Status-aware 调度器必须能在 "node 仍在 loading" 时 跳过 该请求去服务别的 ready 请求,而不是 block 整个 batch——这要求 scheduler 层对 radix tree 节点状态有观测能力。
  3. 复现这两个机制需要深入理解 SGLang 的 radix tree + scheduler 内部实现;这是 3–4 周 dev effort 而非 "加一个 priority key"。

    质疑假设 #

    • 假设 1:workflow graph 在运行时是稳定可观测的。对 MetaGPT 那种"静态角色 pipeline"成立;但 ReAct/Reflexion/autonomous agent 这种运行时动态生成下一步 agent 的场景,Agent Step Graph 无法在请求时刻给出完整拓扑,STE 退化为 heuristic。笔者认为这是本文最大的隐含假设,论文未做实验验证 ReAct 场景。
    • 假设 2:fixed prompt 和 dynamic suffix 可以被清晰划分。作者给了两种方案(用户显式标记 / 启发式"一致命中的前缀即 fixed"),但启发式在 agent prompt 自己被 workflow 调整(e.g. self-improving workflow)时会漂移。
    • 假设 3:CPU 侧存得下所有 evicted KV。在真正的高并发场景(几百个并发 workflow × 几十个 agent × 长 prompt),CPU RAM 也会被打爆,KVFlow 没给 CPU 层的二级驱逐策略。

    设计绑定批判 #

    KVFlow 强制绑定了:

    1. Radix tree 结构(否则共享前缀 / min 聚合都做不出来)——换一个非 radix 的 cache (例如 vLLM 原生的 paged block),这套 STE 优先级需要重新设计。
    2. SGLang 的 frontend API (sgl.function)——必须能在 frontend 识别 agent 边界并注入 HTTP metadata;换到其他框架需要手动适配。
    3. 同步 workflow driver——工作流的 executor 在运行时向后端周期性同步 STE 信息;异步 / event-driven agent framework 需要另外设计同步时机。
    4. 有 CPU 二级缓存——当 CPU 也没有存 (first-miss) 时退化为重算,KVFlow 节省不了。
    5. 生态影响追踪 #

      • 截至 2025-07 论文发布,KVFlow 的代码未在 SGLang 主线合入;但思想"workflow-aware eviction"已经被 Autellix (arXiv 2502.13965)Parrot (OSDI'24) 等调度器工作作为 reference。
      • vLLM v1 的 prefix caching 设计中,可插拔 eviction policy 的讨论 RFC 近期出现,KVFlow 是一个 natural plugin 候选。
      • 与同组前作 Cognify (2502.08056)InferCept (2402.01869) 属于 UCSD "efficient multi-agent serving" 系列;KVFlow 是其中 KV 层的贡献,InferCept 是 tool-call 层,Cognify 是 frontend autotuning 层,三者互补。

      Key Figures #

      Figure 1: LRU policy fails in cyclic agentic workflows #

      Figure 1: LRU failure motivation

      What it shows: 一个 4-agent 循环工作流(Planner → Executor → Expresser → Reviewer → Planner …)的时间轴。在 timestamp 13 Executor 执行更新自己的 KV 时,LRU 决定驱逐 Expresser 的 cache;timestamp 14 Expresser 立刻要执行,发生 cache miss 并付出完整 prefill 代价。

      Why it matters: 这是全文 motivation 的"反直觉信号"证据——在 agentic workflow 中,access recency 与 future reuse 负相关,不是正相关。

      Detailed description: 图分成两行时间线:上行是 agent 执行序列(Planner @ t=10, Executor @ t=13, Expresser @ t=14…),下行是 KV cache 状态(Expresser KV 在 t=13 被画叉表示驱逐,t=14 时 prefill 延迟被高亮为红色表示 cache miss 代价)。箭头从 Executor 指向被驱逐的 Expresser 说明"LRU 做决策的依据——Expresser 最久没被用"。

      Figure 3(a): Agent Step Graph with two topology examples #

      Figure 3a: Agent Step Graph

      What it shows: 两种不同的 workflow 拓扑以及每个 agent 的 steps-to-execution。上图 (join) 里 Expresser 需要等 Executor1 和 Executor2 都完成,所以 $\text{STE}(\text{Expresser}) = \max(E_1, E_2) + 1$;下图 (branch) 里任一 Executor 完成即可,所以 $\text{STE}(\text{Expresser}) = \min(E_1, E_2) + 1$。

      Why it matters: 说明 Agent Step Graph 比 CFG / DAG 更通用的原因——把"依赖类型"抽象成 per-node 的 aggregation function,一次性支持 join、branch、synchronization barrier。

      Detailed description: 两张并排的小 DAG,节点标注 agent_name (STE),边从 predecessor 指向 successor。最右上方有一个图例说明 aggregation function 的语义:max+1 = 并行依赖需全部完成,min+1 = 择一路径即可。

      Figure 3(b): KV node-level eviction priority assignment #

      Figure 3b: Cache tree priorities

      What it shows: radix tree 里每个 node 的驱逐优先级。Agent 的 STE 先赋给其 fixed prompt 的最后一个 token 对应的 node,然后向树根方向传播;当一个 node 被多 agent 共享时取 min (最保守,最难驱逐)。动态后缀统一赋最高驱逐优先级。

      Why it matters: 把 "agent 级的未来信号" 下沉到 "KV node 级",解决多 agent 共享前缀的冲突——共享 prefix 不会被某一个 agent 的驱逐需求误伤。

      Detailed description: 一棵 radix tree,根节点到多个 agent 的 fixed-prompt 末端节点构成多条路径。每个 node 旁边标注了其继承的 STE 数字。共享分叉 node 被高亮并标注 min(STE_i);每个 agent 下挂的 dynamic-suffix node 被打上 "always-evict-first" 标签。

      Figure 4: Overlapped KV prefetching timeline #

      Figure 4: Overlapped prefetching timeline

      What it shows: 三条时间线对比:① reactive loading (baseline, HiCache):当 Executor1 被 schedule 时才开始 load KV,GPU 干等;② proactive prefetching only:在 Planner 执行期间预取 Executor1,但如果 Planner 执行短于 load 时间,Executor1 开始时仍要等;③ KVFlow (proactive + status-aware):Executor1 还在 loading 时调度器直接跳过它去跑 Executor2 或别的 ready 请求,GPU 全程不空转。

      Why it matters: 这是 "GPU 利用率从 ~70% 拉到 >95%" 的根本原因——PCIe load 和 GPU compute 不仅要 overlap,还要有"bypass 未 ready 请求"的 scheduler 逻辑。

      Detailed description: 三条水平 swim lane,每条分成 GPU-compute、PCIe-load、Scheduler-decision 三个 track。红色区块 = GPU 空转;绿色 = compute;蓝色 = PCIe transfer;黄色箭头 = scheduler 把请求推到 queue 尾部。KVFlow 条完全没有红色区块。

      Key Tables #

      Table A: Single-workflow speedup (10-agent sequential, reconstructed from Fig 5) #

      Setting (Fixed/Dynamic/Output)Platformvs SGLang (GPU-only)vs SGLang+HiCache
      4096 / 32 / 32A10G / Llama-3.1-8B~1.9×~1.2×
      8192 / 32 / 32A10G / Llama-3.1-8B2.91×1.83×
      4096 / 32 / 32H100 / Qwen2.5-32B~1.5×~1.3×
      8192 / 32 / 32H100 / Qwen2.5-32B~2.0×~1.5× (HiCache 在 H100 大场景下反而退化)
      8192 / 32 / 512 (长 decode)双平台~1.2×~1.05× (decode 占比高时收益降)

      Takeaway: 加速倍数 随 fixed prompt 长度单调上升(cache miss 代价占比越大)、随 output 长度单调下降(decode 占比越大 serving 瓶颈越不在 prefix)。

      Table B: High-concurrency PEER-style multi-workflow speedup (reconstructed from Fig 8) #

      Fixed tokens / concurrencyvs SGLangvs SGLang+HiCache
      512 / 321.15×1.10×
      1024 / 321.25×1.20×
      1024 / 641.25×2.19× (HiCache 只有 0.57× SGLang)
      PEER real-world sim1.12×1.08×

      Takeaway: HiCache 在 "1024 fixed × 64 并发" 下 反向劣化到 SGLang 的 0.57×——因为 reactive load 和 SGLang 原本的 layer-by-layer pipeline 打架,frequent cache miss 触发的 load-back 破坏了调度。KVFlow 通过 proactive + bypass 规避了这个陷阱。

      Limitations #

      • 动态 agent workflow 未验证:ReAct / Reflexion / autonomous agent 的 runtime-generated next step 场景下,Agent Step Graph 无法在 request 时刻给出完整拓扑。
      • CPU 二级缓存未做容量管理:CPU 内存也会被打爆,论文未给 CPU 层驱逐策略。
      • 未测 MoE / 长上下文 (>32k) 场景:KV cache 尺寸和 PCIe 拥塞在这两个场景下显著加剧,效果未知。
      • 评测仅 1 GPU:没有多 GPU / 跨节点 prefix cache 迁移的讨论;分布式 workflow serving 尚属开放问题。
      • Fragment 未解决:作者承认 SGLang 的 KV fragmented layout 导致 PCIe 带宽无法打满;KVFlow 只是更好地 overlap 了那个"不满的带宽",没解决根因。
      • Frontend 入侵性:必须在 sgl.function 层注入 workflow 元数据;非 SGLang 框架要手工适配。

      Infrastructure Impact #

      • Algorithm: 反向启示——agentic workflow 的调度/训练算法应暴露更多结构信息给 serving 层 (AFlow 这类 workflow 优化器可以和 KVFlow 共同设计"cache-friendly topology")。
      • Kernel: N/A — 纯 cache / scheduler 层,不依赖新 kernel,复用 SGLang 原生 attention。
      • Framework: 直接给 vLLM / TRT-LLM 提供了 "在 prefix cache 里接受 workflow metadata" 的设计模板;可作为 eviction policy plugin 合并到 vLLM v1 的 pluggable prefix-cache 架构。
      • LLM: 与模型架构无关,GQA/MHA/MLA 均可,但长 prompt 受益最大(KV 体积大 → miss 代价大)。
      • Agent: 对 static DAG 类 agent framework (MetaGPT / AutoGen graph / LangGraph) 是即插即用;对 dynamic agent (ReAct) 需要改造成"增量 graph 提示"。
      • Cluster: 目前是单节点设计;分布式 prefix cache 迁移和跨节点 workflow-aware eviction 是 follow-up 方向。
      • Code: 实现为 SGLang v0.4.4 的 patch;修改点集中在 radix tree eviction、request scheduler、frontend HTTP metadata 三处。

      Deep Analysis (framework) #

      1. System Scope #

      • Primary goal: online serving of multi-agent LLM workflows (low-latency, interactive)
      • Scale: 单节点单 GPU(A10G 24GB 或 H100 80GB),同时支持 "single workflow" 和 "高并发多 workflow" 两种模式
      • Online vs offline: 纯 online(latency-sensitive,batch size 可小到 1)
      • Workload target: LLM-based agentic workflow,每个 agent 有很大 fixed prompt(角色 + few-shot ≈ 几百到几千 token)+ 较小 dynamic suffix;workflow 以 graph 结构(DAG / cycle / conditional branch)执行

      2. Architecture & Data Flow #

      2a. End-to-End Data Flow #

      
      [User task]
        │
        ▼
      [Frontend: sgl.function per agent]  ──── 注入 workflow metadata (agent_id, STE map) 到 HTTP ───▶
        │
        ▼
      [Backend: Request Router]
        │
        ▼
      [Radix Tree Prefix Matcher]  ── 找出命中的 KV node 路径
        │
        ├── hit (in GPU)  ────────────────────────────▶ [Prefill new tokens only]
        ├── hit (in CPU)  ── trigger async load ─────▶ [Wait/skip via status-aware]
        └── miss          ────────────────────────────▶ [Full prefill recompute]
        │
        ▼
      [Scheduler: Status-Aware]  ── skip "loading" nodes; prioritize ready
        │
        ▼
      [GPU forward: prefill + decode]
        │
        ▼
      [Sampler → CPU output]  (GPU→CPU direction)
        │
        ▼
      [Eviction policy: STE-priority]  ── 后台:按 STE 驱逐; 触发 proactive prefetch 下一批
        │
        ▼
      [Return tokens to frontend]
      
      StageInput → OutputLocationLatencyData format
      sgl.function 截获user call → HTTP + metadataCPU (frontend)<1 msJSON (STE map, agent_id)
      Radix matchtokens → node pathGPU-resident tree + CPUμstree pointers
      Prefill (fresh)tokens → KVGPU HBM~O(n²) for n tokens[layers, kv_heads, n, dim]
      KV load (CPU→GPU)CPU KV → GPU KVPCIen × layers × 2 × dim × 2B / BWper-layer block
      Proactive prefetch同上PCIe (与 compute 同时)overlappedper-layer block
      DecodeKV → logitsGPU HBM~ms/token[vocab_size]
      Eviction & status updateradix tree + status varsCPU + GPUμspriority queue

      2b. Data Movement Hotspots #

      1. CPU↔GPU KV transfer (PCIe) — 最大带宽消耗者
      2. 量级:Llama-3.1-8B @ 8192 tokens = 32 × 8 × 128 × 2 × 2 × 8192 ≈ 1 GB 每 agent
      3. 频率:每个"被驱逐出 GPU 的 agent"一次;proactive prefetch 下频率等于 workflow 步数
      4. 重叠情况:KVFlow 下与 GPU compute 完全双向重叠(PCIe full-duplex 利用)
        1. GPU→CPU sampled token / activation — 小量但每步都有
        2. 量级:单 token / step;可与 CPU→GPU prefetch 并行(不同方向)
          1. Intra-GPU radix tree traversal — 控制平面
          2. 量级:几十 KB metadata,μs 级,不是瓶颈
          3. 3. Design Space & Constraint Analysis (extends Phase 2) #

            见上文 Phase 2 约束推导;framework 视角的补充:

            3a. Alternative Approaches

            • LRU / LFU / MRU / TTL / FIFO — 全部基于"历史访问",无预测能力
            • Oracle:直接 pin 所有 agent prompt 到 GPU — 显存不够
            • Segmented cache (per agent reserved slots) — 不支持共享前缀
            • Cost-model eviction (InferCept) — 需要离线训练 cost model,对 unknown workflow 不 generalize

            3b. 可行性矩阵

            方案预测未来支持 branch/cycle共享前缀一致无需离线训练工程复杂度
            LRU
            LFU
            MRU✗ (反向)
            InferCept cost model
            Agent 级 STE
            KVFlow (KV-node 级 STE + min)中高

            3c. Assumption Audit

            • workflow graph 静态可见 — 对 static agent framework 成立,对 ReAct/Reflexion 不成立
            • fixed/dynamic prompt 可分 — 论文给了 heuristic 兜底,但会漂移
            • PCIe full-duplex 真能用满 — SGLang 的 KV fragmented layout 会限制实际带宽利用(作者明确承认)
            • CPU 总能装下所有 evicted KV — 高并发下会被打爆

            3d. Core Technical Barrier

            See Phase 2: "KV-node 级 min 聚合 + 4 态 status 机(in-GPU / in-CPU / loading / offloading)与 radix tree eviction 和 scheduler 的原子集成"。这部分没法通过读论文 3 页就 reproduce;需要深入 SGLang 内部,估计 3–4 周 dev effort。

            3e. Design Binding Critique

            Radix-tree cache (排除 vLLM paged block)、SGLang 前端、静态可观测 workflow、必须有 CPU 二级缓存——四个强耦合。

            4. Key Innovations #

            InnovationMechanismBenefitCost/Tradeoff
            Agent Step Graph abstraction每节点带 max+1 / min+1 aggregation function统一 DAG/cycle/branch需要 frontend 暴露 workflow 元数据
            STE-based eviction at KV-node level每个 radix tree node 继承所属 agent 的 STE;共享 node 取 min精准保留"即将被用"的前缀;共享前缀无冲突每次 step 切换需刷新一遍 priority
            Proactive KV prefetching后台线程根据 Step Graph 预测下一步 agent,CPU→GPU 预取完全重叠 PCIe 延迟与 GPU compute分支时可能过度预取(有并发限制 cap)
            Status-aware scheduler4 态 {in-GPU, in-CPU, loading, offloading};跳过 loading 请求GPU 零空转;eviction 与 loading 无竞态调度器复杂度上升;长 load 可能饥饿短请求

            5. Scheduling & Resource Management #

            • Batch 形成:继承 SGLang continuous batching;在每次 scheduler tick 上过滤掉 KV 仍在 loading 的请求
            • 内存管理:继承 RadixAttention 树结构;扩展 eviction priority queue(按 STE 排序)+ 4 态 status
            • GPU 利用:通过"计算-传输重叠 + bypass"实现几乎无 bubble
            • 多租户:每个 application 分配 client_id,避免 agent_name="Planner" 命名冲突;workflow 间 STE 独立计算,共享 prefix node 取 最保守 min (跨 workflow 也是 min)
            • SLO 感知:未显式设计;隐含地,由于 status-aware skip,short-KV 请求天然被优先

            6. Target Scenarios & Workload Characterization #

            ScenarioWorkload PatternSLO / GoalWhy SGLang/HiCache fails
            Interactive dev (notebook, batch=1)单 workflow 串行 10 agents, 大 fixed promptE2E latency 最低LRU 误驱逐 + reactive load 串行
            High-concurrency multi-workflow serving32–64 并发 × PEER-style 4-agent workflow吞吐 + tail latencyHiCache 的 reactive load 在高并发下崩溃(0.57× SGLang)
            Agentic RAG/tool pipelineMixed branch/cycleTTFT < 500ms无感知下一跳,prefetch 无从谈起

            Primary bottleneck:在 fixed-prompt-heavy 场景下是 memory-bound (prefix KV 装不下 GPU HBM) + PCIe-bound (CPU 二级缓存的传输延迟),KVFlow 针对这两者。

            7. Performance Evaluation #

            7a. Metrics #

            MetricDefinitionUnitDirection
            E2E latencyworkflow 所有 agent 依次完成的时间ms
            Speedup vs SGLanglatency ratio×
            Speedup vs SGLang+HiCache对 CPU-backed baseline×

            注:论文未单独报告 TTFT / TPOT / P99 / goodput 等 serving 标准指标;只用 E2E latency 和 speedup,这是一个评测深度不足的地方。

            7b. Before-After Comparison #

            见 Key Tables A / B。核心数据:

            • 单 workflow 8192 fixed tokens:相对 SGLang 2.91×,相对 HiCache 1.83×
            • 64 并发 × 1024 fixed:相对 SGLang 1.25×,相对 HiCache 2.19×(HiCache 反劣化到 0.57× 基线)
            • 长 decode:速比退化到 ~1.1×

            7c. Bottleneck Shift #

            
            Baseline (SGLang GPU-only):   memory-bound (KV 装不下) → miss → recompute-bound (prefill)
            ↓
            +HiCache:                      recompute-bound → PCIe-bound (reactive load 串行)
            ↓
            +KVFlow eviction only:         PCIe-bound → 仍 PCIe-bound (但 miss 次数减少)
            ↓
            +KVFlow prefetch:              PCIe-bound → 当 compute > load 时 → 回到 compute-bound (理想)
            ↓
            +KVFlow status-aware scheduling: 当 compute < load 时 → 靠 bypass 填 GPU → 几乎无 bubble
            

            剩余瓶颈:作者自己承认的 KV fragmented layout 导致 PCIe 带宽无法打满;以及 decode-heavy 场景下的 auto-regressive decode(与 KVFlow 正交)。

            7d. Baselines & Fairness #

            • 公平性 OK:同模型、同硬件、同 workflow
            • 缺:没有 vLLM / TRT-LLM 对比;只对比了 SGLang 两种配置
            • 缺:没有 tail latency / P99 分布;只有平均 latency
            • 缺:没有 ablation 分离 "eviction only" vs "prefetch only" vs "full" 的贡献

            8. API & Usability #

            • API 兼容:OpenAI-compat 的 HTTP;frontend 是 sgl.function 装饰器
            • 模型格式:继承 SGLang,支持 HF Transformers
            • 部署:SGLang 同款 (bare-metal / Docker)
            • 可调参数:max_concurrent_prefetch、fixed-prompt boundary (显式 / heuristic 两选一) — 调参量小

            9. Infrastructure Impact #

            已在 Summary 最后的 Infrastructure Impact 表覆盖。

            10. Comparison Matrix #

            FeatureKVFlowSGLangSGLang+HiCachevLLMTRT-LLM
            Radix prefix cachePaged (non-radix)
            CPU 二级缓存✓ (v1)
            Workflow-aware eviction
            Proactive prefetch✗ (reactive only)
            Status-aware scheduling
            Multi-node prefix cacheDev

            11. Adoption, Maturity & Ecosystem Influence #

            • Open source:未提及公开代码(论文 2025-07 发布);基于 SGLang v0.4.4 的 patch
            • 成熟度:原型级;未在主线 SGLang 合入
            • 生产部署:未提
            • 采纳成本:对使用 SGLang 的 agentic application 是"前端加 sgl.function + 后端打 patch"—— 2–4 周 integration
            • 下游影响:与 Autellix、Parrot、Cognify、InferCept 形成 UCSD multi-agent serving 系列;有望作为 vLLM v1 可插拔 eviction policy 的候选

            Open Questions #

            1. ReAct / Reflexion 类动态 workflow 下如何在线更新 Agent Step Graph?是否需要"on-the-fly graph growth + priority invalidation"机制?
            2. CPU 也爆时的二级驱逐策略?要不要引入"三级 disk/NVMe cache"?
            3. 多 GPU / 跨节点的 prefix cache 迁移如何做?STE 是否可以跨节点传播?
            4. speculative decoding / KV sparsity 的组合效应?decode-heavy 场景下能否通过组合再拿 2×?
            5. Workflow topology 本身是否可优化 以对 KVFlow 友好?(和 AFlow 共同设计 cache-friendly workflow optimizer)
            6. 论文没报 TTFT/TPOT/P99,如果报了会不会揭示 long-load 请求的 starvation?