跳至内容

自动前缀缓存

简介

自动前缀缓存(简称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不会带来性能提升。