KV Cache
了解 KV Cache 如何优化像 LLM 这样的 Transformer 模型。探索该技术如何减少推理延迟并提高 Ultralytics YOLO26 的效率。
KV Cache (Key-Value Cache) 是一项关键的优化技术,主要用于 大语言模型 (LLMs) 和其他基于 Transformer 的架构中,以加速 推理延迟 并降低计算成本。其核心在于,KV Cache 存储了由 注意力机制 为序列中先前 token 生成的 Key 和 Value 矩阵。通过保存这些中间计算结果,模型在生成每个新 token 时,无需为对话的整个历史记录重新计算注意力状态。这一过程将 文本生成 工作流从二次复杂度操作转变为线性操作,从而使得与聊天机器人和 AI 智能体 的实时交互变得切实可行。
Link to this section机制与优势#
在标准的 Transformer 模型中,生成下一个单词需要关注所有先前的单词以理解上下文。如果没有缓存,模型将需要在每一步都重新计算整个序列的数学关系。KV Cache 通过充当内存库解决了这个问题。
- 速度提升: 通过从内存中检索预计算的 Key 和 Value,系统能显著加快 推理引擎 的速度。这对于需要低延迟的应用(例如客服机器人中的 实时推理)至关重要。
- 资源效率: 虽然它增加了内存使用量(VRAM),但显著减少了每个 token 所需的计算量(FLOPs)。这种权衡通常通过诸如 模型量化 或分页等技术来管理,类似于操作系统管理 RAM 的方式。
- 扩展上下文: 对 KV Cache 的高效管理使模型能够处理更大的 上下文窗口,从而使其能够处理长文档或在长时间内保持连贯的对话。
Link to this section实际应用#
KV Cache 是部署现代生成式 AI 的基础组件,但其原理也延伸到了 计算机视觉 (CV) 领域。
-
生成式聊天机器人: 诸如 ChatGPT 或 Claude 等服务非常依赖 KV 缓存。当用户提出后续问题时,模型不会从头开始重新读取整个聊天历史。相反,它会将新的输入附加到上一轮的缓存状态中,从而实现近乎即时的响应。
-
视频理解: 在 视频理解 任务中,模型会按顺序处理帧。与文本 token 类似,过去帧中的视觉特征可以被缓存,以帮助模型跟踪对象或识别动作,而无需重新处理整个视频历史。这对于时间上下文至关重要的 动作识别 尤为相关。
Link to this section高效内存管理#
随着模型规模的增长,KV Cache 的大小可能成为瓶颈,消耗掉数 GB 的 GPU 内存。近期的进展集中在优化这种存储方式上。
- PagedAttention: 受操作系统中虚拟内存的启发,PagedAttention(由 vLLM 引入)允许将 KV Cache 存储在非连续的内存块中。这减少了碎片化并允许在 模型服务 期间实现更高的批处理大小。
- KV Cache 量化: 为了节省空间,开发者通常会将 混合精度 或 int8 量化专门应用于缓存值。这减小了内存占用,使 RAM 有限的 边缘 AI 设备也能够运行高性能模型。
- 提示词缓存 (Prompt Caching): 一种相关技术,将静态系统提示词(例如:“你是一位乐于助人的编程助手”)的 KV 状态计算一次,并在多个不同的用户会话中重复使用。这是在大规模优化 提示工程 工作流时的核心功能。
Link to this section区分相关概念#
区分 KV Cache 与其他缓存及优化术语非常有帮助:
- KV Cache 与 提示词缓存 的区别: KV Cache 通常指在单个生成流期间使用的动态、逐 token 的内存。提示词缓存专门指存储固定输入指令的处理状态,以便在多个独立的推理调用中重复使用。
- KV Cache 与 嵌入 (Embeddings) 的区别: 嵌入是输入数据(文本或图像)的向量表示,用以捕捉语义含义。KV Cache 存储的是在注意力层内从这些嵌入中派生出来的“激活值”(即 Keys 和 Values),其目的是专门用于序列生成。
- KV Cache 与 模型权重 的区别: 模型权重是神经网络的静态学习参数。KV Cache 则由特定输入序列在前向传播过程中生成的动态临时数据组成。
Link to this section示例:视觉模型中的上下文#
虽然 KV 缓存最常用于 NLP,但维护状态的概念也适用于先进的视觉模型。在下面的示例中,我们使用 Ultralytics YOLO26 来模拟在视频跟踪场景中传递状态(上下文)的理念。在这里,跟踪器在帧之间维护对象的身份,这在概念上与缓存如何跨 token 维护上下文非常相似。
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")希望管理数据集并部署优化后模型的开发者可以使用 Ultralytics Platform,它简化了从数据标注到高效 模型部署 的流程。对于那些对注意力机制有更深入研究兴趣的人,诸如 PyTorch 之类的库提供了实现这些缓存机制的基础构建块。






