LLM上下文缓存与状态复用机制的分析和探索

在大模型推理中,上下文缓存与状态复用是提升性能、降低成本的核心技术。

它们主要围绕KV Cache展开,旨在解决Transformer架构中的计算冗余和显存瓶颈。

这里尝试基于网络资料,探索和分析KV Cache复用和分页注意力机制。

1 KV Cache

探索和分析状态复用,需要先了解其优化的对象-KV Cache。

1)KV Cache (Key-Value Cache)

在GPT Self-Attention中,每生成一个token,都需要计算该token与之前所有token的关联度。

为避免每次重新计算历史词语的key和value向量,系统会将它们缓存在显存,这就是KV Cache。

2)内存挑战

KV Cache的显存占用随序列长度和并发请求数线性增长。

在Llama2-70B这类大模型上,单个请求可能占用数百MB显存,更严重的是内存碎片化。

传统方案为每个请求预分配最大长度的连续显存,导致60%-80%的显存浪费,限制了并发能力。

2. 上下文缓存

上下文缓存的核心思想是让多个请求共享KV Cache,避免对相同内容进行重复计算。

2.1 Prefix Caching

Prefeix Caching即前缀缓存,这种技术专注于复用请求间的公共前缀部分,如固定的系统指令、多轮对话历史,将计算量从O(N)降到O(N - 公共前缀长度)。

1)应用场景

多轮对话、基于知识库的RAG问答、Few-shot示例共享、并行推理,如Self-Consistency等场景,都通过该技术显著受益。

2)实现机制

通过Radix Tree(基数树)等数据结构高效管理KV Cache。

它将Token序列构成树的边,新请求可快速通过树匹配最长公共前缀,并复用对应的缓存节点。

2.2 更广泛KV缓存复用

除了前缀匹配,还有更通用的复用方案:

1)LMCache

支持任意位置的文本复用,而不仅是前缀。

它将KV Cache持久化到GPU、CPU内存甚至磁盘,实现跨请求、跨进程的共享。

在vLLM等框架中,可为多轮对话、RAG等场景带来3-10倍的响应速度提升。

2)MemShare

针对长推理模型的共享KV缓存需求,通过协同过滤算法识别可复用的缓存块,并支持零拷贝共享,以降低显存开销、提升吞吐量。

3. 高效内存管理

解决复用问题后,就需要高效管理这些缓存。

3.1 PagedAttention

比如,LLM框架中的核心技术-PagedAttention。

它借鉴操作系统的分页思想,从根本上解决了KV Cache的内存碎片问题。

将KV Cache切分为固定大小的块Block,按需分配,并允许它们存储在非连续的物理内存中。

3.2 PagedAttention成效

1)消除碎片

按需动态分配,解决了预分配导致的内部和外部内存碎片。

2)内存共享

支持写时复制Copy-on-Write,使多个请求能安全地共享相同的缓存块。

3)性能提升

与HuggingFace Transformers相比,vLLM的吞吐量最高可提升24倍。

4)PagedAttention vs. Prefix Caching

两者常被混淆,但分工不同。PagedAttention是仓库管理员,负责如何高效地存储KV块,解决内存碎片;而Prefix Caching是智能调度员,负责决定存储什么,通过复用前缀来避免重复计算。

4. 补充优化技术

1)FlashAttention

算法层面的I/O感知优化,通过分块计算Tiling减少对显存的读写,使注意力计算提速2-4倍。

2)Chunked Prefill

将计算密集的Prefill阶段切分成小块,与Decode阶段交错执行,避免GPU算力被长Prompt独占,提升整体吞吐量。

3)KV Cache量化

将KV Cache压缩为FP8等低精度格式,可将显存占用降低约50%,支持更大批次和更长上下文。

4)分布式KV缓存

LMCache等技术支持将KV缓存池扩展到多节点共享,实现更大规模的上下文复用。

如百度百舸通过优化此技术使首Token延迟TTFT性能在64K长上下文中提升6.2倍。

reference


LMCache:基于KV缓存复用的LLM推理优化方案

https://developer.aliyun.com/article/1691956

Paged Attention

https://docs.vllm.tw/en/latest/design/paged_attention/#__codelineno-0-1

vLLM Optimization Techniques: 5 Practical Methods to Improve Performance

https://docs.jarvislabs.ai/blog/vllm-optimization-techniques

Automatic Prefix Caching

https://docs.vllm.ai/en/v0.14.0/design/prefix_caching/

Chunked Prefill

https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5906026.html

From Tokens to Layers: Redefining Stall-Free Scheduling for LLM Serving with Layered Prefill

https://arxiv.org/abs/2510.08055

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

https://neurips.cc/virtual/2025/loc/san-diego/poster/119883

VLLM V1 Scheduler: Inconsistent Request Scheduling Under Token Budget Limit

https://discuss.vllm.ai/t/vllm-v1-scheduler-inconsistent-request-scheduling-under-token-budget-limit/1241?page=2#post_21

LLM推理优化技术:KVCache、PageAttention、FlashAttention、MQA与GQA

https://developer.baidu.com/article/details/1922871

相关推荐
ofoxcoding3 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
NeilYuen3 天前
gRPC结合FAISS构建AI助手语义缓存模块(一):设计
人工智能·缓存·faiss
taocarts_bidfans3 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
退休倒计时3 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
炘爚3 天前
Linux——Redis
数据库·redis·缓存
小挪号底迪滴3 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存
闪电悠米3 天前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
Saniffer_SH4 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
AC赳赳老秦4 天前
OpenClaw + 飞书多维表格:自动同步数据、生成统计图表、触发自动化任务
java·大数据·python·缓存·自动化·deepseek·openclaw