Skip to content

自动识别并复用不同请求间相同 prompt 前缀的 KV Cache,避免重复计算。

为什么需要 Prefix Caching

在对话场景中,不同用户请求共享相同的 system prompt,或同一用户的多次请求共享历史对话。对这些共享前缀重复计算 KV 是巨大的浪费。Prefix Caching 利用 PagedAttention 的 block 机制实现 Copy-on-Write 共享,多个请求复用同一组物理 KV block,首 token 延迟和计算成本大幅降低。

核心原理

  • Hash 索引:对 prompt token 序列计算 hash,在 block pool 中查找是否有完全匹配的前缀 block 链。
  • Copy-on-Write:匹配的 block 被多个 sequence 共享引用,仅当 sequence 生成不同 token 时才分配新 block。
  • 自动前缀匹配:vLLM 支持自动前缀匹配(Automatic Prefix Caching, APC),无需用户手动标记。
  • LRU 淘汰:block pool 中的 cached block 按 LRU 策略淘汰,为新的 prefix 让出空间。

在源码中的实现

  • vllm/core/block_manager.pyBlockSpaceManager 支持 enable_caching 模式,维护 cached block 的 hash 索引。
  • vllm/core/block/block_hash.py — 定义 block 的 hash 计算与比较逻辑。
  • vllm/core/eviction_policy.py — LRU 等淘汰策略管理 cached block 的生命周期。
  • vllm/config.pyCacheConfig.enable_prefix_caching 开关。

相关概念