当前大语言模型推理系统普遍采用KV Cache缓存机制,但该机制存在以下两个问题:
- 随着LLM支持的序列长度不断增长,KV Cache所需要的显存资源也急剧增加。
- 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 推理卡硬件支持此特性。
- LLaMa系列、Qwen1.5和Qwen2系列模型支持对接此特性。
- 当跨session公共前缀token数大于等于Page Attention中的block size,才会进行公共前缀token的KV Cache复用。
- 该特性不能和PD分离、Multi-LoRA、SplitFuse、并行解码以及KV Cache量化特性同时使用。
- 暂不支持与LoRA特性配合。
开启Prefix Cache特性需要配置的补充参数如表1及表2所示:
表1 Prefix Cache补充参数1:ModelDeployConfig中的ModelConfig参数配置项
|
取值类型
|
取值范围
|
配置说明
|
plugin_params
|
std::string
|
"{\"plugin_type\":\"prefix_cache\"}"或""
|
不添加该字段或将该字段设置为""均表示默认不生效任何插件功能。
"{\"plugin_type\":\"prefix_cache\"}"表示执行Prefix Cache。
须知: - 若enablePrefixCache开启,则此处必须开启为prefix_cache。
- 若enablePrefixCache不开启,为非必填项。
|
表2 Prefix Cache补充参数2:ScheduleConfig的参数配置项
|
取值类型
|
取值范围
|
配置说明
|
enablePrefixCache
|
bool
|
|
- true:会开启Prefix Cache特性。
- false:不会开启Prefix Cache特性。
|
执行推理
- 配置服务化参数。该特性需配合MindIE Service使用,按照表1及表2在服务化的config.json文件中添加相应参数,config.json文件路径的详细说明请参考:《MindIE安装指南》中“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
- 启动服务。具体请参考《MindIE Service开发指南》的“快速开始 > 启动服务”章节。