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