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