模型加载
开发应用时,如果涉及整网模型推理,则应用程序中必须包含模型加载的代码逻辑,关于模型加载的接口调用流程,请依次参见主要接口调用流程以及本节中的说明。
本节描述的是整网模型加载的接口调用流程,对于算子模型加载与执行的接口调用流程请参见算子调用。
图1 模型加载流程-使用不同的模型加载接口

图2 模型加载流程-使用相同的模型加载接口

关键接口的说明如下(调用示例请参见模型加载):
- 在模型加载前,需要先构建出适配昇腾AI处理器的离线模型(*.om文件),构建方式请参见模型构建。
- 当由用户管理内存时,为确保内存不浪费,在申请工作内存、权值内存前,需要调用acl.mdl.query_size接口查询模型运行时所需工作内存、权值内存的大小。
- 在模型加载前,需使用ATC工具将第三方网络(例如,Caffe ResNet-50网络)转换为适配昇腾AI处理器的离线模型(*.om文件),请参见请参见《ATC工具使用指南》。
- 静态多Batch场景下,在转换模型时,需通过input_shape参数设置Batch数。
- 动态Batch场景下,在转换模型时,需通过dynamic_batch_size参数设置每个档位的Batch数。
- 动态分辨率场景下,在转换模型时,需通过dynamic_image_size参数设置每个档位的输入图片分辨率。
- 动态AIPP场景下,在转换模型时,需通过insert_op_conf参数中的配置文件指定aipp_mode为dynamic。
- 动态维度(ND格式)场景下,在转换模型时,需通过dynamic_dims参数设置每个档位的维度值。
- 支持以下方式加载模型,模型加载成功后,返回标识模型的模型ID:
从使用的接口上区分从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
- acl.mdl.load_from_file:从文件加载离线模型数据,由系统内部管理内存。
- acl.mdl.load_from_mem:从内存加载离线模型数据,由系统内部管理内存。
- acl.mdl.load_from_file_with_mem:从文件加载离线模型数据,由用户自行管理模型运行的内存(包括工作内存和权值内存,工作内存用于模型的输入输出等数据,权值内存用于存放权值数据)。
- acl.mdl.load_from_mem_with_mem:从内存加载离线模型数据,由用户自行管理模型运行的内存(包括工作内存和权值内存)。
- 使用acl.mdl.set_config_opt接口、acl.mdl.load_with_config接口时,是通过配置对象中的属性来区分,在加载模型时是从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
父主题: 接口调用流程