异步调度
MindIE推理的过程是同步执行,一次推理的过程按照在CPU/NPU上执行可以分为以下三个阶段:
- 数据准备阶段(CPU上执行)
- 模型推理阶段(NPU上执行)
- 数据返回阶段(CPU上执行)
异步调度的原理是使用模型推理阶段的耗时掩盖数据准备阶段和数据返回阶段的耗时,即使用NPU上执行的时间掩盖CPU上执行的时间,以及Sampling之外的CPU耗时,但是已经EOS(终止推理)的请求会被重复计算一次,造成NPU计算资源和显存资源有部分浪费。该特性适用于maxBatchSize较大,且输入输出长度比较长的场景。
使用样例
"ModelDeployConfig" : { "maxSeqLen" : 2560, "maxInputTokenLen" : 2048, "truncation" : false, "ModelConfig" : [ { "modelInstanceType" : "Standard", "modelName" : "llama3-8b", "modelWeightPath" : "/data/atb_testdata/weights/Meta-Llama-3-8B", "worldSize" : 2, "cpuMemSize" : 5, "npuMemSize" : 2, "backendType" : "atb", "trustRemoteCode" : false, "async_scheduler_wait_time": 120 } ] },
执行推理
- 设置环境变量,打开异步调度功能。
export MINDIE_ASYNC_SCHEDULING_ENABLE=1
PD分离部署场景下,请仅在D节点设置环境变量打开异步调度功能。
- 配置服务化参数。按照表1在服务化的config.json文件中添加相应参数, 服务化的config.json文件路径的详细说明请参考:《MindIE安装指南》中的“配置MindIE > 配置MindIE Server > 单机推理”章节中的软件包文件清单。
- 启动服务。具体请参考《MindIE Motor开发指南》中的“快速开始 > 启动服务”章节。
父主题: 特性介绍