cfx · 9月4日 · 陕西

【SiRiderS1芯擎工业开发板测评】开箱体验:S1配套NPU工具链测评

要想成为一款开发者/厂商心目中“优秀”的开发板,除了具备合理的硬件选型、做工和配套硬件资源等硬性条件,还必须拥有成熟可靠的开发环境。S1以AI和NPU作为卖点,这里重点对NPU工具链进行测评。

众所周知,AI/NPU开发工具主体的开发语言是python,大量依赖第三方软件及pip包,如:numpy、tensorflow、pytorch、onnx和onnxruntime等。而开源软件以及pip包之间的版本冲突问题一直在各个NPU厂家中都是老大难问题,如:Qualcxxm aimet和QNN工具在不同系统中存在pip冲突问题、Huawxx的so版本与系统库冲突问题等。

开发者如何能在最短的时间内搭建出一套开发环境,并跑通第一个推理程序,作为衡量NPU工具链易用性的重要指标。
下面以ubuntu 20.04作为开发环境,严格按照开发文档,从0搭建NPU工具链的开发环境。

前置条件: ubuntu 及 正确安装docker
参考链接:https://docs.radxa.com/siride...

1. pull ubuntu:20.04镜像
docker pull ubuntu:20.04

2.创建和启动容器
docker run --privileged -itd -v /root/:/root/wsl_root/ --name zhouyi_z2_2004 ubuntu:20.04 /bin/bash

docker start zhouyi_z2_2004
docker attach zhouyi_z2_2004

3.容器中安装必要的包
apt-get update && apt-get install -y --no-install-recommends build-essential gcc-8 g++-8 ca-certificates curl ffmpeg git wget unzip nodejs npm python3-dev python3-opencv python3-pip libopencv-core-dev libopencv-highgui-dev libopencv-imgproc-dev libopencv-video-dev libopencv-calib3d-dev libopencv-features2d-dev software-properties-common cmake tree

4.下载和安装SDK,安装路径为/zhouyi/
在瑞莎下载站下载周易 Z2 SDK 安装包后解压安装

tar -xvf Zhouyi_Z2.tar.gz
cd Zhouyi_Z2 && bash +x SETUP.SH

提示一直按y
ACCEPT SIENGINE SOFTWARE LICENSE AGREEMENT [Please press y(yes) or type q(quit) to exit]: y
Specify path of install directory : /zhouyi
Directory /zhouyi does not exist. Create? [y/n]: y
Creating directory /zhouyi
SiEngine AIoT Zhouyi Z2 Compass Software Package will install to /zhouyi, Install? [y/n]: y

5.配置SDK和nn-compiler 环境
cd /zhouyi/

root@d852410b2c97:/zhouyi# ll
total 20
drwxr-xr-x 4 root root 4096 Aug 30 09:43 ./
drwxr-xr-x 1 root root 4096 Aug 30 09:43 ../
drwxr-xr-x 3 1002 1002 4096 Mar 27 17:34 AI610-SDK-r1p3-AIoT/
-rw-r--r-- 1 112607633 112600513 412 Apr 2 10:19 README.txt
drwxr-xr-x 4 112607633 112600513 4096 Apr 2 10:19 siengine/

安装依赖的python包
cd AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/Out-Of-Box/out-of-box-nn-compiler
pip3 install -r lib_dependency.txt

配置SDK和nn-compiler环境
source env_setup.sh

**注意:docker环境中aipu命令安装在/root/.local/bin/,需要设置PATH环境变量 export PATH=$PATH:/root/.local/bin/
否则:aipubuild命令无法找到**
root@d852410b2c97:/zhouyi/siengine/nn-compiler-user-case-example/onnx# aipubuild build.cfg
bash: aipubuild: command not found

5.模型编译,生成NPU专有模型

生成量化校准集
cd siengine/nn-compiler-user-case-example/onnx
python3 generate_calibration_data.py

生成用于模型推理的照片文件
python3 generate_input_binary.py

文件在 ./resnet50/input_3_224_224.bin
(可选) 配置 build.cfg (开箱即用案例已提供)
cat ./resnet50/build.cfg

生成 aipu 模型
cd ./restnet50
aipubuild build.cfg

6.安装arm交叉工具链
安装 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 交叉编译工具链

tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
cp -r gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt

7.编译推理的可执行程序
修改cmakelist中,UMD指向的源码路径
cd siengine/nn-runtime-user-case-example

set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd")

实际路径如下: ./../../AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-r1p3-eac0/Linux-driver/driver/umd

编译推理的可执行程序:
mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make

7.上板验证
模型文件: aipu_mlperf_resnet50.bin
图片二进制输入: input_3_224_224.bin 照片文件,
调用NPU的可执行程序:aipu_test
aipu_test依赖的NPU的驱动的动态库:libaipudrv.so / libaipudrv.so.1.3.0

通过readelf命令,我们可以看到aipu_test的依赖关系
0x0000000000000001 (NEEDED) Shared library: [libaipudrv.so.1.3.0]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000006ffffffe (VERNEED) 0x401170
0x000000006fffffff (VERNEEDNUM) 4

ssh方式登录开发版(单板中未安装ssh, 且直接安装apt install ssh存在错误需要手动解决),创建目录/root/aipu
将上述文件拷贝到开发版的/root目录,执行 aipu_test

mkdir /root/aipu && cd /root/aipu
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your libs path>
./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin

8.总结
从ubuntu:20.04拉起,到下载SDK和工具链,最终在开发板中成功执行第一个模型推理程序,花费时间为2小时(包含解决环境变量问题),远低于我最初4小时的预期
不得不对SiRiderS1工程团队在为SDK工具易用性上做的贡献点赞,大大降低了开发者在准备环境耗费的精力和时间。后面针对工具链做更多的测评和分析。

推荐阅读
关注数
9847
内容数
79
搭载基于安谋科技自研“周易”NPU的芯擎科技工业级“龍鹰一号”SE1000-I处理器
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息