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