aclmdlLoadWithConfig
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文件中的配置。
父主题: 模型加载与执行
aclmdlFinalizeDump
函数功能
Dump去初始化。同步接口。
约束说明
-
aclmdlInitDump接口需要与aclmdlSetDump接口、aclmdlFinalizeDump接口配合使用,用于将Dump数据记录到文件中。一个进程内,可以根据需求多次调用这些接口,基于不同的Dump配置信息,获取Dump数据。
场景举例:
- 两次模型执行,需要设置不同的Dump配置信息,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->执行其它任务-->aclFinalize接口
- 同一个模型执行两次,第一次需要Dump,第二次无需Dump,接口调用顺序:aclInit接口-->aclmdlInitDump接口-->aclmdlSetDump接口-->模型加载-->模型执行-->aclmdlFinalizeDump接口-->模型卸载-->模型加载-->模型执行-->执行其它任务-->aclFinalize接口
函数原型
aclError aclmdlFinalizeDump()
参数说明
无
返回值说明
返回0表示成功,返回其它值表示失败。
相关接口
AscendCL还提供了aclInit接口,在AscendCL初始化阶段,通过*.json文件传入Dump配置信息,运行应用后获取Dump数据的方式。该种方式,一个进程内,只能调用一次aclInit接口,如果要修改Dump配置信息,需修改*.json文件中的配置。
父主题: 模型加载与执行
aclmdlSetConfigOpt
函数功能
设置模型加载的配置对象中的各属性的取值,包括模型执行的优先级、模型的文件路径或内存地址、内存大小等。
本接口需要与以下其它接口配合,实现模型加载功能:
- 调用aclmdlCreateConfigHandle接口创建模型加载的配置对象。
- 多次调用aclmdlSetConfigOpt接口设置配置对象中每个属性的值。
- 调用aclmdlLoadWithConfig接口指定模型加载时需要的配置信息,并进行模型加载。
- 模型加载成功后,调用aclmdlDestroyConfigHandle接口销毁。
函数原型
aclError aclmdlSetConfigOpt(aclmdlConfigHandle *handle, aclmdlConfigAttr attr, const void *attrValue, size_t valueSize)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输出 | 模型加载的配置对象的指针。需提前调用aclmdlCreateConfigHandle接口创建该对象。 |
| attr | 输入 | 指定需设置的属性。 |
| attrValue | 输入 | 指向属性值的指针,attr对应的属性取值。 如果属性值本身是指针,则传入该指针的地址。 |
| valueSize | 输入 | attrValue部分的数据长度。 用户可使用C/C++标准库的函数sizeof(*attrValue)查询数据长度。 |
返回值说明
返回0表示成功,返回其它值表示失败。
相关接口
使用aclmdlSetConfigOpt接口、aclmdlLoadWithConfig接口时,是通过配置对象中的属性来区分,在加载模型时是从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
当前AscendCL还提供了以下接口实现模型加载的功能,从使用的接口上区分从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
- aclmdlLoadFromFile接口
- aclmdlLoadFromMem接口
- aclmdlLoadFromFileWithMem接口
- aclmdlLoadFromMemWithMem接口
- aclmdlLoadFromFileWithQ接口
- aclmdlLoadFromMemWithQ接口
父主题: 模型加载与执行
aclmdlLoadWithConfig
函数功能
指定模型加载时需要的配置信息,并进行模型加载。
本接口需要与以下其它接口配合,实现模型加载功能:
- 调用aclmdlCreateConfigHandle接口创建模型加载的配置对象。
- 多次调用aclmdlSetConfigOpt接口设置配置对象中每个属性的值。
- 调用aclmdlLoadWithConfig接口指定模型加载时需要的配置信息,并进行模型加载。
- 模型加载成功后,调用aclmdlDestroyConfigHandle接口销毁。
约束说明
在加载前,请先根据模型文件的大小评估内存空间是否足够,内存空间不足,会导致应用程序异常。
函数原型
aclError aclmdlLoadWithConfig(const aclmdlConfigHandle *handle, uint32_t *modelId)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 模型加载的配置对象的指针。需提前调用aclmdlCreateConfigHandle接口创建该对象,与aclmdlSetConfigOpt中的handle保持一致。 |
| modelId | 输出 | 模型ID的指针。 系统成功加载模型后会返回的模型ID。 |
返回值说明
返回0表示成功,返回其它值表示失败。
相关接口
使用aclmdlSetConfigOpt接口、aclmdlLoadWithConfig接口时,是通过配置对象中的属性来区分,在加载模型时是从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
当前AscendCL还提供了以下接口实现模型加载的功能,从使用的接口上区分从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。
- aclmdlLoadFromFile接口
- aclmdlLoadFromMem接口
- aclmdlLoadFromFileWithMem接口
- aclmdlLoadFromMemWithMem接口
- aclmdlLoadFromFileWithQ接口
- aclmdlLoadFromMemWithQ接口
父主题: 模型加载与执行
总体说明
本章主要介绍了如下几类算子API,提供了详细的接口介绍,包括接口原型、功能描述、参数说明、调用示例等,适合开发人员、测试人员。
- NN类算子:主要包含实现数学基础运算(如加、减、乘、除等)、CNN相关操作(如卷积、池化、激活函数)等功能的算子接口。
- DVPP类算子:主要包含实现图像缩放、JPEG图像解码、图像归一化等功能的算子接口。
- **融合类算子:**主要将多个独立的“小算子”(向量Vector、矩阵Cube等)融合成一个“大算子”,达到提升算子性能的目的。
父主题: 单算子API执行
功能支持度说明
通过单算子API执行方式调用算子时,昇腾AI处理器对各类算子接口的支持度如下表所示。
| 版本 | NN类算子接口(aclnn) | DVPP类算子接口(acldvpp) | 融合类算子接口(aclnn) |
|---|---|---|---|
| Atlas 200/500 A2推理产品 | x | x | x |
父主题: 单算子API执行
两段式接口
单算子API执行的算子接口一般定义为“两段式接口”,以NN类算子接口定义为例:
<br>1<br>2<br> | <br>aclnnStatus aclnnXxxGetWorkspaceSize(const aclTensor *src, ..., aclTensor *out, ..., uint64_t workspaceSize, aclOpExecutor **executor);<br>aclnnStatus aclnnXxx(void* workspace, int64 workspaceSize, aclOpExecutor* executor, aclrtStream stream);<br> |
|---|
其中aclnnXxxGetWorkspaceSize为第一段接口,主要用于计算本次API调用计算过程中需要多少的workspace内存。获取到本次API计算需要的workspace大小后,按照workspaceSize大小申请昇腾AI处理器内存,然后调用第二段接口aclnnXxx。
:::note 说明
-
workspace是指除输入/输出外,API在昇腾AI处理器上完成计算所需要的临时内存。
-
第二段接口aclnnXxx(...)不能重复调用,如下调用方式会出现异常:
aclnnXxxGetWorkspaceSize(...)aclnnXxx(...)aclnnXxx(...)
:::
父主题: 基本概念
在线提单