昇腾社区首页
EN
注册

Prefix Cache

当前大语言模型推理系统普遍采用KV Cache缓存机制,但该机制存在以下两个问题:

  1. 随着LLM支持的序列长度不断增长,KV Cache所需要的显存资源也急剧增加。
  2. KV Cache只对当前session有效,如果跨session存在重复Token序列的情况下无法实现复用。

Prefix Cache通过RadixTree保留session结束后的KV Cache,新的session请求在RadixTree中查找是否存在相同的Token序列,即可复用之前计算好的KV Cache,从而实现跨session的KV Cache复用。

其优势主要包括:

  • 更短的prefill时间:由于跨session的重复Token序列对应的KV Cache可以复用,那么就可以减少一部分前缀Token的KV Cache计算时间,从而减少prefill的时间。
  • 更高效的显存使用:当正在处理的sessions相互之间存在公共前缀时,公共前缀部分的KV Cache可以共用,不必重复占用多份显存。

限制与约束

  • Atlas 800I A2 推理服务器Atlas 300I Duo 推理卡支持此特性。
  • Qwen2系列、DeepSeek-R1和DeepSeek-V3模型支持对接此特性。
  • 当跨session公共前缀Token数大于等于Page Attention中的block size,才会进行公共前缀Token的KV Cache复用。
  • Prefix Cache支持的量化特性:W8A8量化与稀疏量化,其他量化特性暂不支持。
  • 该特性不能和Multi-LoRA、长序列以及多机推理特性同时使用。
  • 该特性可以和PD分离、并行解码、MTP、异步调度和SplitFuse特性同时使用。
  • PD分离场景下,P节点和D节点都需要开启该特性。
  • 前缀复用率低或者没有复用的情况下,不建议开启该特性。
  • DeepSeek-R1和DeepSeek-V3模型开启该特性时,需设置“export TASK_QUEUE_ENABLE=1”。

开启Prefix Cache特性需要配置的补充参数如表1~表3所示:

表1 Prefix Cache补充参数1:ModelDeployConfig中的ModelConfig参数

配置项

取值类型

取值范围

配置说明

plugin_params

std::string

"{\"plugin_type\":\"prefix_cache\"}"

  • 设置为"{\"plugin_type\":\"prefix_cache\"}",表示执行Prefix Cache。
  • 不需要生效任何插件功能时,请删除该配置项字段。
表2 Prefix Cache补充参数2:ScheduleConfig的参数

配置项

取值类型

取值范围

配置说明

enablePrefixCache

-

-

该字段已无需配置,目前版本按老版本方式配置无影响。

该字段预计日落时间:2026年Q1版本。

表3 Prefix Cache补充参数3:ModelConfig的models参数

配置项

取值类型

取值范围

配置说明

enable_nz

bool

  • true
  • false

是否开启KV Cache NZ格式。

  • 仅DeepSeek-R1和DeepSeek-V3模型支持此特性。FA3量化场景下自动使能NZ格式。
  • DeepSeek-R1和DeepSeek-V3模型必须开启此开关,其余模型关闭。
  • 默认值:false

使用样例

下面以DeepSeek-R1模型,只开启Prefix Cache特性为例。如果是非DeepSeek模型,“enable_nz”请修改为“false”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"ModelDeployConfig" :
{
   "maxSeqLen" : 2560,
   "maxInputTokenLen" : 2048,
   "truncation" : false,
   "ModelConfig" : [
     {
         "plugin_params": "{\"plugin_type\":\"prefix_cache\"}",
         "modelInstanceType" : "Standard",
         "modelName" : "DeepSeek-R1_w8a8",
         "modelWeightPath" : "/data/weights/DeepSeek-R1_w8a8",
         "worldSize" : 8,
         "cpuMemSize" : 5,
         "npuMemSize" : -1,
         "backendType" : "atb",
         "trustRemoteCode" : false,
         "models": {
             "deepseekv2": {
                 "kv_cache_options": {"enable_nz": true}
              }
         }
      }
   ]
},

如果需要特性叠加使用,如:Prefix Cache和MTP叠加,方法如下:

"plugin_params": "{\"plugin_type\":\"mtp,prefix_cache\",\"num_speculative_tokens\": 1}",

执行推理

  1. 配置服务化参数。该特性需配合MindIE Motor使用,按照表1~表3在服务化的config.json文件中添加相应参数,config.json文件路径的详细说明请参考:《MindIE安装指南》中的“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
  2. 启动服务。具体请参考《MindIE Motor开发指南》中的“快速开始 > 启动服务”章节