使用流程
在本节中,您将通过一个ResNet50的图片分类应用,了解调用AscendIE的全过程,包括创建网络,到模型优化,以及落盘优化后模型,编写一个优化模型的总体步骤如图1所示。
创建网络
当用户获得了一个已经训练好的网络模型后,需要将该模型转换成AscendIE中的Network,Network可以由两种方式创建获得:
- 使用parser解析框架模型文件,转换成Network。
- 使用Network提供的Layer添加接口,逐个算子搭建Network。
以使用parser解析(C++)为例,详情请查看创建网络。
Builder* builder = Builder::CreateInferBuilder("Ascend310P3"); // 构造onnx解析器 auto network = builder->CreateNetwork(); // 创建Network std::string modelPath("./resnet50.onnx"); OnnxModelParser parser; bool ret = parser.Parse(network, modelPath.c_str()); // 解析onnx model生成Network
生成模型
使用builder生成模型,从Network中生成出可以在昇腾AI处理器上部署的模型对象ModelData,可以选择是否将模型序列化并落盘。在builder过程中会对原始训练好的模型进行多级别的编译优化,然后生成昇腾AI处理器可以执行的代码,最终存储到ModelData中,在config选项中可以配置多个编译选项,来进行定制化编译。详情请查看生成模型。
C++:
auto data = builder->BuildModel(network, config); // 生成模型 std::ofstream fout("./resnet50.om", std::ios::binary); // 保存模型为om格式 fout.write((char*)modelData.data.get(), modelData.size); fout.close();
部署模型
用户可参考《CANN AscendCL应用软件开发指南 (C&C++)》或《CANN AscendCL应用软件开发指南 (Python)》,通过调用AscendCL的推理接口部署推理模型。
父主题: 新手指引