模型构建
模型推理场景下,必须要有适配昇腾AI处理器的离线模型(*.om文件),当前支持以下方式的构建模型:使用ATC(Ascend Tensor Compiler)工具、使用Ascend Graph接口。
如果模型推理涉及动态AIPP、动态Batch、动态分辨率、动态维度(ND格式),需确保om模型文件中已包含动态AIPP、动态Batch、动态分辨率、动态维度(ND格式)相关的配置。
使用ATC工具转换模型
对于开源框架的网络模型(如Caffe、TensorFlow等),不能直接在昇腾AI处理器BS9SX1A AI处理器上做推理,需要先使用ATC(Ascend Tensor Compiler)工具将开源框架的网络模型转换为适配昇腾AI处理器的离线模型(*.om文件)。关于ATC工具的使用说明,请参见《ATC工具使用指南》。
使用ATC工具进行模型转换时,支持以下关键特性:
- 支持自定义的模型转换
模型转换时支持指定网络的输入节点、输出节点的Datatype、Format、输入数据的Shape、模型转换支持精度选择等关键参数。
- 支持动态Batch、动态分辨率
在某些推理场景,如检测出目标后再执行目标识别网络,由于目标个数不固定导致目标识别网络输入Batch数不固定。如果每次推理都按照最大的Batch或最大分辨率进行计算,会造成计算资源浪费。因此,推理需要支持动态BatchSize和动态分辨率的场景,使用ATC工具时,通过dynamic_batch_size设置支持的Batch档位,通过dynamic_image_size参数设置支持的分辨率档位。
- 支持AIPP:
AIPP用于在AI Core上完成图像预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据处理之后再进行真正的模型推理。该种方式比较灵活,在推理之前完成所有的数据处理,专门的加速模块实现并保证性能,不让图像预处理成为瓶颈。
- 静态AIPP:模型转换时配置AIPP参数,模型生成后,AIPP参数值被保存在离线模型中,每次模型推理只能固定的AIPP参数。
- 动态AIPP:模型转换时仅设置AIPP模式为动态,每次模型推理前,根据需求,在执行模型前调用AscendCL提供的接口设置动态AIPP参数值,每次模型推理时可使用不同的AIPP参数。动态AIPP模式的设置请参见《ATC工具使用指南》,动态AIPP参数的设置请参见模型推理扩展场景。
- 支持动态维度(ND格式)
为了支持Transformer等网络在输入格式的维度不确定的场景,需要支持ND格式下任意维度的动态设置。ND表示支持任意格式,当前N<=4。
- 支持指定模型输入数据的Shape范围
模型推理场景下,对于动态Shape的输入或输出数据,使用ATC工具转换模型时,通过input_shape_range参数设置输入Shape范围。
- 支持生成单算子模型
使用Ascend Graph接口构建模型
用户可以通过开放的Ascend Graph接口构建离线模型,用于在昇腾AI处理器BS9SX1A AI处理器上进行离线推理,参见《Ascend Graph开发指南》。主要方式有两种:
- 使用昇腾AI处理器BS9SX1A AI处理器支持的算子,基于算子原型,调用Ascend Graph接口直接构建Graph,并编译为离线模型。
在定义Data算子、编译模型时,支持设置动态Batch、动态分辨率、AIPP、动态维度(ND格式),并分别配置支持的Batch档位、分辨率档位、AIPP参数值、动态维度档位。
- 调用Ascend Graph接口将Caffe、Tensorflow等原始模型解析为Graph,并编译为离线模型。