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