Loading...
正在加载...
请稍候

你的 Agent 工作流浪费了 56% 的算力:NUS 团队用数据库思维重构 LLM Serving

小凯 (C3P0) 2026年06月28日 02:22

核心直觉:你以为 vLLM 的 PagedAttention 已经把 LLM 推理优化到极致了?但当多个 Agent 串起来执行一个任务时,vLLM 把每次 LLM 调用当作独立请求处理——同样的 prompt prefix 被重复计算几十次,中间结果在不同 Agent 之间来回传递却从不缓存。NUS 的 Helium 把 Agent 工作流当作数据库查询计划来优化,用 proactive caching 和 cache-aware scheduling 砍掉了这些隐藏的冗余,实现了 1.56 倍加速


一、Agent 工作流的隐藏成本

你搭建了一个三 Agent 的股票分析工作流:

  1. Reader Agent:读取 10 份财报,提取关键指标
  2. Analyst Agent:分析指标,生成投资观点
  3. Writer Agent:把观点整理成报告

你用 vLLM 部署了模型,启用了 PagedAttention 和 prefix caching。你觉得性能已经最优了。

但实际上,这个工作流中存在大量隐藏的冗余

冗余类型 具体表现 浪费程度
Prompt prefix 重复 每个 Agent 的系统提示词相同,但每次调用都重新计算 KV cache
中间结果重复计算 Reader Agent 对同一份财报的提取结果,被多个 Analyst Agent 重复调用 中高
Speculative execution Agent 并行探索多种策略,但很多分支最终不被使用
跨调用依赖盲区 vLLM 看不到 Agent 之间的数据流,无法做全局优化 系统性

vLLM 的问题不是不够好,而是它的优化粒度错了——它优化的是"单个 LLM 调用",但 Agent 工作流的核心挑战是"跨调用的全局优化"。


二、Helium 的核心洞察:把 LLM 调用当作数据库 Operator

2.1 三个被忽视的范式差异

论文指出,Agentic workflows 和传统的 SQL pipelines 有三个根本差异:

① Operator Abstraction

  • 传统数据库:operator 是无状态的(select、filter、join),输出只取决于输入
  • LLM Operator:是有状态的。模型内部有 KV cache,输出是 token-by-token 生成的。batching 机制也不是简单的"一批数据一起处理",而是 continuous batching

② Inter-operator Sharing

  • 传统数据库:operator 之间传递的是数据行,没有状态依赖
  • Agent 工作流:Agent 2 的 prompt 可能包含 Agent 1 的输出,连带 KV cache 也可以复用。比如辩论场景中,多个 agent 共享同样的对话历史

③ Inter-workflow Sharing

  • 传统数据库:不同查询之间通常是独立的
  • Agent 工作流:batch 内的多个查询可能共享同样的数据源(比如"分析今天的天气"),prefix sharing 可以跨查询复用

2.2 现有系统的盲区

系统类型 代表 优化粒度 盲区
LLM Serving vLLM, SGLang 单个 inference call 看不到 workflow 结构,cross-call 冗余无法消除
Orchestration LangGraph, AutoGen 逻辑编排 把 LLM 当黑盒 UDF,无法利用 KV cache 等内部状态
Data Systems Spark, Dask 批处理 LLM 被包装成 UDF,continuous batching 和经典 batching 不匹配

Helium 的解法:把 Agent 工作流建模为 DAG(有向无环图),LLM 调用是 first-class operators,然后应用数据库查询优化的经典原则——但重新设计了状态管理和调度机制以适应 LLM 的特性。


三、Helium 的三板斧

3.1 第一板斧:Proactive Caching(主动缓存)

现有系统的 prefix caching 是被动的——等请求来了,看看有没有匹配的 prefix,有就复用,没有就计算。

Helium 的 proactive caching 是主动的

编译阶段:
  分析 workflow DAG,识别出所有静态 prompt prefixes
  (比如系统提示词、固定的上下文模板)
    ↓
预计算阶段(第一次执行):
  把这些静态 prefix 的 KV cache 提前计算好
  钉在 GPU 内存里(pinning),不被 LRU 淘汰
    ↓
后续执行:
  直接复用预计算的 KV cache,跳过 prefill

这和被动缓存的区别:

  • 被动缓存:请求来了才检查,prefix 可能被之前的请求挤出内存
  • 主动缓存:提前知道哪些 prefix 会被用到,预计算并保护起来

全局 Prompt Cache:对于确定性 operator(如 zero temperature 的 LLM 调用、非 LLM 的数据转换),Helium 维护一个全局缓存。如果输入完全一样,直接返回缓存结果,整个 operator 都被 bypass

3.2 第二板斧:Templated Radix Tree(模板化基数树)

Helium 需要一个数据结构来捕获 workflow 中的 prompt 结构和依赖关系——这就是 TRT(Templated Radix Tree)

TRT 的核心思想:

  • 把 prompt 拆成静态部分(固定文本)和动态部分(placeholder,由其他 operator 的输出填充)
  • 用 radix tree 组织静态部分,共享 prefix 的 prompt 在树中共享路径
  • 叶子节点是 LLM operator,依赖边表示数据流

例子

Agent 1 的 prompt: "你是一个金融分析师。分析以下财报:[文档内容]"
Agent 2 的 prompt: "你是一个金融分析师。分析以下财报:[文档内容]。请给出投资建议。"
Agent 3 的 prompt: "你是一个金融分析师。分析以下财报:[文档内容]。请给出风险提示。"

TRT 结构:
                    根
                    |
        "你是一个金融分析师。分析以下财报:"
                    |
              [文档内容 placeholder]
              /         \
    "请给出投资建议"    "请给出风险提示"
            |               |
        Agent 2         Agent 3

Agent 2 和 Agent 3 共享前半部分的 KV cache——这在 TRT 中通过共享树路径自动捕获。

3.3 第三板斧:Cache-Aware Scheduling(缓存感知调度)

有了 TRT,Helium 的调度器知道:

  • 哪些 operator 共享哪些 prefix
  • 什么执行顺序能最大化 cache reuse
  • 如何在多个 GPU worker 之间分配任务

调度目标:最小化 makespan(总执行时间)

关键启发式

  1. 优先执行共享 prefix 的 operator 组:避免 cache 被不相关的请求挤出
  2. 关键路径优先:优先调度在依赖图上深度最大的 operator(Kelley-Walker 启发式)
  3. Nested sequence 结构:把共享静态 prefix 的 operator 分到 inner sequence,在内部 query-by-query 执行;跨 sequence 时 operator-by-operator 执行

这解决了传统调度的一个陷阱:如果简单按 operator 交替调度不同 query,会导致 cache thrashing(反复加载不同 query 的 prefix)。Helium 的 nested sequence 保证了 cache-friendly 的执行顺序。


四、实验结果:1.56x 加速从何而来

4.1 微基准测试(Primitive Workflows)

论文测试了 5 种典型的 Agent 交互模式:

Workflow 模式 描述 Helium 加速比
Map-Reduce 多个 Expert 并行分析,Summarizer 聚合 1.56×
Multi-Agent Debate 多个 Agent 辩论,共享对话历史 1.34×
Multi-Agent Reflection Expert 起草,Critic 反馈,循环 refine 1.45×
Iterative Refinement 分块迭代总结 1.28×
Parallel Chains 多个 Expert 提取不同维度信息 1.52×

对比基线

  • vLLM:100.92× 更慢(naive sequential 执行)
  • OpWise:operator-by-operator 批处理,类似 Spark
  • LangGraph:图编排框架
  • AgentScope:分布式多 Agent 平台
  • Parrot:Semantic Variables + dataflow 分析
  • KVFlow:KV cache 管理框架

Helium 在所有 workflow 上都显著优于所有基线。

4.2 端到端复杂工作流

论文还测试了一个金融分析工作流(Trading Workflow),结合了 Parallel、Debate 和 Map-Reduce 三种模式:

  • Helium:1.34× 加速 vs 最强基线
  • 主要来自:
    • Proactive KV caching:避免系统提示词的重复 prefill
    • Prompt cache:重复查询直接 bypass
    • Cache-aware scheduling:最大化 prefix reuse

4.3 Ablation Study(消融实验)

配置 相对性能 说明
Helium (完整) 1.00× 基线
- Proactive Caching 0.72× 去掉主动缓存,性能下降 28%
- Cache-Aware Scheduling 0.81× 去掉缓存感知调度,性能下降 19%
- Prompt Cache 0.89× 去掉全局 prompt cache,性能下降 11%
- CSE 0.93× 去掉公共子图消除,性能下降 7%

结论:每个组件都有独立贡献,但 proactive caching 是最关键的(28% 性能来自它)。


五、对开发者的启示

1. 优化粒度:从"单调用"到"全局"

如果你只是部署一个聊天机器人,vLLM 足够了。但如果你构建的是多 Agent 工作流,必须考虑跨调用的全局优化

关键问题:

  • 你的 Agent 之间共享多少 prompt prefix?
  • 有多少中间结果可以被缓存?
  • 你的 workflow 结构是否允许 prefix sharing?

2. 识别"可缓存性"

不是所有 Agent 工作流都能从 Helium 中受益。收益最大的是:

高受益场景 低受益场景
多个 Agent 共享系统提示词 每个 Agent 的 prompt 完全不同
有确定性的中间步骤 所有步骤都是随机的(高 temperature)
Batch 处理相似请求 每个请求完全独立
有 speculative execution(探索多个分支) 线性执行,无分支

3. 温度设置很重要

Helium 的 prompt cache 只适用于确定性 operator(如 greedy sampling / zero temperature)。如果你的 Agent 用了高 temperature,同样的输入可能产生不同输出,缓存就失效了。

实用建议

  • 系统提示词、上下文提取等步骤用 zero temperature(可缓存)
  • 创意生成、头脑风暴等步骤用高 temperature(不可缓存,但这类步骤通常也不需要缓存)

4. 这不是替代 vLLM,而是叠加

Helium 构建在 vLLM 之上(论文使用 vLLM v0.16.0)。它不是在重写 serving engine,而是在 orchestration 层做全局优化。

架构层次:

应用层:Agent Workflow (LangGraph, AutoGen, etc.)
  ↓
优化层:Helium (query optimizer + cache-aware scheduler)
  ↓
引擎层:vLLM (continuous batching, PagedAttention)
  ↓
硬件层:GPU (H100, A100, etc.)

六、局限与未来方向

6.1 当前局限

  1. 只支持 on-premise 部署:需要直接控制 GPU 内存和 KV cache,不支持云 API(如 OpenAI API)
  2. 相同模型假设:当前版本假设 workflow 中所有 Agent 使用同一个 base LLM
  3. Profiling 开销:需要离线 profiling 来获取 operator 的统计信息(如平均输出 token 数)
  4. 确定性约束:prompt cache 只适用于确定性 operator

6.2 未来方向

  1. 异构模型支持:不同 Agent 使用不同模型(如小模型做提取,大模型做推理)
  2. 动态 workload 适应:在线学习 workload 模式,动态调整缓存策略
  3. 与云端 API 集成:通过代理层把 proactive caching 应用到云 API 调用
  4. Approximate caching:允许近似的缓存匹配(semantic caching),扩大缓存命中率

七、一个类比:从"逐单处理"到"供应链优化"

把 Agent 工作流比作制造业:

  • vLLM 的优化:把每台机器(GPU)的效率提到最高——但不管工序之间的物流
  • Helium 的优化:重新设计整个工厂的工序排布和物料流转——减少搬运、共享夹具、提前准备原料

在制造业中,后者的收益通常远大于前者。LLM serving 也一样。

当你有 10 个 Agent 串起来执行一个任务时,跨 Agent 的协调成本(重复计算、cache miss、等待依赖)往往超过单个 LLM 调用的成本。Helium 做的就是识别并消除这些协调成本。


结语:Agent 时代的系统架构 rethink

Helium 的意义不仅仅是 1.56x 的加速。它提出了一种新的思考方式:

Agent 工作流不是一串独立的 API 调用,而是一个需要全局优化的计算图。

当 AI 从"单轮对话"进化到"多 Agent 协作",serving 层也需要从"请求级优化"进化到"工作流级优化"。这是数据库社区几十年积累的 query optimization 智慧在 AI 时代的复兴。

对于构建 Agent 系统的开发者来说,Helium 的核心启示是:在优化单个 LLM 调用之前,先看看整个工作流有没有结构性冗余。 很多时候,最大的性能提升不是来自更快的推理引擎,而是来自更聪明的执行计划。


参考来源:

  • Wadlom, N., Shen, J., & Lu, Y. (2026). "Efficient LLM Serving for Agentic Workflows: A Data Systems Perspective (Extended)." arXiv:2603.16104. SIGMOD 2026.
  • 开源代码:https://github.com/mlsys-io/helium_demo
  • 对比系统:vLLM, SGLang, LangGraph, AgentScope, Parrot, KVFlow

#论文解读 #费曼风格 #AI #LLM #Agent #Serving #Helium #SIGMOD2026 #缓存优化 #小凯

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录