KV Cache池化
特性介绍
在当前大语言模型的推理系统中,KV Cache是广泛采用的缓存机制。MindIE在此基础上进一步引入Prefix Cache技术,能够在请求命中缓存时显著减少Prefill阶段的计算耗时,并有效节省显存占用。
然而,Prefix Cache默认仅使用片上内存,其容量有限,难以缓存大量前缀信息。为此,KV Cache池化特性实现了存储层级的扩展——支持将DRAM甚至SSD等更大容量的存储介质纳入前缀缓存池,从而突破片上内存的容量限制。该机制有效提升了Prefix Cache的命中率,显著降低大模型推理的成本。
限制与约束
- Atlas 800I A2 推理服务器和Atlas 300I Duo 推理卡支持此特性。
- 其他限制与约束和Prefix Cache 相同,请参考限制与约束。
- 当前仅支持DRAM池化,即和Prefix Cache叠加后两级缓存。
- 使用KV Cache池化特性时,必须同时打开Prefix Cache特性。
- 当前不支持叠加RAS场景。
参数说明
开启KV Cache池化特性需要配置的补充参数如表1所示。
执行推理
- 打开Server的config.json文件。
cd {MindIE安装目录}/latest/mindie-service/ vi conf/config.json - 配置服务化参数。使用KV Cache池化特性时,必须打开Prefix Cache特性。
请根据表1~表3外,和表1,在Server的config.json文件添加相应参数。其他服务化参数说明请参见配置参数说明(服务化)章节。
下面以DeepSeek-R1模型, 开启Prefix Cache+KV Cache池化为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
"BackendConfig" : { "backendName" : "mindieservice_llm_engine", "modelInstanceNumber" : 1, "npuDeviceIds" : [[0,1,2,3,4,5,6,7]], "tokenizerProcessNumber" : 8, "multiNodesInferEnabled" : true, "multiNodesInferPort" : 1120, "interNodeTLSEnabled" : false, "interNodeTlsCaPath" : "security/grpc/ca/", "interNodeTlsCaFiles" : ["ca.pem"], "interNodeTlsCert" : "security/grpc/certs/server.pem", "interNodeTlsPk" : "security/grpc/keys/server.key.pem", "interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt", "interNodeTlsCrlPath" : "security/grpc/certs/", "interNodeTlsCrlFiles" : ["server_crl.pem"], "interNodeKmcKsfMaster" : "tools/pmt/master/ksfa", "interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb", "kvPoolConfig" : {"backend":"kv_pool_backend_name", "configPath":"/path/to/your/config/file"}, "ModelDeployConfig" : { "maxSeqLen" : 20000, "maxInputTokenLen" : 4096, "truncation" : false, "ModelConfig" : [ { "modelInstanceType" : "Standard", "modelName" : "dsr1", "modelWeightPath" : "/mnt/l00889326/deepseek_r1_w8a8_mtp", "worldSize" : 8, "cpuMemSize" : 0, "npuMemSize" : -1, "backendType" : "atb", "trustRemoteCode" : false, "async_scheduler_wait_time": 120, "kv_trans_timeout": 10, "kv_link_timeout": 1080, "dp": 2, "sp": 1, "tp": 8, "moe_ep": 4, "moe_tp": 4, "plugin_params": "{\"plugin_type\":\"prefix_cache\"}", "models": { "deepseekv2": { "enable_mlapo_prefetch": true, "kv_cache_options": { "enable_nz": true } } } } ] },
- 拉起池化后端对应的中心化服务Master Service,具体拉起命令,请参考使用的池化后端对应的Readme文档。
- 启动服务。
1./bin/mindieservice_daemon
- 第一次使用以下指令发送请求,prompt为第一轮问题。如需使用到Prefix Cache/池化特性,第二次请求的prompt需要与第一次的prompt有一定长度的公共前缀,常见使用场景有多轮对话和few-shot学习等。具体curl命令请参考8.6.5 Prefix Cache章节发送请求的命令和内容。
- 发送后续请求,由于HBM命中率优先级高于DRAM池化,如果需要真实从池子命中,需要保证HBM中无法命中。
父主题: 加速特性