
# 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可以共用，不必重复占用多份显存。
 
#### 约束限制
- Prefix Caching特性不能和Chunked Prefill同时使用。
- 多模态模型暂不支持prefix cache。
- Qwen2.5和Qwen3系列模型支持此特性。
- 当跨请求公共前缀token数大于等于Page Attention中的block size，才会进行公共前缀token的KV Cache复用。
- 启用Prefix Caching时，服务配置的max_model_len不要超过64k。
- 启动Prefix Caching在运行时会占用更多的显存，为防止出现显存不足的问题，需要降低gpu_memory_utilization的值，如在max_model_len为64k时，推荐将gpu_memory_utilization设置为0.85。
 
#### Prefix Caching参数设置
启动推理服务时，使用Prefix Cache特性需要配置的补充参数如[表1]所示，对应的代码样例如[表2]所示。
 表1Prefix Cache特性参数 
| 服务启动方式  | 配置项                        | 取值类型 | 取值范围                                                                                                                                                                                                                                                            | 配置说明                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|:---|
| offline | enable_prefix_caching      | bool | - True  - False   | - True：会开启Prefix Cache特性，不配置这个参数也会默认开启  - False：不会开启Prefix Cache特性。                                                                               |
| online  | --no-enable-prefix-caching | -    | -                                                                                                                                                                                                                                                               | - 当前版本默认开启Prefix Cache特性。  - 该配置项用于关闭Prefix Cache特性   须知： 启用Prefix Cache特性是在启动服务时指定，属于action类型参数。 |
   
 表2开启Prefix Cache特性服务的代码样例 
| 服务启动方式            | 接口     | 服务启动基础命令                                                                         |
|:---|:---|:---|
| offline           | -      | ``` LLM(model="facebook/opt-125m", enable_prefix_caching=True) ```               |
| online(无需配置，默认开启) | openai | ``` python -m vllm.entrypoints.openai.api_server \ --model=facebook/opt-125m ``` |
   
#### 执行推理参考
1. 配置服务化参数。Ascend vllm使用该特性需参考[表1]和[表2]，其它参数请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
2. 启动服务。具体请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
3. 精度评测和性能评测。具体请参考[推理服务精度评测](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908025.html)和[推理服务性能评测](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908026.html)。
 
