从图片分类入门推理应用开发
简介:介绍推理应用开发语言AscendCL、应用开发基本概念&基本流程,并基于开发板演示如何运行图片分类应用样例。
目标:了解推理应用开发的基本流程,可自行运行已有的推理样例。
1. CANN基础知识
1.1. CANN架构(Compute Architecture for Neural Networks)
CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,对上支持多种AI框架,对下服务AI处理器与编程,发挥承上启下的关键作用,是提升昇腾AI处理器计算效率的关键平台。同时针对多样化应用场景,提供高效易用的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
CANN的架构分为很多层,自上而下分别是:昇腾计算语言、昇腾计算服务层、昇腭计箅编译层、昇腾计算执行层、昇腭计算基础层。
1.2. AscendCL昇腾计算语言开发接口
AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库。可以用于应用开发、模型开发、算子开发。
1.2.1. AscendCL的主要功能
- C/Python语言API库
- 利用昇腾硬件计算资源的入口之一
- 提供深度学习推理计算、图像预处理、单算子加速计算等能力
1.2.2. AscendCL的应用场景
- 开发应用
- 供第三方框架调用
- 供第三方开发lib库
1.2.3. AscendCL的优势
- 高度抽象
- 向后兼容
- 零感知芯片
2. 离线推理应用开发流程

2.1. 图片分类入门推理应用开发-模型转换
使用ATC工具完成离线模型转换,将开源框架的网络模型(如onnx、pb、caffe等)转换为昇腾AI处理器支持的离线模型。

模型转换说明:开源框架网络模型经过Parser解析后,转换为中间态IR Graph。中间态IR经过图准备,图拆分,图优化,图译等一系列操作后,转成适配昇腾AI处理器的离线模型。用户可通过AscendCL接口加载模型文件实现推理,
使用AscendCL接口进行应用开发时,都需要先将训练好的模型转换为昇腾AI处理器能识别的*.om模型文件。图片分类入门推理应用开发离线模型转换,模型准备步骤具体如下:
2.1.1. 下载原始模型
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003 Atc Models/resnet50/resnet50.onnx
2.1.2. 执行模型转换命令
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input shape="actual input 1:1 3,224,224"soc version=AscendXXX
2.1.3. 参数说明
--model:ResNet-50网络的模型文件路径,
--framework:原始框架类型。5表示ONNX
--output:resnet50.om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
--soc version:昇腾AI处理器的版本。使用npu-smi info命令查询处理器版本,请根据实际情况选择。
2.2. 图片分类入门推理应用开发-代码开发
使用AscendCL接口完成代码开发,按照推理应用开发流程完成代码开发。
将AscendCL的应用高度抽象后,可以得到以下流程:
2.2.1. AscendCL初始化:
使用AscendCL接口开发应用时,必须先初始化
AscendCl,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常,调用aclInit接口实现初始化AscendCL。
2.2.2. 运行管理资源申请:
应用程序中必须包含运行管理资源申请的代码逻辑,需要按顺序依次申请如下运行管理资源:Device、Context、Stream,确保可以使用这些资源执行运算、管理任务。
2.2.3. 运行管理资源释放:
所有数据处理都结束后,需要依次释放运行管理资源:Stream、Context、Device。
2.2.4. AscendCL去初始化:
有初始化就有去初始化,在确定完成了AscendCL的所有调用(包括运行管理资源释放完成)之后,或者进程退出之前,需调用AscendCL接口实现AscendCL去初始化,调用aclFinalize接口实现AscendCL去初始化。
// 调用acl接口需要
使用acl.h头文件
#include "acl/acl.h"
uint32 t deviceld = 0;
aclrtContext context;
aclrtStream stream;
const char *aclConfigPath ="./src/acl.json";
aclError ret = aclnit(aclConfigPath);
ret = aclrtSetDevice(deviceld);
ret = aclrtCreateContext(&context, deviceld);
ret = aclrtCreateStream(&stream);
// 业务执行
ret = aclrtDestroyStream(stream);
ret = aclrtDestroyContext(context);
ret = aclrtResetDevice(deviceld);
ret = aclFinalize();
2.3. 图片分类入门推理应用开发-编译执行
在运行环境上将应用落地,执行应用,获取推理结果。
具备数据、离线模型、源码和CMake文件后,就可以进行代码的编译与运行了。
1.编译应用之前需要先设置环境变量,配置程序编译依赖的头文件与库文件路径:
export DDK PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU HOST LIB=$DDK PATH/runtime/lib64/stub
2.切换到用于存放编译文件的目录如“build/intermediates/host",执行cmake生成编译文件:
cd build/intermediates/host
cmake ../.././src -DCMAKE CXX COMPILER=g++ -DCMAKE SKIP RPATH=TRUE
3.执行make命令,生成可执行文件main:
4.切换到可执行文件main所在的目录,运行可执行文件:
从图片分类入门推理应用开发
简介:介绍推理应用开发语言AscendCL、应用开发基本概念&基本流程,并基于开发板演示如何运行图片分类应用样例。
目标:了解推理应用开发的基本流程,可自行运行已有的推理样例。
1. CANN基础知识
1.1. CANN架构(Compute Architecture for Neural Networks)
CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,对上支持多种AI框架,对下服务AI处理器与编程,发挥承上启下的关键作用,是提升昇腾AI处理器计算效率的关键平台。同时针对多样化应用场景,提供高效易用的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
CANN的架构分为很多层,自上而下分别是:昇腾计算语言、昇腾计算服务层、昇腭计箅编译层、昇腾计算执行层、昇腭计算基础层。
1.2. AscendCL昇腾计算语言开发接口
AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库。可以用于应用开发、模型开发、算子开发。
1.2.1. AscendCL的主要功能
1.2.2. AscendCL的应用场景
1.2.3. AscendCL的优势
2. 离线推理应用开发流程
2.1. 图片分类入门推理应用开发-模型转换
使用ATC工具完成离线模型转换,将开源框架的网络模型(如onnx、pb、caffe等)转换为昇腾AI处理器支持的离线模型。
模型转换说明:开源框架网络模型经过Parser解析后,转换为中间态IR Graph。中间态IR经过图准备,图拆分,图优化,图译等一系列操作后,转成适配昇腾AI处理器的离线模型。用户可通过AscendCL接口加载模型文件实现推理,
使用AscendCL接口进行应用开发时,都需要先将训练好的模型转换为昇腾AI处理器能识别的*.om模型文件。图片分类入门推理应用开发离线模型转换,模型准备步骤具体如下:
2.1.1. 下载原始模型
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003 Atc Models/resnet50/resnet50.onnx
2.1.2. 执行模型转换命令
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input shape="actual input 1:1 3,224,224"soc version=AscendXXX
2.1.3. 参数说明
--model:ResNet-50网络的模型文件路径,
--framework:原始框架类型。5表示ONNX
--output:resnet50.om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
--soc version:昇腾AI处理器的版本。使用npu-smi info命令查询处理器版本,请根据实际情况选择。
2.2. 图片分类入门推理应用开发-代码开发
使用AscendCL接口完成代码开发,按照推理应用开发流程完成代码开发。
将AscendCL的应用高度抽象后,可以得到以下流程:
2.2.1. AscendCL初始化:
使用AscendCL接口开发应用时,必须先初始化
AscendCl,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常,调用aclInit接口实现初始化AscendCL。
2.2.2. 运行管理资源申请:
应用程序中必须包含运行管理资源申请的代码逻辑,需要按顺序依次申请如下运行管理资源:Device、Context、Stream,确保可以使用这些资源执行运算、管理任务。
2.2.3. 运行管理资源释放:
所有数据处理都结束后,需要依次释放运行管理资源:Stream、Context、Device。
2.2.4. AscendCL去初始化:
有初始化就有去初始化,在确定完成了AscendCL的所有调用(包括运行管理资源释放完成)之后,或者进程退出之前,需调用AscendCL接口实现AscendCL去初始化,调用aclFinalize接口实现AscendCL去初始化。
// 调用acl接口需要
使用acl.h头文件
#include "acl/acl.h"
uint32 t deviceld = 0;
aclrtContext context;
aclrtStream stream;
const char *aclConfigPath ="./src/acl.json";
aclError ret = aclnit(aclConfigPath);
ret = aclrtSetDevice(deviceld);
ret = aclrtCreateContext(&context, deviceld);
ret = aclrtCreateStream(&stream);
// 业务执行
ret = aclrtDestroyStream(stream);
ret = aclrtDestroyContext(context);
ret = aclrtResetDevice(deviceld);
ret = aclFinalize();
2.3. 图片分类入门推理应用开发-编译执行
在运行环境上将应用落地,执行应用,获取推理结果。
具备数据、离线模型、源码和CMake文件后,就可以进行代码的编译与运行了。
1.编译应用之前需要先设置环境变量,配置程序编译依赖的头文件与库文件路径:
export DDK PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU HOST LIB=$DDK PATH/runtime/lib64/stub
2.切换到用于存放编译文件的目录如“build/intermediates/host",执行cmake生成编译文件:
cd build/intermediates/host
cmake ../.././src -DCMAKE CXX COMPILER=g++ -DCMAKE SKIP RPATH=TRUE
3.执行make命令,生成可执行文件main:
4.切换到可执行文件main所在的目录,运行可执行文件: