aclmdlInitDump
aclmdlCreateAndGetOpDesc
函数功能
获取指定算子的描述信息,包括算子名、输入tensor描述、输出tensor描述,如果查询不到指定算子,则返回报错。该接口不支持动态Shape场景。同步接口。
约束说明
使用场景****举例:执行整网模型推理时,如果产生AI Core报错,可以调用本接口获取报错算子的描述信息,再做进一步错误排查。
推荐的接口调用顺序如下:
-
定义并实现异常回调函数fn(aclrtExceptionInfoCallback类型),回调函数原型请参见aclrtSetExceptionInfoCallback 。
实现回调函数的关键步骤如下:
-
在异常回调函数fn内调用aclrtGetDeviceIdFromExceptionInfo、aclrtGetStreamIdFromExceptionInfo、aclrtGetTaskIdFromExceptionInfo接口分别获取Device ID、Stream ID、Task ID。
-
在异常回调函数fn内调用aclmdlCreateAndGetOpDesc接口获取算子的描述信息。
-
在异常回调函数fn内调用aclGetTensorDescByIndex接口获取指定算子输入/输出的tensor描述。
-
在异常回调函数fn内如下接口获取tensor描述中的数据,进行进一步分析。
例如,调用aclGetTensorDescAddress接口获取tensor数据的内存地址(用户可从该内存地址中获取tensor数据)、调用aclGetTensorDescType接口获取tensor描述中的数据类型、调用aclGetTensorDescFormat接口获取tensor描述中的Format、调用aclGetTensorDescNumDims接口获取tensor描述中的Shape维度个数、调用aclGetTensorDescDimV2接口获取Shape中指定维度的大小。
-
-
调用aclrtSetExceptionInfoCallback接口设置异常回调函数。
-
执行模型推理。
如果存在AI Core报错,则触发回调函数fn,获取算子的信息,进行进一步分析。
函数原型
aclError aclmdlCreateAndGetOpDesc(uint32_t deviceId, uint32_t streamId, uint32_t taskId, char *opName, size_t opNameLen, aclTensorDesc **inputDesc, size_t *numInputs, aclTensorDesc **outputDesc, size_t *numOutputs)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| deviceId | 输入 | Device ID。 调用aclrtGetDeviceIdFromExceptionInfo接口获取异常信息中的Device ID,作为本接口的输入。 |
| streamId | 输入 | Stream ID。 调用aclrtGetStreamIdFromExceptionInfo接口获取异常信息中的Stream ID,作为本接口的输入。 |
| taskId | 输入 | Task ID。 调用aclrtGetTaskIdFromExceptionInfo接口获取异常信息中的Task ID,作为本接口的输入。 |
| opName | 输出 | 算子名称字符串的指针。 |
| opNameLen | 输入 | 算子名称字符串长度。 若用户指定的长度比实际算子名称的长度短,则返回报错。 |
| inputDesc | 输出 | 算子所有输入的tensor描述的指针,指向一块连续内存的首地址。 |
| numInputs | 输出 | 输入个数的指针。 |
| outputDesc | 输出 | 算子所有输出的tensor描述的指针,指向一块连续内存的首地址。 |
| numOutputs | 输出 | 输出个数的指针。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用示例,参见AI Core异常信息获取。
父主题: 模型加载与执行
aclmdlInitDump
函数功能
Dump初始化。同步接口。
约束说明
-
aclmdlInitDump接口需要与aclmdlSetDump接口、aclmdlFinalizeDump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。
场景举例:
- 两次模型执行,需要设置不同的Dump配置信息,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->执行其它任务-->aclFinalize接口
- 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->aclFinalize接口
-
如果已经通过aclInit接口配置了dump信息,则调用aclmdlInitDump接口时会返回失败。
-
必须在调用aclInit接口之后、模型加载接口之前调用aclmdlInitDump接口。
函数原型
aclError aclmdlInitDump()
参数说明
无
返回值说明
返回0表示成功,返回其它值表示失败。
相关接口
AscendCL还提供了aclInit接口,在AscendCL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次aclInit接口,如果要修改Dump配置信息,需修改*.json文件中的配置。
父主题: 模型加载与执行
aclmdlSetDump
函数功能
设置dump参数。同步接口。
约束说明
-
aclmdlInitDump接口需要与aclmdlSetDump接口、aclmdlFinalizeDump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。
场景举例:
- 两次模型执行,需要设置不同的Dump配置信息,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->执行其它任务-->aclFinalize接口
- 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->aclFinalize接口
-
只有在调用本接口之后加载模型,配置的Dump信息有效。在调用本接口之前已经加载的模型不受影响,除非用户在调用本接口后重新加载该模型。
例如以下接口调用顺序中,加载的模型1不受影响,配置的Dump信息仅对加载的模型2有效:
aclmdlInitDump接口-->模型1加载-->aclmdlSetDump接口-->模型2加载-->aclmdlFinalizeDump接口
-
多次调用本接口对同一个模型配置了Dump信息,系统内处理时会采用覆盖策略。
例如以下接口调用顺序中,第二次调用本接口配置的Dump信息会覆盖第一次配置的Dump信息:
aclmdlInitDump接口-->aclmdlSetDump接口-->aclmdlSetDump接口-->模型1加载-->aclmdlFinalizeDump接口
函数原型
aclError aclmdlSetDump(const char *dumpCfgPath)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| dumpCfgPath | 输入 | 配置文件路径的指针,包含文件名。 配置文件格式为json格式,当前可配置dump数据的相关信息,示例请参见配置文件示例,详细配置说明请参见《精度比对工具使用指南》中的“比对数据准备>推理场景数据准备>准备离线模型dump数据文件(AscendCL接口方式)”。 |
配置文件示例
以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":"/MyApp20/dump",
"dump_mode":"output"
}
}
返回值说明
返回0表示成功,返回其它值表示失败。
相关接口
AscendCL还提供了aclInit接口,在AscendCL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次aclInit接口,如果要修改Dump配置信息,需修改*.json文件中的配置。
父主题: 模型加载与执行
在线提单