跳到内容

自动前缀缓存

简介

自动前缀缓存(简称 APC)会缓存现有查询的 KV 缓存,因此如果新查询与现有查询之一共享相同的前缀,则可以直接重用 KV 缓存,从而允许新查询跳过共享部分的计算。

注意

vLLM 如何实现 APC 的技术细节可在此处找到 此处

在 vLLM 中启用 APC

在 vLLM 引擎中设置 enable_prefix_caching=True 以启用 APC。以下是一个示例

examples/offline_inference/automatic_prefix_caching.py

示例工作负载

我们介绍两种示例工作负载,其中 APC 可以提供巨大的性能优势

  • 长文档查询,用户使用不同的查询重复查询相同的长文档(例如软件手册或年度报告)。在这种情况下,APC 允许 vLLM 仅处理一次此长文档,而不是反复处理,并且所有未来的请求都可以通过重用其 KV 缓存来避免重新计算此长文档。这使得 vLLM 能够以更高的吞吐量和更低的延迟服务未来的请求。
  • 多轮对话,用户在同一聊天会话中可能与应用程序多次聊天。在这种情况下,APC 允许 vLLM 重用聊天历史的处理结果,而不是反复处理整个聊天历史,从而使得 vLLM 能够以更高的吞吐量和更低的延迟服务未来轮次的对话请求。

限制

APC 通常不会降低 vLLM 的性能。话虽如此,APC 仅减少处理查询(预填充阶段)的时间,而不减少生成新令牌(解码阶段)的时间。因此,当 vLLM 大部分时间用于生成查询答案(例如答案长度很长时),或者新查询与任何现有查询不共享相同前缀(从而无法重用计算)时,APC 不会带来性能提升。