CANN

青云1000开发板使用了华为昇腾Ascend 310AI处理器作为自身的CPUNPU,可以享受华为CANN异构计算架构为AI推理带来的极致加速。

简介

CANN

CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,角色和功能类似于NVIDIA CUDA。用户可以在代码中调用CANN提供的编程接口,让程序利用昇腾NPU的算力进行计算。

相关资源

准备安装

确定CANN版本

在安装CANN之前,首先需要确定青云系统所支持的CANN版本。您可以在该表格中查找到不同青云镜像所支持的CANN版本。

本章以Ubuntu 18.04系统(固件版本21.0.4.9)为例,叙述CANN 6.0.1.alpha001的安装流程。

获取用户手册

CANN有着详尽的用户手册与说明文档。确定要安装的CANN版本之后,您可以访问CANN 社区版历史版本仓库,在仓库中找到您所需的CANN版本。

CANN 6.0.1.alpha001为例,您可以在仓库中找到它对应的用户手册。我们将参考该手册进行后续的安装: CANN用户手册

重要概念

CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

简而言之,您可以将CANN理解为一组“工具和程序库”的集合。用户可以:

  • 使用CANN提供的工具来开发、调试自己的深度学习代码与模型

  • 在代码中调用CANN程序库提供的接口,利用NPU进行运算加速

和NVIDIA CUDA类似,CANN的工具和程序库也由开发环境运行环境两部分组成。对于青云开发板来说:

  • 如果您只需要在开发板上训练和推理深度学习模型,不需要进行模型的开发与转换,您可以只在青云上安装CANN的运行环境

  • 如果您既需要在开发板上训练和推理深度学习模型,又需要进行模型的开发与转换,您可以在青云上安装CANN的开发环境

小技巧

对于青云开发板而言,我们推荐您安装CANN的开发环境。这样一来,您可以在开发板中体验到CANN的全部功能。

安装思路

CANN 6.0.1.alpha001为例,在青云开发板中安装CANN开发环境的流程如下图所示。图片来源于用户手册,其中绿色的线路为安装流程,红框是需要执行的关键步骤。

CANN安装流程

在青云中安装CANN开发环境的大致步骤如下:

  1. 下载并准备好CANN的开发环境软件包

  2. 选择为哪一个用户安装CANN开发环境

  3. 为操作系统安装CANN需要的系统依赖包

  4. 准备好CANN需要的Python3环境

  5. 安装CANN开发环境

  6. 激活CANN开发环境

安装CANN

本节我们以Ubuntu 18.04CANN 6.0.1.alpha001为例,演示在青云开发板上为HwHiAiUser用户安装CANN开发环境的流程。您也可以参考该流程和CANN用户手册,安装支持的其它CANN版本和环境。

准备开发环境软件包

参考手册

进入CANN 社区版历史版本仓库,在仓库中找到您所需的CANN版本。在筛选器中勾选AArch64run选项,在软件名称一列中找到含有toolkit关键词的一行,这就是适用于青云的CANN开发环境安装包。 CANN toolkit

安装包下载完毕后,您可以使用MobaXterm作为终端,以HwHiAiUser用户身份登录青云开发板的系统。在MobaXterm左侧边栏中,使用上传按钮或直接拖拽文件,将CANN开发环境安装包上传到青云系统的指定目录下。

如下图所示,CANN开发环境安装包被上传到了/home/HwHiAiUser/目录 CANN上传

上传完毕后,为安装包添加可执行权限

chmod +x CANN开发环境安装包文件
# 如: chmod +x ./Ascend-cann-toolkit_6.0.1_linux-aarch64.run

选择安装用户

参考手册

在本文档中,我们选择只为HwHiAiUser用户安装CANN开发环境(即所谓的用户级安装)。CANN相关的工具和库将被默认安装至/home/HwHiAiUser/Ascend/目录。

安装系统依赖包

参考手册

保持青云开发板的互联网连接,然后为青云的操作系统安装以下软件包

sudo apt update
sudo apt install gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3

配置Python3环境

参考手册

小心

⚠️ 在安装和运行CANN的相关库与工具时,当前环境中必须存在Python3解释器

⚠️ 目前CANN官方支持的Python3解释器版本为:Python3.7 Python3.8 Python3.9

小技巧

如果您只为HwHiAiUser用户安装CANN开发环境,且操作系统中默认的Python3解释器版本不受CANN支持(如Ubuntu 18.04默认的Python3解释器为python3.6),本文推荐您使用虚拟环境来安装CANN。这样可以把CANN所需的Python3解释器系统自身的Python3解释器隔离开来

根据您的需要,为操作系统安装CANN所需的Python3解释器(Python3.7Python3.8Python3.9

# 以Python3.7为例
sudo apt install python3.7-dev

# 也可以同时安装多个版本Python3解释器
# 在虚拟环境中,它们之间不会冲突
# sudo apt install python3.8-dev python3.7-dev

安装虚拟环境管理器virtualenv

sudo apt install virtualenv

新建虚拟环境

作为HwHiAiUser用户,使用以下命令,在/home/HwHiAiUser/目录下新建一个名称为cann的虚拟环境(名称和路径可自定义)。指定刚刚安装的Python3解释器作为虚拟环境中的Python3解释器

# 以Python3.7为例
virtualenv ~/cann -p /usr/bin/python3.7

创建完毕后,/home/HwHiAiUser/目录下会多出cann/目录。目录中存放了一个完整的Python3环境(包括解释器与程序库),并且与系统的Python3环境隔离。

激活cann虚拟环境。此时命令行行首会出现(cann)字样,代表您已经进入cann虚拟环境。该环境中的Python3解释器为隔离的Python3.7

# 激活cann虚拟环境
source ~/cann/bin/activate

# 查看虚拟环境中Python3解释器的位置与版本
which python3 && python3 -V

# 查看虚拟环境中Pip3包管理器的位置与版本
which pip3 && pip3 -V

# 退出虚拟环境
# deactivate

请保持cann虚拟环境的激活状态,在该虚拟环境中安装一系列CANN所需的Python包

pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py

# 如需国内镜像加速
# pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py -i https://pypi.tuna.tsinghua.edu.cn/simple

至此所有准备工作完成,接下来即可安装CANN开发环境本体。

安装CANN开发环境

参考手册

HwHiAiUser的用户身份,保持cann虚拟环境的激活状态,为HwHiAiUser用户安装CANN开发环境

# 先切换到 CANN开发环境安装包文件 所在目录

./CANN开发环境安装包文件 --install
# 如: ./Ascend-cann-toolkit_6.0.1_linux-aarch64.run --install

大约等待十几分钟后,CANN开发环境安装完毕。CANN相关的工具和库将被默认安装至/home/HwHiAiUser/Ascend/目录。


点击查看CANN安装日志(仅供参考)
(cann) HwHiAiUser@davinci-mini:~$ ./Ascend-cann-toolkit_6.0.1_linux-aarch64.run --install
Verifying archive integrity...  100%   SHA256 checksums are OK. All good.
Uncompressing ASCEND_RUN_PACKAGE  100%
[Toolkit] [20231009-08:51:46] [INFO] change umask 0027
[Toolkit] [20231009-08:51:46] [INFO] mkdir /home/HwHiAiUser/var/log/ascend_seclog/
[Toolkit] [20231009-08:51:46] [INFO] touch /home/HwHiAiUser/var/log/ascend_seclog/ascend_toolkit_install.log
[Toolkit] [20231009-08:51:46] [INFO] LogFile:/home/HwHiAiUser/var/log/ascend_seclog/ascend_toolkit_install.log
[Toolkit] [20231009-08:51:46] [INFO] install start
[Toolkit] [20231009-08:51:46] [INFO] The installation path is /home/HwHiAiUser/Ascend.
[Toolkit] [20231009-08:51:46] [INFO] install package CANN-runtime-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-08:52:13] [INFO] CANN-runtime-1.84.15.1.310-linux.aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-08:52:13] [INFO] install package CANN-compiler-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-08:55:56] [INFO] CANN-compiler-1.84.15.1.310-linux.aarch64.run --full --pylocal --quiet --nox11 install success
[Toolkit] [20231009-08:55:56] [INFO] install package CANN-opp-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-08:59:51] [INFO] CANN-opp-1.84.15.1.310-linux.aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-08:59:51] [INFO] install package CANN-toolkit-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-09:03:21] [INFO] CANN-toolkit-1.84.15.1.310-linux.aarch64.run --full --pylocal --quiet --nox11 install success
[Toolkit] [20231009-09:03:21] [INFO] install package CANN-aoe-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-09:03:41] [INFO] CANN-aoe-1.84.15.1.310-linux.aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-09:03:41] [INFO] install package Ascend-mindstudio-toolkit_5.0.0_linux-aarch64.run start
[Toolkit] [20231009-09:04:11] [INFO] Ascend-mindstudio-toolkit_5.0.0_linux-aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-09:04:11] [INFO] install package Ascend-test-ops_6.0.1_linux.run start
[Toolkit] [20231009-09:04:12] [INFO] Ascend-test-ops_6.0.1_linux.run --full --quiet --nox11 install success
[Toolkit] [20231009-09:04:12] [INFO] install package Ascend-pyACL_6.0.1_linux-aarch64.run start
[Toolkit] [20231009-09:04:13] [INFO] Ascend-pyACL_6.0.1_linux-aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-09:04:13] [INFO] install package CANN-ncs-1.84.15.1.310-linux.aarch64.run start
[Toolkit] [20231009-09:04:33] [INFO] CANN-ncs-1.84.15.1.310-linux.aarch64.run --full --quiet --nox11 install success
[Toolkit] [20231009-09:04:34] [INFO] The /home/HwHiAiUser/Ascend/ascend_cann_install.info is written successfully.
[Toolkit] [20231009-09:04:34] [INFO] Please make sure that:
PATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/bin:
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/compiler/ccec_compiler/bin:
LD_LIBRARY_PATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/lib64:
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/lib64/plugin/opskernel:
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/lib64/plugin/nnengine:
PYTHONPATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/python/site-packages:
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe:
ASCEND_AICPU_PATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest:
ASCEND_OPP_PATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/opp:
TOOLCHAIN_HOME includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit:
ASCEND_HOME_PATH includes :
        /home/HwHiAiUser/Ascend/ascend-toolkit/latest:
[Toolkit] [20231009-09:04:34] [INFO] If your service is started using the shell script, you can call the /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh script to configure environment variables. Note that this script can not be executed mannually.
[Toolkit] [20231009-09:04:34] [INFO] Ascend-cann-toolkit_6.0.1_linux-aarch64 install success. The installation path is /home/HwHiAiUser/Ascend.

激活CANN开发环境

小技巧

CANN相关工具依赖于Python3环境(Python3.7Python3.8Python3.9),所以请先确保相关Python3环境已经激活。

HwHiAiUser用户安装好CANN开发环境后,如果需要使用CANN相关工具,执行以下命令激活CANN开发环境

source /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh

CANN开发环境激活后,用户即可使用CANN相关的工具和程序库。

测试运行CANN模型转换工具

atc --help

运行pyACL深度神经网络推理库,测试NPU设备能否正常初始化

# 输出全0则测试正常
python3 -c 'import acl; print(acl.init()); print(acl.rt.set_device(0))'

为方便起见,您可以将自动激活CANN开发环境的命令放置到HwHiAiUser用户shell登录脚本~/.bashrc

# 在 ~/.bashrc 中加入如下几行

# 自动激活CANN开发环境
source /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh

如此操作后,每次以HwHiAiUser用户登录shell时,都会自动激活CANN开发环境。您只需要再手动激活相应的Python3环境,就可以使用CANN的所有功能!

在新环境中使用CANN

在安装并测试完CANN的开发环境后,如果您希望在其它的Python3虚拟环境(而非之前创建的cann虚拟环境)中使用CANN,只需进行如下操作即可:

  1. 按照您的需求,激活您指定的Python3虚拟环境

  2. 为该环境安装CANN所需的Python3包
    pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py

  3. 激活CANN开发环境(如在~/.bashrc中已经激活,则不用再次激活)
    source /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh

完成上述步骤后,您就可以在其它的Python3虚拟环境中使用CANN的功能。

运行样例

在您按照本章内容安装并测试完CANN的开发环境后,本节将尝试在青云开发板上部署基于CANN的深度学习应用。

本节的样例来源于华为的昇腾样例仓

CANN Samples

昇腾样例仓提供了一系列媒体数据处理(DVPP/AIPP)、算子开发与调用(Ascend C)、推理应用开发与部署(AscendCL)等场景的丰富代码样例给开发者进行参考学习,帮助开发者快速入门,进而熟练掌握CANN关键特性使用。

YOLOv7目标检测

样例链接

使用YOLOv7模型对输入图片进行预测推理。在图片上给出物体标注框,类别以及置信度,最后保存。

环境准备

克隆Gitee上最新的昇腾样例仓

git clone https://gitee.com/ascend/samples.git --depth 1

在样例仓库中建立虚拟环境。虚拟环境使用Python3.7作为解释器

cd samples/
virtualenv ./ -p /usr/bin/python3.7

激活虚拟环境

source bin/activate

在当前虚拟环境中安装CANN所需依赖

pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py -i https://pypi.tuna.tsinghua.edu.cn/simple

本样例依赖于昇腾的python-acllite库,该库的源码位于samples/下的inference/acllite/python/目录。将该库所在的目录放入虚拟环境的库搜寻路径中

echo "$PWD/inference/acllite/python/" >> ./lib/python3.7/site-packages/acllite.pth

安装本样例所需的其它依赖

pip3 install opencv-python onnx Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

# opencv-python依赖于libGL.so.1
sudo apt install libgl1

下载测试图片dog.jpg到本样例的数据目录inference/modelInference/sampleYOLOV7NMSONNX/data/

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleYOLOvxWithPostprocessOp/dog.jpg -P inference/modelInference/sampleYOLOV7NMSONNX/data/ --no-check-certificate

可爱的小狗

模型转换

进入本样例的根目录

cd inference/modelInference/sampleYOLOV7NMSONNX/

进入本样例的源码目录,创建ONNX后处理算子postprocess.onnx

cd src/
python3 postProcessOperator.py

进入样例的模型目录,下载yolov7x.onnx模型文件

cd ../model/
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleYOLOvxWithPostprocessOp/yolov7x.onnx --no-check-certificate

下载AIPP模型输入预处理配置aipp.cfg。CANN的AIPP技术可以使用NPU加速图像预处理过程。

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleYOLOvxWithPostprocessOp/aipp.cfg --no-check-certificate

yolov7x.onnx模型和后处理算子转换为适配昇腾310处理器的离线模型(*.om文件)

atc --model=yolov7x.onnx --framework=5 --output=yolov7x --soc_version=Ascend310 --out_nodes="Conv_404:0;Conv_374:0;Conv_344:0" \
--input_shape="images:1,3,640,640" --insert_op_conf=aipp.cfg

atc --model=postprocess.onnx --soc_version=Ascend310 --output=postprocess --framework=5 --input_shape='img_info:1,4'

运行推理

进入本样例的源码目录,运行推理脚本

cd ../src/
mkdir -p ../out/

python3 sampleYOLOV7NMSONNX.py

推理结果图片存放于../out/目录中 Yolov7输出