跳到主要内容
← 返回研究笔记
论文笔记 2024

05. Pensieve — 多模态 Agent 长记忆系统设计

多模态 Agent 端到端长记忆系统的工程设计与实证

05. Pensieve — 多轮对话 KV 复用与跨会话调度

元数据

  • 论文标题:Pensieve: Retrospect-then-Compare for Multi-turn LLM Serving (具体题目以最终发表为准)
  • 出处:OSDI 2024(部分版本在 EuroSys’25)
  • 关键词:multi-turn dialogue、KV reuse、conversation-aware scheduling

⚠️ 本笔记为基于公开摘要 / 工程二次资料的初步整理——精确数字以原文为准。

一句话精髓

多轮对话场景下,把”会话历史”作为一等公民放进调度器,KV 复用从被动 cache 升级到主动调度。

解决的问题

聊天 / Agent 类长会话的特点:

  1. 同一 session 的轮次之间 KV 高度相关
  2. 不同 session 的复用率极低,但调度器经常把同一 session 切到不同 GPU,KV 全丢
  3. 已有 prefix cache 命中后还是要把 KV 拷回当前实例,搬运不是免费的

Pensieve 的视角:调度器应该感知会话亲和性,让同一 session 尽量回到原 GPU,而不是事后再补救。

关键 idea

设计内容
会话亲和路由维护 session→GPU 映射,新轮次优先回原 GPU
KV 漂移容忍原 GPU 满了允许”温迁移”——把 KV 同步到新 GPU 再开 decode
跨轮 prefix 重排会话历史里高复用片段(system prompt、固定文档)单独打 tag
调度与放置耦合调度决策直接依赖 KV 当前所在层级,而不是只看 GPU 利用率

关键架构图

        新轮次请求(session_id)


        ┌──────────────┐
        │ Affinity LB  │── 查 session→{GPU, KV 在哪一级}
        └──────┬───────┘

       ┌───────┼────────┬─────────┐
       ▼       ▼        ▼         ▼
     GPU#1   GPU#2    迁移      回退到 prefill
     hit     近旁     (DRAM     (cache miss)
             pool     →HBM)

关键数据(公开报告)

  • 多轮长对话场景下,KV 命中率显著优于 hash-based prefix cache
  • 端到端首 token 延迟改善取决于会话长度——越长,收益越大
  • 集群尾延迟 P99 改善明显(因为减少了”切实例后重 prefill”的尖刺)

局限

  • 强亲和性带来负载不均,极端情况下少数 hot session 把某个 GPU 拖死
  • 跨实例迁移本身有开销,小会话场景反而不划算
  • 调度器复杂度上升,故障切换时容易把 session 状态搞丢

对本项目的启示

🌟 存储层与调度层的耦合是项目第一模块的关键问题之一——Pensieve 给了一个具体范例:

  1. 多类型数据的亲和路由:不只是 KV,用户的向量记忆库 / RAG 文档块也要做亲和(同一用户的所有数据放近一点)
  2. 会话与层级联动:活跃会话进 HBM,睡眠会话退 DRAM,长期不活跃退 SSD——把 Pensieve 的 session→GPU 扩展到 session→{GPU, mem level}
  3. 温迁移的成本模型:迁移本身不是免费,需要建模”迁移收益 vs 重 prefill 代价”,这正是项目”token 单位成本”问题的子问题
  4. 结合容错:亲和路由失败时(GPU 故障),容错协议怎么和会话状态对接?——这跨到第三模块

横向对比

系统KV 复用粒度调度感知多类型
vLLM prefix cachehash-based 块
AttentionStoresession 级部分(预取)
Pensievesession + 路由✅ 强亲和
本项目目标session + 多类型 + 三级✅ + 成本驱动

待精读

  • 论文具体的亲和性策略(纯 sticky?加权?如何处理热点?)
  • 故障切换协议
  • 与 LMCache 跨实例池的协同 / 冲突