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

相关推荐
gQ85v10Db1 小时前
Redis分布式锁进阶第十八篇:本地缓存+分布式锁双锁架构 + 高并发削峰兜底 + 极致性能无损优化实战
redis·分布式·缓存
小江的记录本2 小时前
【Kafka核心】Kafka高性能的四大核心支柱:零拷贝、批量发送、页缓存、压缩
java·数据库·分布式·后端·缓存·kafka·rabbitmq
Komore3154 小时前
商户查询缓存
java·redis·缓存
Yupureki4 小时前
《Redis数据库》1.初识Redis
数据库·redis·缓存
倒霉蛋小马18 小时前
【Redis】什么是缓存穿透?
缓存
千月落1 天前
Redis数据迁移
数据库·redis·缓存
小编码上说1 天前
LSH(局部敏感哈希)分桶,海量数据下的相似性搜索解决方案
java·spring boot·缓存·langchain4j·lsh·局部敏感哈希·ai调用优化
风筝在晴天搁浅1 天前
LFU缓存
缓存
许彰午1 天前
CacheSQL(五):桥接篇
java·数据库·缓存·系统架构
阿维的博客日记1 天前
介绍一下Redisson的看门狗机制
java·redis·缓存