深圳Yolo 视觉
深圳
立即加入
词汇表

KV缓存

探索KV缓存如何优化Transformer 。了解该技术如何Ultralytics 推理延迟并提升其运行效率。

KV缓存(键值缓存)是一种关键的优化技术,主要应用于 大型语言模型(LLMs) 及其他Transformer架构中,用于加速 推理延迟 并降低 计算成本。其核心机制在于存储由 注意力机制 为序列中 先前标记生成的键值矩阵。通过保存这些中间计算结果,模型无需在每次生成新标记时重新计算整个对话历史的注意力 状态。该过程将 文本生成 工作流从二次复杂度操作 转变为线性操作,从而实现与聊天机器人及 AI代理 成为可能。

机制与效益

在标准 Transformer 模型中, 生成下一个词需要关注所有先前词汇以理解上下文。若无缓存机制, 模型将被迫在每个步骤重新计算整个序列的数学关系。键值缓存 通过充当记忆库来解决这一问题。

  • 速度提升:通过从内存中检索预先计算的键值对,系统显著加快了 推理引擎。这对需要低延迟的应用至关重要,例如 实时推理 在 客户服务机器人中。
  • 资源效率:虽然它增加了内存使用量(显存),但显著降低了每个令牌所需的计算量(浮点运算次数)。这种权衡通常通过模型量化等技术来管理。 模型量化 或分页技术进行管理, 类似于操作系统管理RAM的方式。
  • 扩展上下文:高效管理键值缓存使模型能够处理更大的 上下文窗口,从而能够处理长文档或在较长时间内保持连贯对话。

实际应用

KV缓存是部署现代生成式人工智能的基础组件,但其原理也延伸至 计算机视觉(CV)

  1. 生成式聊天机器人:诸如 ChatGPTClaude 高度依赖键值缓存机制。当用户提出后续问题时,模型无需从头读取完整对话记录,而是将新输入附加到前次对话的缓存状态中,从而实现近乎即时的响应。
  2. 视频理解:视频理解 任务中, 模型会顺序处理帧序列。类似于文本分词,可缓存前帧的视觉特征, 从而帮助模型track 或识别动作,而无需重新处理整个视频历史。这对于 动作识别 尤为重要, 因其依赖关键的时间上下文信息。

高效内存管理

随着模型规模的扩大,KV缓存的容量可能成为性能瓶颈,消耗高达数十亿字节的GPU 。近期技术进展主要集中于优化该存储机制。

  • 分页注意:受操作系统中虚拟内存的启发, 分页关注 (由vLLM引入)使KV 缓存能够存储在非连续内存块中。这减少了碎片化,并在 模型服务
  • KV缓存量化:为节省空间,开发者常采用 混合精度 或int8 量化技术专门处理缓存值。这能减少内存占用,使 边缘AI 设备在有限RAM条件下运行 高性能模型。
  • 提示缓存:一种相关技术,其中静态系统提示的键值状态(例如"您是位乐于助人的编程助手")仅需计算一次,即可在多个不同用户会话中复用。这是优化 大规模提示工程 工作流 的核心功能。

区分相关概念

区分KV缓存与其他缓存及优化术语很有帮助:

  • KV缓存与提示缓存 KV缓存通常指单次生成流过程中动态使用的逐令牌内存。提示缓存则特指存储固定输入指令的处理状态,以便在多个独立推理调用中复用。
  • 键值缓存与嵌入嵌入是输入数据(文本或图像)的向量表示形式,用于捕捉语义含义。键值缓存存储从注意力层中这些嵌入衍生的激活值(键与值),其核心目的是为序列生成提供支持。
  • KV缓存与模型权重 模型权重是神经网络中静态的、经过训练的参数。 KV缓存包含动态的临时数据, 这些数据在特定输入序列的前向传播过程中生成。

示例:视觉模型中的上下文

尽管KV缓存在自然语言处理领域最为知名,但状态维护的概念同样适用于高级视觉模型。在下面的示例中,我们通过Ultralytics YOLO26模拟了在视频追踪场景中传递状态(上下文)的思路。 Ultralytics 。该追踪器通过帧间对象身份保持实现目标,其原理与缓存跨令牌维持上下文的概念相通。

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 ,该平台简化了从数据标注到高效 模型部署。对于关注注意力机制深层原理的开发者,可使用 PyTorch 提供了实现这些缓存机制的基础构建模块。

加入Ultralytics 社区

加入人工智能的未来。与全球创新者联系、协作和共同成长

立即加入