模型推理
功能介绍
使用mxVision模型推理功能通过给定输入和指定模型,进行推理获得输出结果,支持om格式和MindIR格式的模型推理,可使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型进行推理。
接口调用流程
使用模型推理前,用户需准备好输入数据以及需要加载的模型,根据模型路径或者内存方式初始化Model类,通过调用Model类的Infer接口获取模型推理结果。输入数据必须和模型输入数据类型以及格式一致,如果用户自行申请输出数据内存,则输出数据类型和格式需和模型输出保持一致,模型输入输出信息可以通过Model类的相关接口进行查询。
模型推理调用流程参考如下:
图1 模型推理接口调用流程
关键接口说明如下:
- 调用MxInit()接口进行全局初始化。
- 模型初始化。
用户需根据实际业务情况确认模型加载方式,选择从文件加载模型或从内存加载模型。如果从内存加载,需要先将模型文件读取到内存,可通过以下两种方式传入。
- 选择模型推理方式进行模型推理,请根据实际业务选择同步推理方式或异步推理方式。
- 同步推理。
- 异步推理(当前仅支持Atlas 推理系列产品)。
- 创建Stream,具体请参见异步调用。
- 用户需要自行构造并接收输出数据,传入已创建的Stream。
- 调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
// 初始化 MxBase::MxInit(); { // 输入图像二进制数据, 需用户自行准备 std::string filePath = "./test.bin"; // 读取输入数据到内存 void* dataPtr = ReadTensor(filePath); // 输入数据类型,和模型输入数据类型一致 auto dataType = MxBase::TensorDType::INT32; // 构造输入shape,和模型输入shape一致 std::vector<uint32_t> shape = {1, 128}; // 构造tensor MxBase::Tensor tensor(dataPtr, shape, dataType, 0); // 构造模型输入 std::vector<MxBase::Tensor> inputs{tensor}; // 模型路径,需用户自行指定 std::string modelPath = "./test.om"; // 根据模型路径加载模型 MxBase::Model model(modelPath); // 执行模型推理, outputs即为推理结果 std::vector<MxBase::Tensor> outputs = model.Infer(inputs); } //去初始化 MxBase::MxDeInit();
根据结构体ModelLoadOptV2方式初始化示例参考如下:
MxBase::ModelLoadOptV2 mdlLoadOpt; mdlLoadOpt.loadType = ModelLoadOptV2::LOAD_MODEL_FROM_FILE; // 指定模型加载方式 mdlLoadOpt.modelPath = modelPath; MxBase::Model model(mdlLoadOpt);
使用MindIR模型进行推理
使用MindIR模型进行推理与使用om模型推理流程一致,需要注意的是,使用MindIR模型进行推理前,需要用户自行安装MindSpore Lite软件包,并设置环境变量,具体步骤如下。
请关注MindSpore开源社区的漏洞,并及时修复。
- 下载MindSpore Lite软件包。
- 将下载好的tar包传到运行mxVision业务所在的环境上。
- 解压tar包。
tar -xzvf mindspore-lite-2.0.0-linux-{arch}.tar.gz
- 设置环境变量。
Arm服务器:
export LD_LIBRARY_PATH={path}/runtime/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH={path}/tools/converter/lib:${LD_LIBRARY_PATH}
x86_64服务器:
export LD_LIBRARY_PATH={path}/runtime/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH={path}/tools/converter/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH={path}/runtime/third_party/dnnl:${LD_LIBRARY_PATH}
其中,{path}为MindSpore Lite软件包解压后的路径,请根据实际情况修改。
- 确认环境变量设置结果。
ll {path}/runtime/lib ll {path}/tools/converter/lib
若返回目录列表,则表示环境变量设置成功。
父主题: 使用API接口方式开发(C++)