函数:finalize_dump
函数:init_dump
| C函数原型 | aclError aclmdlInitDump() |
|---|---|
| Python函数 | ret = acl.mdl.init_dump() |
| 函数功能 | Dump初始化。同步接口。 |
| 输入说明 | 无 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | - acl.mdl.init_dump接口需要与acl.mdl.set_dump接口、acl.mdl.finalize_dump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。 - 场景举例: - 两次模型执行,需要设置不同的的Dump配置信息,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->执行其它任务-->acl.finalize接口 - 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->acl.finalize接口 - 如果已经通过acl.init接口配置了dump信息,则调用acl.mdl.init_dump接口时会返回失败。 - 必须在调用acl.init接口之后、模型加载接口之前调用acl.mdl.init_dump接口。 |
| 相关接口 | pyACL还提供了acl.init接口,在pyACL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次acl.init接口,如果要修改Dump配置信息,需修改*.json文件中的配置。 |
父主题: 模型加载与执行
函数:set_dump
| C函数原型 | aclError aclmdlSetDump(const char *dumpCfgPath) |
|---|---|
| Python函数 | ret = acl.mdl.set_dump(dump_cfg_path) |
| 函数功能 | 设置dump参数。同步接口。 |
| 输入说明 | dump_cfg_path:string,配置文件所在的路径,包含文件名。 配置文件格式为JSON格式,当前可配置dump数据的相关信息,示例请参见配置文件示例,详细配置说明请参见《精度比对工具使用指南》中的“比对数据准备>准备离线模型dump数据文件”。如果不涉及配置信息,需向acl.mdl.set_dump接口中不加参数。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | - acl.mdl.init_dump接口需要与acl.mdl.set_dump接口、acl.mdl.finalize_dump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。 - 场景举例: - 两次模型执行,需要设置不同的的Dump配置信息,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->执行其它任务-->acl.finalize接口 - 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->acl.finalize接口 - 如果已经通过acl.init接口配置了dump信息,则调用acl.mdl.init_dump接口时会返回失败。 - 必须在调用acl.init接口之后、模型加载接口之前调用acl.mdl.init_dump接口。 |
| 相关接口 | pyACL还提供了acl.init接口,在pyACL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次acl.init接口,如果要修改Dump配置信息,需修改*.json文件中的配置。 |
配置文件示例
以Caffe ResNet-50网络为例,若需要比对Caffe ResNet-50网络与基于Caffe ResNet-50转换成的适配昇腾AI处理器的离线模型中某些层算子的输出结果,可以在配置文件中配置如下内容:
{
"dump":{
"dump_list":[
{
"model_name":"ResNet-50",
"layer":[
"conv1conv1_relu",
"res2a_branch2ares2a_branch2a_relu",
"res2a_branch1",
"pool1"
]
}
],
"dump_path":"/home/HwHiAiUser/ide_daemon/dump",
"dump_mode":"output"
}
}
父主题: 模型加载与执行
函数:finalize_dump
| C函数原型 | aclError aclmdlFinalizeDump() |
|---|---|
| Python函数 | ret = acl.mdl.finalize_dump() |
| 函数功能 | Dump去初始化。同步接口。 |
| 输入说明 | 无 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | - acl.mdl.init_dump接口需要与acl.mdl.set_dump接口、acl.mdl.finalize_dump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。 - 场景举例: - 两次模型执行,需要设置不同的的Dump配置信息,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->执行其它任务-->acl.finalize接口 - 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:acl.init接口-->acl.mdl.init_dump接口-->acl.mdl.set_dump接口-->模型加载-->模型执行-->acl.mdl.finalize_dump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->acl.finalize接口 - 如果已经通过acl.init接口配置了dump信息,则调用acl.mdl.init_dump接口时会返回失败。 - 必须在调用acl.init接口之后、模型加载接口之前调用acl.mdl.init_dump接口。 |
| 相关接口 | pyACL还提供了acl.init接口,在pyACL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次acl.init接口,如果要修改Dump配置信息,需修改*.json文件中的配置。 |
父主题: 模型加载与执行
函数:get_aipp_type
| C函数原型 | aclError aclmdlGetAippType(uint32_t modelId, size_t index, aclmdlInputAippType *type, size_t *dynamicAttachedDataIndex) |
|---|---|
| Python函数 | type, dynamic_attached_data_index, ret = acl.mdl.get_aipp_type(model_id, index) |
| 函数功能 | 获取指定模型的指定输入所支持的AIPP类型(动态AIPP或静态AIPP)及动态AIPP输入对应的index值。 |
| 输入说明 | model_id:int,指定模型的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接口加载模型成功后,会返回模型ID。 index:int,模型中输入的index。 |
| 返回值说明 | type:int,表示指定模型输入的AIPP类型。 dynamic_attached_data_index:int,返回信息。 - 当type不为ACL_DATA_WITH_DYNAMIC_AIPP时,该值返回“0xFFFFFFFF”,表示无效。 - 当type为ACL_DATA_WITH_DYNAMIC_AIPP时,该值返回动态AIPP输入(用于配置动态AIPP参数)的index。 - 0:ACL_DATA_WITHOUT_AIPP #该输入无AIPP信息 - 1:ACL_DATA_WITH_STATIC_AIPP #该输入带静态AIPP信息 - 2:ACL_DATA_WITH_DYNAMIC_AIPP #该输入有关联的动态AIPP输入 - 3:ACL_DYNAMIC_AIPP_NODE #该输入本身就是动态AIPP输入,用于配置动态AIPP参数 ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | 接口调用示例,参见动态AIPP(多个动态AIPP输入)。 |
父主题: 模型加载与执行
函数:set_aipp_by_input_index
| C函数原型 | aclError aclmdlSetAIPPByInputIndex(uint32_t modelId, aclmdlDataset *dataset, size_t index, const aclmdlAIPP *aippParmsSet) |
|---|---|
| Python函数 | ret = acl.mdl.set_aipp_by_input_index(model_id, dataset_in, index, aipp) |
| 函数功能 | 动态AIPP场景下,根据指定的模型输入的输入index,设置模型推理时的AIPP参数值,同步接口。 动态AIPP支持的几种操作的计算方式及其计算顺序如下: 抠图->色域转换->减均值/归一化->padding |
| 输入说明 | **model_id:**int,模型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接口加载模型成功后,会返回模型ID。 dataset_in:int,表示模型推理的输入数据的指针地址。 使用aclmdlDataset类型的数据描述模型推理时的输入数据,输入的内存地址、内存大小用aclDataBuffer类型的数据来描述。 index:int,表示在第几个输入上设置动态AIPP参数。如果该输入没有关联动态AIPP输入,则返回报错。 可调用acl.mdl.get_aipp_type查询指定模型的指定输入是否有关联的动态AIPP输入,若有,则本接口的index参数值与acl.mdl.get_aipp_type接口的index参数值保持一致;若无,则无需设置动态AIPP参数。 aipp:int,动态AIPP参数对象的指针地址。 提前调用acl.mdl.create_aipp接口创建aclmdlAIPP类型的数据。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | - 经过动态AIPP处理后的图像的宽、高必须与原始模型中输入Shape中的宽、高保持一致。 - 多Batch场景下,根据每个Batch的配置计算出动态AIPP后输出图片的宽、高,经过动态AIPP后每个Batch的输出图片宽、高必须是一致的。计算输出图片宽、高的计算公式如表1所示。 - 抠图或者缩放或者Padding操作之后,对图片宽、高的校验规则如下,其中,aippOutputW、aippOutputH分别表示AIPP输出图片的宽、高,其它参数是acl.mdl.set_aipp_srcImage_size、acl.mdl.set_aipp_scf_params****、acl.mdl.set_aipp_crop_params、****acl.mdl.set_aipp_padding_params接口的入参请参考表1。 |
| 参考资源 | 接口调用示例,参见动态AIPP(多个动态AIPP输入)。 |
表1 输出图片宽、高计算公式
| 抠图 | 缩放 | 补边(padding) | 动态AIPP输出图片的宽、高 |
|---|---|---|---|
| 否 | 否 | 否 | aippOutputW = srcImageSizeW aippOutputH = srcImageSizeH |
| 是 | 否 | 否 | aippOutputW = cropSizeW aippOutputH = cropSizeH |
| 是 | 是 | 否 | aippOutputW = scfOutputSizeW aippOutputH = scfOutputSizeH |
| 是 | 否 | 是 | aippOutputW = cropSizeW + paddingSizeLeft + paddingSizeRight aippOutputH = cropSizeH + paddingSizeTop + paddingSizeBottom |
| 否 | 否 | 是 | aippOutputW = srcImageSizeW + paddingSizeLeft + paddingSizeRight aippOutputH = srcImageSizeH + paddingSizeTop + paddingSizeBottom |
| 否 | 是 | 是 | aippOutputW = scfOutputSizeW + paddingSizeLeft + paddingSizeRight aippOutputH = scfOutputSizeH + paddingSizeTop + paddingSizeBottom |
| 否 | 是 | 否 | aippOutputW = scfOutputSizeW aippOutputH = scfOutputSizeH |
| 是 | 是 | 是 | aippOutputW = scfOutputSizeW + paddingSizeLeft + paddingSizeRight aippOutputH = scfOutputSizeH + paddingSizeTop + paddingSizeBottom |
父主题: 模型加载与执行
函数:set_input_dynamic_dims
| C函数原型 | aclError aclmdlSetInputDynamicDims(uint32_t modelId, aclmdlDataset *dataset, size_t index, const aclmdlIODims *dims) |
|---|---|
| Python函数 | ret = acl.mdl.set_input_dynamic_dims(model_id, dataset_in, index, dims) |
| 函数功能 | 如果模型输入的Shape是动态的,可以调用该接口设置模型推理时具体维度的值。 |
| 输入说明 | **model_id:**int,模型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接口加载模型成功后,会返回模型ID。 dataset_in:int,表示模型的输入数据。 使用aclmdlDataset类型的数据描述模型推理时的输入数据,输入的内存地址、内存大小用aclDataBuffer类型的数据来描述。 index:int,标识动态维度的输入index。 需调用acl.mdl.get_input_index_by_name接口获取,输入名称固定为“ascend_mbatch_shape_data”。 dims:dict,指定具体某一档的所有维度信息。 可以调用acl.mdl.get_input_dynamic_dims接口获取指定模型支持的动态维度档位数以及每一档中的值。 例如:使用ATC工具进行模型转换时,input_shap="data:1,1,40,-1;label:1,-1;mask:-1,-1" ,dynamic_dims="20,20,1,1; 40,40,2,2; 80,60,4,4",若输入数据的真实维度为(1,1,40,20,1,20,1,1),则dims输入示例如下(name暂不使用): dims = {'dimCount': 8, 'name': '', 'dims': [1,1,40,20,1,20,1,1]} |
| 返回值说明 | ret:int,错误码 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
| 参考资源 | 接口调用流程与示例,参见动态Batch/动态分辨率/动态维度(设置多档维度值)。 |
父主题: 模型加载与执行
在线提单