What is KV缓存?
存储注意力机制中先前计算的键和值张量的内存缓冲区,避免在自回归文本生成过程中的冗余计算。
Definition
KV缓存(键值缓存)是在使用Transformer模型进行自回归文本生成时使用的一种内存优化。当模型逐token生成文本时,每个新token需要通过注意力机制关注所有先前的token,这涉及为序列中的每个token计算键(K)和值(V)张量。如果不使用缓存,模型将在每个生成步骤重新计算所有先前token的K和V张量——一种随序列长度呈二次增长的冗余计算。
KV缓存存储每个token生成时计算的K和V张量,这样后续生成步骤只需要为新token计算K和V,并读取所有先前token的缓存值。这将每步的K/V计算从O(n)减少到O(1),大幅加速生成过程。代价是内存:KV缓存随序列长度线性增长,对于长上下文或大批量大小,它可能消耗比模型权重本身更多的GPU内存。
对于FP16的典型7B参数模型,KV缓存中的每个token需要大约1 MB内存(跨所有层)。4096 token的上下文因此需要大约4 GB的KV缓存内存。对于128K上下文窗口,仅KV缓存就需要约128 GB——远超模型权重内存。这就是为什么高效的KV缓存管理是LLM服务中最重要的挑战之一。
Why It Matters
KV缓存管理是大规模LLM服务中的关键瓶颈。缓存决定了单块GPU可以服务多少并发请求(批量大小)、上下文可以有多长(最大序列长度)以及有多少内存可用于模型权重。高效的KV缓存系统直接转化为更高的吞吐量、更低的延迟和更低的服务成本。
KV缓存管理方面的创新——如PagedAttention(vLLM使用),它像操作系统管理虚拟内存页面一样管理缓存内存——大幅提高了LLM服务效率。在PagedAttention之前,服务系统由于碎片化浪费了高达60%的KV缓存内存。这些创新对于实际部署经济性的影响与模型架构改进同样重大。
How It Works
在预填充阶段(处理初始提示),模型为所有输入token计算K和V张量并存储在缓存中。在解码阶段(生成新token),每个生成步骤仅为新token计算K和V,将它们追加到缓存中,并使用完整缓存进行注意力计算。
高级KV缓存技术包括:量化KV缓存(以INT8或INT4而非FP16存储缓存张量,将内存减少2-4倍且对质量影响最小);分组查询注意力(GQA,使用比查询头更少的K/V头,减少缓存大小);滑动窗口注意力(仅缓存最近的N个token而非完整历史);以及PagedAttention(以固定大小的页面管理缓存内存,消除碎片化并实现跨请求的高效内存共享)。
Example Use Case
一个服务平台在4块A100-80GB GPU上处理200个并发聊天会话,每个会话最长8K token上下文。没有PagedAttention时,KV缓存碎片化将其限制在80个并发会话。使用vLLM的PagedAttention管理KV缓存后,他们以95%的内存利用率服务所有200个会话,将GPU需求从10块减少到4块——基础设施成本降低60%。
Key Takeaways
- KV缓存存储先前计算的注意力键/值张量以避免冗余计算。
- 它对高效的自回归生成至关重要——没有它,计算量呈二次增长。
- KV缓存内存随序列长度线性增长,对于长上下文可能超过模型权重内存。
- PagedAttention、GQA和缓存量化等技术优化内存效率。
- KV缓存管理直接决定服务吞吐量、延迟和基础设施成本。
How Ertas Helps
在Ertas Studio中微调的模型继承其基础架构的KV缓 存效率特性。Studio支持具有分组查询注意力(GQA)的模型,减少KV缓存内存需求,在使用GGUF导出进行本地推理时实现更长的上下文。
Related Resources
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.