1 昇腾AI解决方案介绍

视频 课程地址

1.1 华为全栈全场景

\\\"image-20201009163511603\\\"

1.2 Ascend系列处理器

\\\"image-20201009164003988\\\"

310处理器用在 推理场景 910处理器用在 训练场景

1.3 Atlas系列产品

\\\"image-20201009164453316\\\"

\\\"image-20201009165033943\\\"

2 环境部署 Atlas200DK

视频 课程地址

参考 Atlas200DK分设系列第一章–20.0.RC1版本安装指南

2.1 初见开发板

\\\"image-20201009170733921\\\"

2.2 开发 运行环境搭建总览 2.2.1 安装ubuntu18.04 2.2.2 配置ubuntu环境 用户权限配置

普通用户安装开发套件 需要有sudo权限 所以首先需要给普通用户配置权限。

切换为root用户。
su root

给sudoer文件配置写权限 并打开该文件。
chmod u w /etc/sudoers
vi /etc/sudoers

在该文件“ # User privilege specification”下面增加如下内容

\\\"sudoers\\\"

其中 ascend为开发环境种普通用户用户名 需要根据自己的环境修改。

完成后 执行以下命令取消“ /etc/sudoers”文件的写权限。

sudo chmod u-w /etc/sudoers

换源

参考 Ubuntu 18.04 换国内源

配置密码sudo passwd rootsu root

配置apt源

cd /etc/aptcp sources.list sources.list.bakvi sources.list或者 更改只读文件sudo gedit /etc/apt/sources.list 

复制粘贴国内源 保存

阿里源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
sudo apt-get updatesudo apt-get upgrade

配置pip源

ctrl h 显示 .pip文件夹

touch pip.conf

将如下内容填写到pip.conf文件中

[global]index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装环境依赖

安装相关apt依赖

sudo apt-get install -y gcc make cmake unzip zlib1g zlib1g-dev libsqlite3-dev openssl libssl-dev libffi-dev pciutils net-tools g -5-aarch64-linux-gnu

安装python环境:

下载python3.7.5源码包并解压。

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgztar -zxvf Python-3.7.5.tgz

进入解压后的文件夹 执行配置、编译和安装命令。

cd Python-3.7.5./configure --prefix /usr/local/python3.7.5 --enable-sharedmake -j8sudo make install

执行以下命令将so拷贝到lib中 并设置软链接。

sudo cp /usr/local/python3.7.5/lib/libpython3.7m.so.1.0 /usr/libsudo ln -s /usr/local/python3.7.5/bin/python3 /usr/bin/python3.7sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3.7sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/bin/python3.7.5sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3.7.5

执行以下命令 安装环境所需的相关pip依赖。

pip3.7.5 install attrs psutil decorator numpy protobuf 3.11.3 scipy sympy cffi grpcio grpcio-tools requests --user
安装其他

切换为root用户 并安装VIM。

su rootapt-get install vim
2.3 开发/运行环境部署手工方式

参考 Atlas 200 DK 系列 – 快速搭建开发环境

\\\"image-20201015111527216\\\"

2.3.1 部署开发环境 安装toolkit开发工具包

如下图 下载开发环境所需要的两个toolkit包。

下载链接

\\\"img\\\"

将包放置到开发环境普通用户的$HOME目录下。

执行以下命令 给run包增加可执行权限。
chmod 755 \\\\*.run

执行以下命令 安装toolkit包。

./Ascend-Toolkit-20.0.RC1-arm64-linux_gcc7.3.0.run --install./Ascend-Toolkit-20.0.RC1-x86_64-linux_gcc7.3.0.run --install
安装mindstudio

下载链接

\\\"image-20201015203421670\\\"

将压缩包放置到开发环境普通用户的$HOME目录下。并执行以下命令 安装Mindstudio。

cd $HOMEtar -zxvf mindstudio.tar.gzcd MindStudio-ubuntu/bin./Mindstudio.sh

注 运行过程中会有红字提示需要继续安装的软件包 安装完成后重新执行./Mindstudio运行即可

\\\"image-20201015205147644\\\"

./Mindstudio.sh

\\\"image-20201015214830662\\\"

2.3.1 部署运行环境

运行环境需要通过制作SD卡 将开发者板运行代码和系统程序烧写到开发者板上 从而搭建的。所以一切的起点就是安装SD卡。

注 安装SD卡需要在本地环境中操作 也就是以下步骤是在用来做开发环境的虚拟机环境中操作的

安装SD卡系统 下载制卡需要的软件包

\\\"package\\\"

下载地址

下载ubuntu-server 和 制卡脚本

在本地环境普通用户 以ascend用户为例 的$HOME目录下执行以下命令 下载tools仓代码。

如果没有安装git 执行安装gitsudo apt-get install git git clone https://gitee.com/ascend/tools.git执行以下命令 进入C73制卡目录。cd $HOME/tools/makesd/for_1.7x.0.0/

执行以下命令下载ubuntu18.04-server-arm.iso镜像 版本最好和虚拟机桌面版本一致 。

wget http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ubuntu-18.04.5-server-arm64.iso

注 下载的 ubuntu-18.04.5-server-arm64.iso 可能显示404未连接 需要更改成已有的新版本

下载完成后 执行以下命令 给脚本和iso镜像加权限。
chmod 755 make_sd_card.py make_ubuntu_sd.sh ubuntu-18.04.4-server-arm64.iso

执行如下命令安装相关纸卡需要的相关python依赖
pip3 install pyyaml

执行如下命令安装相关的apt依赖
sudo apt-get install qemu-user-static binfmt-support python3-yaml gcc-aarch64-linux-gnu g -aarch64-linux-gnu

将之前下载的制卡所需包放置到该目录 普通用户$HOME/tools/makesd/for_1.7x.0.0 下。

\\\"image-20201016152113580\\\"

将插有SD卡的读卡器连接Ubuntu服务器 制作SD卡

执行以下命令 切换root用户 准备制卡。
su root

执行以下命令 执行脚本准备制卡
python3 make_sd_card.py local /dev/sdb
说明 /dev/sdb 是SD卡的设备名 可以在root用户下执行fdisk -l查看。

\\\"image-20201016152053780\\\"

如图 制卡过程中 提示是否继续安装 输入Y。
等待约7min 提示Make SD Card successfully!,则制卡成功。

上电Atlas 200DK开发板。
将制好的卡放入Atlas 200DK开发板 上电后连接Ubuntu服务器。
注 开发板升级过程中会有两个灯闪烁 当四个灯常亮时即为升级成功 升级过程约5-10min

切换为普通用户
命令行中执行以下命令 退出root用户 切换为普通用户。
exit

连接开发者板

开发板通过usb和虚拟机相连 执行以下命令可以查看到虚拟网卡。
ifconfig

ascend ubuntu:~$ ifconfigens33: flags 4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet 192.168.158.134 netmask 255.255.255.0 broadcast 192.168.158.255 inet6 fe80::636d:deb2:479e:8276 prefixlen 64 scopeid 0x20 link  ether 00:0c:29:88:58:58 txqueuelen 1000 (Ethernet) RX packets 1740884 bytes 1922963470 (1.9 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 492977 bytes 494438610 (494.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens35u1: flags 4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet6 fe80::c806:82ff:febe:557a prefixlen 64 scopeid 0x20 link  ether ca:06:82:be:55:7a txqueuelen 1000 (Ethernet) RX packets 847 bytes 608643 (608.6 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1532 bytes 713093 (713.0 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags 73 UP,LOOPBACK,RUNNING mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 host  loop txqueuelen 1000 (Local Loopback) RX packets 194631 bytes 2433862852 (2.4 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 194631 bytes 2433862852 (2.4 GB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

其中ens35u1就是虚拟网卡。

配置虚拟网卡ip
由于通过USB连接时 开发板默认IP为192.168.1.2 所以这里我们只需要配置虚拟网卡ip为192.168.1.x即可。可按照如下命令进行netplan设置。

打开netplan的配置文件 按照以下格式进行配置填写。
vi /etc/netplan/01-network-manager-all.yaml

\\\"image-20201016153334282\\\"

# Let NetworkManager manage all devices on this systemnetwork: version: 2 renderer: NetworkManager ethernets: ens35u1: #配置的网卡名称,使用ifconfig -a查看得到 dhcp4: no #dhcp4关闭 addresses: [192.168.1.223/8] #设置本机IP及掩码 gateway4: 255.255.255.0 #设置网关 nameservers: addresses: [114.114.114.114] 

配置完成后执行以下命令 使配置生效。
netplan apply

执行以下命令切换回普通用户。
exit

如下图所示 再使用ifconfig查看 此时已经有ip了。

\\\"img\\\"

登录开发板
在普通用户下通过ssh指令 登录开发板 密码为Mind 123 。
ssh HwHiAiUser 192.168.1.2

将动态链接库路径 添加到 ldconfig 文件中。
切换到root用户下搜索 libascendcl.so 所在的路径 添加到vim mind_so.conf

su rootfind / -name libascendcl.socd /etc/ld.so.conf.d添加路径到此文件中vim mind_so.conf添加完成后 执行 ldconfig执行以下命令 退出开发板。

\\\"image-20201016154317103\\\"

\\\"image-20201016155047649\\\"

2.4 MindStudio基本使用

\\\"image-20201015155912841\\\"

tpe算子

3 环境搭建验证 3.1 设置编译环境

打开Mind Studio 选择Classification(resnet50)。然后选择Finish 工程创建成功

\\\"image-20201016105814854\\\"

\\\"img\\\"

\\\"img\\\"

MyAPP 目录结构如下所示

├── 工程名│ ├── .idea //IntelliJ IDEA自动创建的 用于存放项目的配置信息。│ ├── build│ │ ├──cmake //存放cmake依赖文件│ ├── caffe_model│ │ ├── resnet50.prototxt //resnet50网络的模型文件│ ├── data│ │ ├── dog1_1024_683.jpg //测试数据│ │ ├── dog2_1024_683.jpg //测试数据│ ├── inc│ │ ├── model_process.h //声明模型处理相关函数的头文件│ │ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件│ │ ├── utils.h //声明公共函数 例如 文件读取函数 的头文件│ ├── script│ │ ├── transferPic.py //将*.jpg转换为*.bin 同时将图片从1024*683的分辨率缩放为224*224│ ├── src│ │ ├── acl.json //系统初始化的配置文件│ │ ├── CMakeLists.txt //编译脚本│ │ ├── main.cpp //主函数 图片分类功能的实现文件│ │ ├── model_process.cpp //模型处理相关函数的实现文件│ │ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文│ ├── utils.cpp //公共函数 例如 文件读取函数 的实现文件│ ├── .project //工程信息文件 包含工程类型、工程描述、运行目标设备类型、 ADK版本号等│ ├── CMakeLists.txt //编译脚本 调用src目录下的CMakeLists文件│ ├── 工程名.iml //IntelliJ IDEA自动创建的模块文件 用于Java应用开发 存储一些模块开发相关的信息。

命令行中 执行以下命令 在普通用户家目录下执行以下命令下载权重文件。

wget https://obs-model-ascend.obs.cn-east-2.myhuaweicloud.com/resnet50/resnet50.caffemodel
3.2 模型转换

将原始网络模型转换为适配昇腾AI处理器的模型。

\\\"在这里插入图片描述\\\"

Model File选择当前工程的caffe_model目录下的resnet50.prototxtWeight File选择刚才下载的权重文件。

\\\"modelconvert1\\\"

Configure Input and Output页面中 “Input Type” 配置为FP16 “ Output
Type” 配置为FP32。

\\\"modelconvert2\\\"

关闭Data Pre-processing

\\\"modelconvert3\\\"

Mindstudio加载转换好的om模型。

转换完成后 模型会生成在 $HOME/modelzoo/resnet50/device 目录下,此时在Mindstudio对应工程上点击鼠标右键 选择Add Model 并选择此目录下的resnet50模型即可。

此时 工程的model文件夹下就会有对应的om模型了。

\\\"在这里插入图片描述\\\"

\\\"add

3.3 添加图片文件

命令行中 执行以下命令在普通用户下切换到工程所在目录。
默认为“ ~/AscendProject/工程名/data” 请根据实际情况替换。
cd ~/AscendProject/MyApp1/data

执行transferPic.py脚本
脚本是将*.jpg转换为*.bin 同时将图片从1024683的分辨率缩放为224224。在data目录下生成2个*.bin文件。*

python3.7.5 ../script/transferPic.py

在Mind Studio工具界面 单击刷新工程目录的图标 刷新后 在工具界面的“ 工
程名/data”目录下直接查看.bin文件。 3.4 编译和运行 编译

在Mindstudio的工具栏中点击Build Edit Build Configuration。选择Target OS 为Centos7.6。

\\\"targent\\\"

之后点击Build Build Build Configuration 会在目录下生成build和out文件夹。

运行

Mindstudio配置开发板RC连接。
注 此时默认开发板已经连接到开发环境了
在Mind Studio工具的工具栏中找到Tools按钮 单机Device Manager。
点击Device Manager界面右上方的 “ ” 按钮 填写Host IP为开发者板ip USB连接默认为192.168.1.2 点击OK。

\\\"Device

\\\"Connectivity

单击 Run Run ‘MyApp1’ 如下图红框 可执行程序已经在开发者板执行 并且结果也打印在日志中。

\\\"image-20201016164817322\\\"