AscendIE编程模型
AscendIE主要分为Build Phase和Runtime Phase两阶段工作。
第一阶段:用户需要在AscendIE中构建网络,可以通过手动组网或使用各框架的解析器自动构建,AscendIE将会在内部针对昇腾AI处理器进行模型优化。
第二阶段:部署优化后的模型并执行推理。
Build Phase
AscendIE使用Builder接口进行模型编译,最终输出编译优化后的模型,通过该模型可构建Engine进行推理。
模型生成步骤参考如下:
- 通过Builder::CreateInferBuilder创建模型编译器,创建模型编译器时需要配置设备类型(可以执行npu-smi info查看当前设备类型)。
- 通过Builder::CreateNetwork创建用户模型并构建模型结构。
- 创建BuilderConfig类,如果需要配置编译选项,使用类成员方法完成编译选项配置。
- 运行Builder::BuildModel接口,编译Network,生成可运行模型。
build阶段示意如图1所示。
Network为模型结构定义接口。Network有两种生成方式。
- 手动组网:使用AscendIE的Layer接口与Tensor接口逐层进行模型结构构建。
- 解析框架模型:一种是使用AscendIE的OnnxParser接口直接解析ONNX模型自动构建。
BuilderConfig为编译配置选项接口。通过该接口,可以进行模型编译过程中的优化类型,模型动态类型,以及模型精度类型选择等配置。
在构建好Network与BuilderConfig之后,调用Builder进行模型编译。模型编译过程中会对模型进行常量折叠、CSE、LayoutTransformer等优化并配置模型计算精度为速度更快的float16或精度更高的float32或进行int8量化压缩。
Builder将Network编译成模型内存。
- 在一个进程中,目前只能创建一个Builder进行模型编译,支持多个Builder编译的功能正在开发当中。
- Network定义时不会进行内存的深拷贝,因此在模型编译执行结束前,请不要提前释放该部分内存。
Build Phase具体内容请参见:
父主题: AscendIE如何工作