Prefix Caching
什么是Prefix Caching
在LLM推理应用中,经常会面临具有长system prompt的场景以及多轮对话的场景。长system prompt的场景,system prompt在不同的请求中但是相同的,KV Cache的计算也是相同的;多轮对话场景中,每一轮对话需要依赖所有历史轮次对话的上下文,历史轮次中的KV Cache在后续每一轮中都要被重新计算。这两种情况下,如果能把system prompt和历史轮次中的KV Cache保存下来,留给后续的请求复用,将会极大地降低首Token的耗时。如果Prefix Cache和Generated KV Cache都可以缓存,在多轮对话的应用中,忽略边界情况,基本上可以认为其消除了历史轮次中生成对话的recompute。
Ascend vllm提供prefix caching关键特性能力,能够显著降低长system prompt和多轮对话场景首token时延,提升用户体验。其优势主要包括:
- 更短的prefill时间:由于跨请求的重复token序列对应的KV Cache可以复用,那么就可以减少一部分前缀token的KV Cache计算时间,从而减少prefill的时间。
- 更高效的显存使用:当正在处理的请求相互之间存在公共前缀时,公共前缀部分的KV Cache可以共用,不必重复占用多份显存。
约束限制
- 该特性不能和ascend_scheduler_config同时使用。
- 由于Chunked Prefill默认打开,需要在ascend_scheduler_config生效的前提下才可以关闭,因此当前Prefix Caching生效时Chunked Prefill也是生效。
- 多模态模型暂不支持prefix cache。
- Qwen2.5和3系列模型支持此特性。
- 当跨请求公共前缀token数大于等于Page Attention中的block size,才会进行公共前缀token的KV Cache复用。
Prefix Caching参数设置
执行推理参考
- 配置服务化参数。Ascend vllm使用该特性需参考表1和表2,其它参数请启动推理服务(大语言模型)。
- 启动服务。具体请参考启动推理服务(大语言模型)。
- 精度评测和性能评测。具体请参考推理服务精度评测和推理服务性能评测。