KV缓存优化
KV 缓存存储变压器已经计算出的键和值,因此它不会为每个新令牌重做工作 - 但它可以膨胀到千兆字节。
概述
KV cache optimization shrinks and manages that memory so models serve longer contexts to more users at once.
深入探讨
在变压器中,每个新令牌通过注意力的键(K)和值(V)关注所有先前的令牌。在每一步重新计算整个序列的 K 和 V 会是二次的且浪费的,因此模型缓存它们:KV 缓存。缺点是尺寸。缓存随着序列长度、批量大小、层和头线性增长,因此长上下文请求可能消耗比模型权重本身更多的 GPU 内存。优化从几个角度解决了这个问题:分页内存(vLLM 的 PagedAttention)将缓存存储在不连续的块中,以消除碎片并实现共享;量化以8位或4位存储K和V;分组查询注意(GQA)和多查询注意(MQA)等架构变化让许多查询头共享更少的键/值头,从而从源头削减缓存大小。
技术洞察
PagedAttention 借用了操作系统的虚拟内存分页:缓存位于通过查找表映射的固定大小的块中,因此请求仅使用它们需要的块,并且相同的前缀(如共享系统提示符)可以指向相同的块。 DeepSeek 模型中使用的多头潜在注意力 (MLA) 将 K 和 V 压缩为一个小的共享潜在向量,在保持准确性的同时显着减少内存。
战略影响
成本与预算
多年来,架构决策决定着性能和运营成本。
更清晰的判决
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
质量控制
更好的工程选择可以减少生产中的可靠性事故。
KV缓存优化的未来
随着上下文窗口扩展到数十万或数百万个令牌,KV 缓存成为服务的主要成本。预计积极的缓存压缩和驱逐(丢弃低关注令牌)、默认的跨请求前缀共享、将冷缓存卸载到 CPU 或 NVMe,以及 MLA 和 GQA 等架构成为标准。缓存管理将越来越类似于具有分层和智能预取的完整内存层次结构。
现实世界的实施
vLLM 的 PagedAttention 通过打包 KV 块而不产生内存碎片来服务许多并发聊天会话
Llama 模型中的分组查询注意力机制减少了 KV 缓存大小,以便 GPU 内存可以容纳更长的上下文
将 KV 缓存量化为 8 位 (KV8),以在长文档摘要期间将缓存内存大致减半
前缀缓存可在数千个 API 请求中重用共享系统提示的 KV 块
风险与防护栏
优化一项基准测试可以隐藏更广泛的系统弱点。
基础设施和维护成本常常被低估。
随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
实施路线图
在实施之前定义延迟、质量和成本目标。
在实际负载和数据条件下进行基准测试。
仪器监控错误、漂移和用户影响。
在扩展之前准备回滚和事件响应路径。
不断探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the KV Cache Optimization quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常见问题
What is KV Cache Optimization?
KV 缓存存储变压器已经计算出的键和值,因此它不会为每个新令牌重做工作 - 但它可以膨胀到千兆字节。 KV 缓存优化会缩小并管理该内存,因此模型可以同时为更多用户提供更长的上下文。
KV 缓存存储什么以及为什么?
缓存先前令牌中的键和值可以避免对每个新令牌重新进行注意力计算,从而节省时间。
为什么KV缓存会成为内存问题呢?
缓存大小随上下文长度和并发性而变化,因此长请求可能会使用大量 GPU 内存。
PagedAttention 借用了什么操作系统概念?
PagedAttention 将缓存存储在通过表映射的非连续固定大小块中,就像操作系统分页一样。
Grouped-Query 和 Multi-Query Attention 如何减少 KV 缓存大小?
跨多个查询头共享键/值头意味着要存储的 K 和 V 向量要少得多。
KV 缓存中前缀共享的好处是什么?
共享系统提示会生成相同的 KV 条目,因此多个请求可以指向相同的块,而不是重复它们。