华为Atlas 200DK环境搭建&推理测试
引子
前文已经有一篇,华为服务器Atlas芯片的文章(https://www.cnblogs.com/nick-algorithmer/p/17943216)。熟悉AI的同学们一定知道,除了服务器端端训练推理。AI推理还有一部分是边端推理,各大芯片厂商都有推出边端推理芯片,凑巧,拿到一个一块很老的华为Atlas 200DK板子,那就倒腾下这块板子吧,OK,让我们开始吧。
一、环境搭建
1.1 物理硬件准备
一台x86架构的Linux PC机、USB连接线、网线、一张内存不低于32GB的SD卡、SD卡读卡器。
1.2 软件准备
注:经过多次测验本设备并不兼容1.0.13的固件驱动版本,尽管官网声称Altas 200 DK可以兼容1.0.13版本的固件驱动,但是用该版本的固件驱动烧录系统后开发板子并不能启动。需要选择1.0.12版本,但是官网提供的最低驱动版本为1.0.13,因此需要从网络上自行搜索下载1.0.12版本的固件驱动。这里给出网络下载链接(下面这篇博客中给出的链接):https://blog.csdn.net/QuanAikj2018/article/details/129087514或者从下面的百度网盘下载
百度网盘链接:https://pan.baidu.com/s/1N0qQhIUdjigHt9m8Gg0qfg?pwd=ltxg
提取码:ltxg
1.3 开始刻录开发板的系统
第一步:将装入SD卡的读卡器与用户PC机的USB接口连接。
第二步:在用户PC机中执行如下命令安装qemu-user-static、binfmt-support、yaml、squashfs-tools与交叉编译器。
su – root #切换到root账号
执行如下命令更新源:
apt-get update
执行如下命令安装相关python依赖:
pip3 install pyyaml
apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
第三步:在用户PC机中以root用户执行如下命令创建制卡工作目录。
mkdir $HOME/mksd
制卡目录可任意指定。
将软件包准备获取的Ubuntu操作系统镜像包、开发者板驱动包上传到制卡工作目录中(例如:“$HOME/mksd”)。
在制卡工作目录下(例如:“$HOME/mksd”)执行如下命令获取制卡脚本。
下载制卡入口脚本“make_sd_card.py”。
从gitee下载:
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_sd_card.py
从github下载:
wget https://raw.githubusercontent.com/Ascend/tools/master/makesd/generic_script/make_sd_card.py
说明:“NETWORK_CARD_DEFAULT_IP”:NIC网卡的IP地址,默认值“192.168.0.2”。“USB_CARD_DEFAULT_IP”:USB网卡的IP地址,默认值“192.168.1.2”。
执行制卡脚本。
以root用户执行如下命令查找SD卡所在的USB设备名称。
fdisk -l
例如,SD卡所在USB设备名称为“/dev/sda”,可通过插拔SD卡的方式确定设备名称。
运行SD制卡脚本“make_sd_card.py”。
python3 make_sd_card.py local /dev/sda
“local”表示使用本地方式制作SD卡。
“/dev/sda”为SD卡所在的USB设备名称。
如图1所示表示制卡成功。
制卡成功后,将SD卡从读卡器取出并插入Atlas 200 DK开发者板卡槽。上电Atlas 200 DK开发者板。开发板四个灯都亮证明系统刻录成功。
1.4 网络配置
提前装好PC机的USB网卡驱动,然后将usb与开发板连接。Atlas 200 DK提供了USB网卡和NIC网卡,其中USB网卡的默认IP地址为“192.168.1.2”,NIC网卡的默认IP地址为“192.168.0.2”,用户可以通过这两个网卡实现与PC机的通信,并把Atlas 200 DK接入互联网。
1.4.1 安装PC机的USB网卡驱动
Ubuntu操作系统为通过Windows操作系统上的虚拟机安装的场景下,需要在Windows操作系统上安装USB网卡驱动,即RNDIS(Remote Network Driver Interface Specification)驱动,否则Atlas 200 DK通过USB连接Ubuntu所在的Windows主机时,在Ubuntu操作系统中无法识别Atlas 200 DK的USB虚拟网卡。
在“计算机管理”操作界面中选择“设备管理器 >其他设备”,如下图所示,RNDIS为未识别状态。
右键单击“RNDIS”,选择“更新驱动程序(P)”。
在弹出的“更新驱动程序 - RNDIS窗口”中选择“浏览我的计算机以查找驱动程序软件(R)”,然后选择“让我从计算机上的可用驱动程序列表中选取(L)”,单击“下一步(N)”。
在“常见硬件类型”列表中选择“网络适配器”,单击“下一步(N)”。
在“选择要为此硬件安装的设备驱动程序”界面中选择“Microsoft”厂商的“USB RNDIS6适配器”。
单击“下一步”,在弹出的“更新驱动程序警告”窗口选择“是”。
返回“设备管理器 > 网络适配器”,可看到已经正常显示了USB RNDIS6适配器的驱动。
1.4.2 配置网络连接
Atlas 200 DK与PC机分别通过USB连线与网线进行连接,其中USB方式的连接,用于将PC机与Atlas 200 DK进行通信,从而可以从PC机上SSH登录到Atlas 200 DK;网线连接用于Atlas 200 DK共享PC机网络,Atlas 200 DK eth0的网关地址需要与PC机中与Atlas 200 DK相连的NIC网卡的IP地址保持一致,将PC机上网络共享给连接Atlas 200 DK的NIC网卡,则Atlas 200 DK即可接入互联网。
配置示例如下图所示:
用USB连接线将Atlas 200 DK与PC机连接,PC机的“网络连接”面板会新增‘本地连接’名称为‘USB RNDIS6适配器’
配置USB虚拟网卡的IP地址,IP地址需要与Atlas 200 DK的USB网卡的默认IP地址在同一网段。Atlas 200 DK的USB网卡默认IP为“192.168.1.2”,例如配置PC机的USB虚拟网卡的IP地址为“192.168.1.101”,如下图所示:
然后SSH连接开发板子,地址192.168.1.2 账号:HwHiAiUser 密码:Mind@123
SSH登录进开发板之后,配置Atlas 200 DK的eth0网卡的网关。
Atlas 200 DK中eth0网卡的网关与eth0 IP地址在同一网段即可,例如Atlas 200 DK的eth0的默认IP地址为“192.168.0.2”,则此处可以配置eth0的网关为“192.168.0.101”。(说明:Atlas 200 DK通过网络共享接入网络的方式,数据走eth0,然后通过网关访问网络,所以需要确保eth0的IP地址能够访问网关)
配置方式如下:
在PC机上以SSH方式登录Atlas 200 DK。
ssh HwHiAiUser@192.168.1.2
切换到root用户。
su - root
配置eth0的网关地址。
vi /etc/netplan/01-netcfg.yaml
配置示例如下图所示:
执行如下命令重启网络服务。
netplan apply
之后,在PC侧进行网络配置,将网络共享给Atlas 200 DK。用网线线将Atlas 200 DK与PC机连接,PC机的“网络连接”面板会新增‘以太网’,这个网卡就是连接Atlas 200 DK的网卡。
右键单击网卡“Ethernet”,然后选择“Properties > Sharing”,按照下图所示进行配置。
修改“以太网”的IP地址为Atlas 200 DK eth0网关的IP地址
经过上面的配置,Atlas 200 DK中eth0的IP地址“192.168.0.2”与网关“192.168.0.101”是互通的。PC机上可以接入互联网的“Ethernet”网卡将网络共享给了网关“192.168.0.101”,则该网关可以接入互联网。Atlas 200 DK需要联网时,通过域名解析,会自动选择请求的出口到网关,便可以接入互联网了。至此,Atlas 200 DK已可以接入互联网。重新登录开发板,执行ping命令可以看到开发板子已经接入互联网。
1.5 安装CANN
CANN版本必须与固件驱动版本保持一致(驱动与CANN版本的配套关系请参见版本配套说明:https://gitee.com/ascend/tools/blob/master/makesd/Version_Mapping_CN.md)
由于我们安装的固件驱动版本是1.0.12,而官网提供的最低版本为1.0.13,因此与1.0.12固件驱动版本对应的CANN版本官网也并未提供,我们还得自己从网络上寻找下载链接。这里给出网络下载链接(下面这篇博客中给出的链接):https://blog.csdn.net/QuanAikj2018/article/details/129087514或者从下面的百度网盘链接下载:https://pan.baidu.com/s/11HmGssvr5p-c8DOHKMuT6Q?pwd=sm49
提取码:sm49
由于CANN的安装。要求的python开发环境(要求python3.7.0~3.7.11、python3.8.0~3.8.11和python3.9.0~3.9.7)而安装ubuntu18.04默认会安装Python3.6因此需要卸载不符合版本的python,重新安装python3.7.x或者python3.8.x或者python3.9.x
1.5.1 卸载python
apt换源编译安装Python3.7,首先检查系统中是否安装了python依赖
安装完python之后,需要通过pip安装cann toolkit的必要依赖
1.5.2 安装Ascend-cann-toolkit
将下载好的Ascend-cann-toolkit上传到开发板的任意目录
CANN安装好之后还需要配置环境变量
编译流媒体运行依赖文件
1.6 项目演示---基于Resnet50的图片分类应用
案例地址:git clone https://gitee.com/ascend/samples.git
项目介绍:以ResNet50网络模型为例,演示如何通过模型转换使能静态AIPP功能,使能AIPP功能后,若实际提供给模型推理的测试图片不满足要求(包括图片格式,图片尺寸等),经过模型转换后,会输出满足模型要求的图片,并将该信息固化到转换后的离线模型中(模型转换后AIPP功能会以aipp算子形式插入离线模型中)。
样例输入:图片。
样例输出:打屏显示置信度TOP5的类别标识、置信度信息和相应的类别信息。
获取源码包
cd ${HOME}
git clone https://gitee.com/ascend/samples.git
第三方依赖安装 opencv
执行以下命令安装opencv-python。
pip3 install opencv-python
执行以下命令安装numpy。
pip3 install numpy
样例运行
数据准备
请从以下链接获取该样例的输入图片,放在data目录下。
cd $HOME/samples/inference/modelInference/sampleResnetAIPP/python/data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
ATC模型转换
将ResNet-50原始模型转换为适配昇腾310处理器的离线模型(*.om文件),放在model路径下。
# 在这里直接给出原始模型下载及模型转换命令。
cd $HOME/samples/inference/modelInference/sampleResnetAIPP/python/model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50_CV/aipp.cfg
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310 --insert_op_conf=aipp.cfg
样例运行
设置环境变量,配置程序编译依赖的头文件与库文件路径。“$HOME/Ascend”替换“Ascend-cann-toolkit”包的实际安装路径。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
执行运行脚本,开始样例运行。
bash sample_run.sh
样例结果展示
执行成功后,在屏幕上显示置信度top5的相关信息如下,提示信息中的label表示类别标识、confidence表示该类别的置信度,class表示对应的类别。
======== top5 inference results: =============
label:162 confidence:0.902194 class:beaglebeagle,
label:161 confidence:0.096588 class:basset houndbasset hound,
label:166 confidence:0.000631 class:Walker foxhoundWalker foxhound,
label:167 confidence:0.000447 class:English foxhoundEnglish foxhound,
label:163 confidence:0.000056 class:sleuthhoundsleuthhound,
*****run finish******