跳到内容

自动前缀缓存

简介

自动前缀缓存(简称 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 仅减少处理查询的时间(预填充阶段),而不减少生成新 Token 的时间(解码阶段)。因此,如果 vLLM 大部分时间都花费在生成回答上(例如当答案长度较长时),或者新查询与现有查询不共享任何前缀(即无法重用计算结果)时,APC 将无法带来性能提升。