Docs: 更新文档
Smart Agent Memory Cache — 让多模态智能体的每一次推理都更快、更省
多模态智能体(VLM-based Agent)在”规划-执行-反思”的长生命周期推理中,面临两大核心矛盾:
矛盾一:跨轮次上下文回顾导致的重复计算 智能体反复回顾历史多模态上下文时,相同图像被重复编码(ViT)+ 重复 Prefill,造成极大的算力浪费。
矛盾二:视觉 Token 急剧膨胀 高分辨率图像产生成百上千的视觉 Token,挤占显存并带来注意力机制的二次方计算开销。
现有方案存在明显不足: | 方案 | 局限 | |——|——| | VLCache(纯缓存复用) | 跨轮次上下文变化引入累积误差,精度退化 | | SlimMoE-VLM(纯 Token 压缩) | 每轮仍需 ViT 编码,无法消除重复计算 | | vLLM/SGLang 前缀缓存 | 严格前缀匹配,智能体非前缀场景命中率低 |
我们的破局思路:复用 — 压缩 — 重算 三者联合优化
借鉴 VLCache 的位置无关 KV Cache 复用思想,但引入请求级全局哈希 + 图像级独立哈希双重寻址机制:
不同于传统方法(附加评分网络或注意力图 Top-K 裁剪),我们复用 VLM-MoE 内部的 Router Logits 作为低成本高鲁棒的重要性信号:
针对 Cache 复用与 Token 裁剪叠加引入的双重偏差,提出双轨重计算策略:
针对智能体多路径决策场景,维护分支上下文树并实现 Copy-on-Write 机制,避免分支推理时的显存爆炸。同时探索 GPU 显存、主存与外部存储之间的分层冷热数据迁移。
┌─────────────────────────────────────────────────────────────┐ │ 多模态智能体请求 │ └──────────────────┬──────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ ① 内容寻址层 │ │ ┌──────────────────────────────────────────────┐ │ │ │ 全局哈希 ← 图像像素值 │ │ │ │ 图像级哈希 ← 逐图像独立哈希 │ │ │ │ → 命中判定 → 未命中 → 正常 ViT + Prefill │ │ │ │ → 命中 → 跳过 ViT,复用缓存 │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────┬──────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ ② MoE 路由压缩层 │ │ ┌──────────────────────────────────────────────┐ │ │ │ Forward Hook → 采集 Router Logits │ │ │ │ 锚点选择 → 路由置信度 + 专家多样性 + 分布相似性│ │ │ │ Token 合并 → 加权聚合到锚点 │ │ │ │ 状态同步 → 更新 mask / position_ids / RoPE │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────┬──────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ ③ 动态重计算层 │ │ ┌──────────────────────────────────────────────┐ │ │ │ 层敏感度评估 → 离线探针测试 │ │ │ │ 预算分配 → 受限贪心(单调非递增约束) │ │ │ │ 双轨重算 → 头部截断 + 语义关键 Token │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────┬──────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────────┐ │ ④ 智能体上下文管理层 │ │ ┌──────────────────────────────────────────────┐ │ │ │ 分支上下文树 → 多路径决策追踪 │ │ │ │ Copy-on-Write → 分支内存共享 │ │ │ │ 分层存储 → GPU 显存 / 主存 / 外存冷热迁移 │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘
# 1. 克隆仓库 git clone https://github.com/SuperAgentMaker/SAMcache.git cd SAMcache # 2. 安装依赖 pip install -r requirements.txt # 3. 安装 samcache 包 pip install -e . # 4. 准备 VLCache(SGLang 后端) # 参考 third_party/VLCache 的 README 安装 SGLang
from samcache import SAMcacheEngine # 初始化引擎 engine = SAMcacheEngine( model_path="OpenGVLab/InternVL3-8B", cache_enabled=True, compression_enabled=True, recompute_ratio=0.05, ) # 多轮对话(相同图片复用缓存) response1 = engine.chat( images=["diagram.png"], prompt="请解释这张系统架构图", ) response2 = engine.chat( images=["diagram.png"], prompt="图中的数据流向是怎样的?", # 复用 diagram.png 的 ViT 和 KV Cache )
# 运行标准 benchmark bash scripts/run_benchmark.sh --model InternVL3-8B --benchmark mmmu # 使用 VLMEvalKit 评估 bash scripts/evaluate.sh --model InternVL3-8B --benchmark MMMU
详细实验结果见 docs/design.md
SAMcache/ ├── samcache/ # 核心 Python 包 │ ├── core/ # 核心引擎与配置 │ ├── cache/ # 多模态缓存管理器 │ ├── compression/ # MoE 路由压缩器 │ ├── recompute/ # 动态重计算引擎 │ ├── agent/ # 智能体上下文管理器 │ └── models/ # 模型适配 ├── docs/ # 文档 ├── scripts/ # 实用脚本 ├── benchmarks/ # 基准测试 ├── examples/ # 使用示例 ├── tests/ # 单元测试 ├── patches/ # 对 VLCache/SGLang 的补丁 └── third_party/ # 第三方依赖链接 ├── VLCache → # 指向 VLCache (SGLang fork) └── VLMEvalKit → # 指向 VLMEvalKit
我们的独特贡献:
武汉大学 · SuperAgentMaker
本项目基于 Apache License 2.0 开源。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
SAMcache: 面向多模态智能体推理的 Token 压缩与 Cache 复用联合优化系统
第三届全国研究生操作系统开源大赛 | 武汉大学 · SuperAgentMaker
Smart Agent Memory Cache — 让多模态智能体的每一次推理都更快、更省
📋 目录
🎯 背景与动机
多模态智能体(VLM-based Agent)在”规划-执行-反思”的长生命周期推理中,面临两大核心矛盾:
矛盾一:跨轮次上下文回顾导致的重复计算 智能体反复回顾历史多模态上下文时,相同图像被重复编码(ViT)+ 重复 Prefill,造成极大的算力浪费。
矛盾二:视觉 Token 急剧膨胀 高分辨率图像产生成百上千的视觉 Token,挤占显存并带来注意力机制的二次方计算开销。
现有方案存在明显不足: | 方案 | 局限 | |——|——| | VLCache(纯缓存复用) | 跨轮次上下文变化引入累积误差,精度退化 | | SlimMoE-VLM(纯 Token 压缩) | 每轮仍需 ViT 编码,无法消除重复计算 | | vLLM/SGLang 前缀缓存 | 严格前缀匹配,智能体非前缀场景命中率低 |
我们的破局思路:复用 — 压缩 — 重算 三者联合优化
💡 核心创新
创新 1:基于内容哈希的跨轮次多模态缓存复用
借鉴 VLCache 的位置无关 KV Cache 复用思想,但引入请求级全局哈希 + 图像级独立哈希双重寻址机制:
创新 2:MoE 路由驱动的视觉 Token 多阶段压缩
不同于传统方法(附加评分网络或注意力图 Top-K 裁剪),我们复用 VLM-MoE 内部的 Router Logits 作为低成本高鲁棒的重要性信号:
创新 3:低代价高保真的两步重计算与误差修正(核心融合创新)
针对 Cache 复用与 Token 裁剪叠加引入的双重偏差,提出双轨重计算策略:
创新 4:智能体分支推理的内存共享
针对智能体多路径决策场景,维护分支上下文树并实现 Copy-on-Write 机制,避免分支推理时的显存爆炸。同时探索 GPU 显存、主存与外部存储之间的分层冷热数据迁移。
🏗 系统架构
🚀 快速开始
环境要求
安装
快速示例
运行基准测试
📊 性能评估
实验环境
主要结果
📁 项目结构
🔗 与现有工作的关系
我们的独特贡献:
👥 团队成员
武汉大学 · SuperAgentMaker
📄 许可证
本项目基于 Apache License 2.0 开源。