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可以共用,不必重复占用多份显存。
约束限制
- 该特性不能和Chunked-prefill、KV Cache量化特性同时使用。
- 该特性暂不支持与LoRA特性配合。
- 多模态模型暂不支持prefix cache。
- LLaMa系列、Qwen系列模型支持此特性。
- 当跨请求公共前缀token数大于等于Page Attention中的block size,才会进行公共前缀token的KV Cache复用。
Prefix Caching参数设置
启动推理服务时,使用Prefix Cache特性需要配置的补充参数如表1所示,对应的代码样例如表2所示。
服务启动方式 |
配置项 |
取值类型 |
取值范围 |
配置说明 |
---|---|---|---|---|
offline |
enable_prefix_caching |
bool |
|
|
online |
--enable-prefix-caching |
- |
- |
须知: 启用Prefix Cache特性是在起服务时指定,属于action类型参数。 |
服务启动方式 |
接口 |
服务启动基础命令 |
---|---|---|
offline |
- |
LLM(model="facebook/opt-125m", enable_prefix_caching=True) |
online |
vllm |
python -m vllm.entrypoints.api_server \ --model=facebook/opt-125m \ --enable-prefix-caching |
online |
openai |
python -m vllm.entrypoints.openai.api_server \ --model=facebook/opt-125m \ --enable-prefix-caching |