跳至内容

自动前缀缓存

简介

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

优云智算