UCM 项目简介
阅读时间 : 约 10 分钟
前置要求 : 前置知识模块
UCM(Unified Cache Management,统一缓存管理)是一个面向 LLM 推理优化的 KV Cache 管理框架。本文介绍 UCM 的项目定位、核心特性和设计目标。
1. UCM 是什么#
1.1 一句话定义#
UCM 是一个 KV Cache 管理框架 ,通过持久化 KV Cache 并提供多种检索机制,替代冗余计算,实现 LLM 推理 3-10 倍的延迟降低。
1.2 项目定位#
graph TB
subgraph stack["LLM 推理技术栈"]
App["应用层 Chat、Agent、RAG"]
UCM["UCM KV Cache 管理"]
vLLM["推理引擎 vLLM v0.9.2"]
HW["硬件层 NVIDIA/Ascend GPU"]
end
App --> UCM
UCM --> vLLM
vLLM --> HW
subgraph ucm_role["UCM 的角色"]
R1["1. KV Cache 的智能调度"]
R2["2. 多级存储的统一管理"]
R3["3. 稀疏注意力的框架支持"]
end
UCM --> ucm_role
1.3 核心能力#
能力
说明
效果
前缀缓存
缓存并复用相同前缀的 KV
减少重复计算
多级存储
HBM → CPU → 外部存储
扩展 KV 容量
稀疏注意力
只加载重要的 KV Block
降低带宽需求
PD 分离
Prefill 和 Decode 分离
优化资源利用
2. 为什么需要 UCM#
2.1 LLM 推理的核心挑战#
mindmap
root["LLM 推理挑战"]
memory["内存挑战"]
m1["KV Cache 线性增长"]
m2["单卡显存有限"]
m3["并发数受限"]
compute["计算挑战"]
c1["相同前缀重复计算"]
c2["Decode 阶段低效"]
latency["延迟挑战"]
l1["首 token 延迟高"]
l2["长上下文响应慢"]
2.2 现有方案的局限#
方案
优点
局限
vLLM PagedAttention
减少内存碎片
仍受单卡显存限制
vLLM 自动前缀缓存
复用前缀 KV
仅限单实例、内存中
KV 压缩/量化
减少存储量
可能损失精度
模型并行
扩展容量
通信开销大
2.3 UCM 的解决思路#
graph TB
subgraph problems["问题"]
P1["KV Cache 占满显存"]
P2["相同前缀重复计算"]
P3["长序列访问慢"]
end
subgraph solutions["UCM 解决方案"]
S1["多级存储 突破单卡限制"]
S2["内容寻址 跨请求/实例复用"]
S3["稀疏注意力 只读重要 Block"]
end
P1 --> S1
P2 --> S2
P3 --> S3
subgraph result["效果"]
R1["3-10x 延迟降低"]
R2["更高并发支持"]
R3["长上下文支持"]
end
S1 --> R1
S2 --> R2
S3 --> R3
3. UCM 核心特性#
3.1 内容寻址的 KV Cache#
UCM 使用基于内容的哈希来标识 KV Block:
传统方式(位置寻址):
请求 ID + 位置 → KV Block
问题: 相同内容无法跨请求复用
UCM 方式(内容寻址):
Hash(Token IDs) → KV Block
优势: 相同内容自动复用,跨请求/实例共享
3.2 统一的稀疏注意力框架#
UCM 提供统一的接口支持多种稀疏注意力算法:
graph TB
subgraph sparse["稀疏注意力框架"]
Base["UcmSparseBase 统一接口"]
ESA["ESA Essential Sparse"]
GSA["GSA Gather-Scatter"]
Blend["Blend 非前缀复用"]
KVStar["KVStar 多步一致性"]
RERoPE["RERoPE 位置外推"]
end
Base --> ESA
Base --> GSA
Base --> Blend
Base --> KVStar
Base --> RERoPE
3.3 可插拔的存储后端#
graph TB
subgraph store["存储后端"]
Factory["UcmConnectorFactory 统一工厂"]
Posix["POSIX Store 本地文件"]
Cache["Cache Store 内存缓存"]
NFS["NFS Store 网络文件"]
DS3FS["DS3FS Store S3 存储"]
Mooncake["Mooncake Store 云存储"]
end
Factory --> Posix
Factory --> Cache
Factory --> NFS
Factory --> DS3FS
Factory --> Mooncake
subgraph pipeline["Pipeline 组合"]
P1["Cache | Posix"]
P2["Cache | NFS"]
P3["Cache | DS3FS"]
end
Cache --> P1
Posix --> P1
3.4 非侵入式 vLLM 集成#
UCM 通过 Monkey Patching 实现与 vLLM 的集成,无需修改 vLLM 源码:
# 用户使用方式
from vllm import LLM
from vllm.config import KVTransferConfig
# 配置 UCM 连接器
ktc = KVTransferConfig (
kv_connector = "UCMConnector" ,
kv_connector_module_path = "ucm.integration.vllm.ucm_connector" ,
kv_role = "kv_both" ,
kv_connector_extra_config = {
"UCM_CONFIG_FILE" : "./ucm_config.yaml"
}
)
# 正常使用 vLLM
llm = LLM ( model = "llama-7b" , kv_transfer_config = ktc )
4. 适用场景#
4.1 最佳适用场景#
场景
优化效果
原因
多轮对话
显著
历史上下文 KV 可复用
RAG 检索增强
显著
System Prompt 可缓存
长文档问答
显著
长上下文受益于稀疏注意力
批量相似请求
显著
共同前缀可共享
4.2 典型应用案例#
graph TB
subgraph case1["案例 1 - 多轮对话"]
C1A["第 1 轮: 计算 KV, 缓存"]
C1B["第 2 轮: 复用 KV, 追加"]
C1C["第 3 轮: 复用 KV, 追加"]
C1A --> C1B --> C1C
C1Result["效果: TTFT 降低 60-80%"]
end
subgraph case2["案例 2 - RAG"]
C2A["System Prompt 10K tokens"]
C2B["Retrieved Context 5K tokens"]
C2C["User Query 变化"]
C2A --> C2B --> C2C
C2Result["效果: System Prompt 一次计算"]
end
subgraph case3["案例 3 - 长文档"]
C3A["100K token 文档"]
C3B["稀疏注意力选择 Top-K"]
C3C["只读取相关 Block"]
C3A --> C3B --> C3C
C3Result["效果: 内存节省 70%+"]
end
5. 版本兼容性#
5.1 系统要求#
组件
版本要求
Python
3.10+
PyTorch
2.0+
vLLM
v0.9.2
CUDA
11.8+ / 12.0+
5.2 硬件平台支持#
平台
状态
说明
NVIDIA GPU (CUDA)
完全支持
主要开发平台
Huawei Ascend NPU
完全支持
华为昇腾适配
Metax MUSA
支持
摩尔线程适配
Hygon MACA
支持
海光 DCU 适配
6. 项目愿景#
6.1 设计原则#
mindmap
root["UCM 设计原则"]
decouple["解耦"]
d1["存储与算法分离"]
d2["接口与实现分离"]
unified["统一"]
u1["统一的 KV 管理接口"]
u2["统一的稀疏框架"]
progressive["渐进"]
p1["可单独使用存储"]
p2["可单独使用稀疏"]
p3["可组合使用"]
efficient["高效"]
e1["异步传输"]
e2["零拷贝"]
e3["批量操作"]
6.2 愿景目标#
“任何模型、任何场景、任何规模”
支持各种 Transformer 模型
适应从单卡到集群的部署规模
覆盖各类 LLM 应用场景