Ascend 310 AI处理器上使用AIR模型进行推理
概述
Ascend 310是面向边缘场景的高能效高集成度AI处理器。Atlas 200开发者套件又称Atlas 200 Developer Kit(以下简称Atlas 200 DK),是以Atlas 200 AI加速模块为核心的开发者板形态的终端类产品,集成了海思Ascend 310 AI处理器,可以实现图像、视频等多种数据分析与推理计算,可广泛用于智能监控、机器人、无人机、视频服务器等场景。
本教程介绍如何在Atlas 200 DK上使用MindSpore基于AIR模型文件执行推理,主要包括以下流程:
开发环境准备,包括制作Atlas 200 DK的SD卡 、配置Python环境和刷配套开发软件包。
导出AIR模型文件,这里以ResNet-50模型为例。
使用ATC工具将AIR模型文件转成OM模型。
编译推理代码,生成可执行
main
文件。加载保存的OM模型,执行推理并查看结果。
你可以在这里找到完整可运行的样例代码:https://gitee.com/mindspore/docs/tree/r1.7/docs/sample_code/acl_resnet50_sample 。
开发环境准备
硬件准备
一个操作系统为Ubuntu的服务器或PC机,用于为Atlas 200 DK制作SD卡启动盘和开发环境部署。
一张SD卡,建议容量不低于16G。
软件包准备
配置开发环境需要的脚本和软件包如下5类,共7个文件。
制卡入口脚本:make_sd_card.py。
制作SD卡操作系统脚本:make_ubuntu_sd.sh。
Ubuntu操作系统镜像包:ubuntu-18.04.xx-server-arm64.iso,如果点击下载不成功,请尝试复制链接地址后下载。
开发者板驱动包与运行包:
Ascend310-driver-*{software version}*-ubuntu18.04.aarch64-minirc.tar.gz
Ascend310-aicpu_kernels-*{software version}*-minirc.tar.gz
Ascend-acllib-*{software version}*-ubuntu18.04.aarch64-minirc.run
安装开发套件包:
Ascend-Toolkit-*{version}*-arm64-linux_gcc7.3.0.run
其中,
前3项可以参考Atlas 200 DK 开发者套件使用指南获取。
其余软件包建议从固件与驱动中获取,在该页面中选择产品系列和产品型号为
Atlas 200 DK
,选中需要的文件,即可下载。
制作SD卡
读卡器通过USB与Ubuntu服务器连接,通过制卡脚本制作SD卡。具体操作参见操作步骤。
连接Atlas 200 DK开发板与Ubuntu服务器
Atlas 200 DK开发者板支持通过USB端口或者网线与Ubuntu服务器进行连接。具体操作参见连接Atlas 200 DK开发者板与Ubuntu服务器。
配置Python环境
安装Python以及gcc等软件,具体操作参见安装依赖。
安装开发套件包
安装开发套件包Ascend-Toolkit-*{version}*-arm64-linux_gcc7.3.0.run
,具体操作参见安装开发套件包。
推理目录结构介绍
创建目录放置推理代码工程,例如/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1/acllib_linux.arm64/sample/acl_execute_model/acl_resnet50_sample
,其中inc
、src
、test_data
可以从官网示例下载样例代码获取,model
目录用于存放接下来导出的AIR
模型文件和转换后的OM
模型文件,out
目录用于存放执行编译生成的可执行文件和输出结果目录,推理代码工程目录结构如下:
└─acl_resnet50_sample
├── inc
│ ├── model_process.h //声明资源初始化/销毁相关函数的头文件
│ ├── sample_process.h //声明模型处理相关函数的头文件
│ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件
├── model
│ ├── resnet50_export.air //AIR模型文件
│ ├── resnet50_export.om //转换后的OM模型文件
├── src
│ ├── acl.json //系统初始化的配置文件
│ ├── CMakeLists.txt //编译脚本
│ ├── main.cpp //主函数,图片分类功能的实现文件
│ ├── model_process.cpp //模型处理相关函数的实现文件
│ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件
│ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件
├── test_data
│ ├── test_data_1x3x224x224_1.bin //输入样本数据1
│ ├── test_data_1x3x224x224_2.bin //输入样本数据2
├── out
│ ├── main //编译生成的可执行文件
│ ├── result //输出结果目录
输出结果目录
acl_resnet50_sample/out/result
需先创建好再执行推理操作。
导出AIR模型文件
在Ascend 910的机器上训练好目标网络,并保存为CheckPoint文件,通过网络和CheckPoint文件导出对应的AIR格式模型文件,导出流程参见导出AIR格式文件。
这里提供使用ResNet-50模型导出的示例AIR文件resnet50_export.air。
将AIR模型文件转成OM模型
登录Atlas 200 DK开发者板环境,创建model
目录放置AIR文件resnet50_export.air
,例如/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1/acllib_linux.arm64/sample/acl_execute_model/acl_resnet50_sample/model
,并进入该路径下,设置如下环境变量。其中,install_path
需指定为实际安装路径。
export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1
export PATH=/usr/local/python3.7.5/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH
export PYTHONPATH=${install_path}/atc/python/site-packages/te:${install_path}/atc/python/site-packages/topi:$PYTHONPATH
export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH
export ASCEND_OPP_PATH=${install_path}/opp
以resnet50_export.air
为例,执行如下命令进行模型转换,在当前目录生成resnet50_export.om
文件。
/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1/atc/bin/atc --framework=1 --model=./resnet50_export.air --output=./resnet50_export --input_format=NCHW --soc_version=Ascend310
其中:
--model
:原始模型文件的路径。--output
:转换得到的OM模型文件的路径。--input_format
:输入数据格式。
ATC工具详细资料可在昇腾社区开发者文档中选择相应CANN版本后,查找《ATC工具使用指南》章节查看。
编译推理代码
进入工程目录acl_resnet50_sample
,设置如下环境变量:
export DDK_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1
export NPU_HOST_LIB=/home/HwHiAiUser/Ascend/ascend-toolkit/20.0.RC1/acllib_linux.arm64/lib64/stub/
CMakeLists.txt
文件中acllib
包的include
的目录需要指定正确,否则会报acl/acl.h
找不到的错误。CMakeLists.txt
文件中指定include
目录的代码位置如下,如果与实际安装目录不符,需要修改。
...
#Header path
include_directories(
${INC_PATH}/acllib_linux.arm64/include/
../
)
...
执行如下命令创建编译目录:
mkdir -p build/intermediates/minirc
然后切换至编译目录:
cd build/intermediates/minirc
执行cmake
命令:
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
再执行make
命令编译即可。
make
编译完成后,在acl_resnet50_sample/out
下会生成可执行main
文件。
执行推理并查看结果
将生成的OM模型文件resnet50_export.om
拷贝到acl_resnet50_sample/out
目录下(和可执行main
文件同路径),并确认acl_resnet50_sample/test_data
目录中已经准备好输入数据样本,就可以执行推理了。
值得注意的是,需要设置如下环境变量,否则会导致推理不成功。
export LD_LIBRARY_PATH=/home/HwHiAiUser/Ascend/acllib/lib64/
进入到acl_resnet50_sample/out
目录下,如果当前目录下result
目录不存在,需要执行mkdir result
命令创建该目录,然后执行如下命令进行推理。
./main ./resnet50_export.om ../test_data
执行成功后,可以看到推理结果如下,打印了top5
的概率标签,并且输出结果会以.bin
文件的格式保存在acl_resnet50_sample/out/result
目录中。
[INFO] acl init success
[INFO] open device 0 success
[INFO] create context success
[INFO] create stream success
[INFO] get run mode success
[INFO] load model ./resnet50_export.om success
[INFO] create model description success
[INFO] create model output success
[INFO] start to process file:../test_data/test_data_1x3x224x224_1.bin
[INFO] model execute success
[INFO] top 1: index[2] value[0.941406]
[INFO] top 2: index[3] value[0.291992]
[INFO] top 3: index[1] value[0.067139]
[INFO] top 4: index[0] value[0.013519]
[INFO] top 5: index[4] value[-0.226685]
[INFO] output data success
[INFO] dump data success
[INFO] start to process file:../test_data/test_data_1x3x224x224_2.bin
[INFO] model execute success
[INFO] top 1: index[2] value[0.946289]
[INFO] top 2: index[3] value[0.296143]
[INFO] top 3: index[1] value[0.072083]
[INFO] top 4: index[0] value[0.014549]
[INFO] top 5: index[4] value[-0.225098]
[INFO] output data success
[INFO] dump data success
[INFO] unload model success, modelId is 1
[INFO] execute sample success
[INFO] end to destroy stream
[INFO] end to destroy context
[INFO] end to reset device is 0
[INFO] end to finalize acl