周易Z2 AIPU
“周易” AIPU 是由安谋中国针对深度学习而自主研发的创新性 AI 专用处理器,它采用了创新性的架构设计,提供完整的硬件和软件生态,并且具有 PPA 最佳平衡。 安谋中国还为“周易” AIPU 的客户提供很多工具来帮助他们进行开发,包括仿真器、编译器和调试器等进行数据的采集、分析。 “周易” AIPU 也支持业界主流的 AI 规模框架,包括 TensorFlow、ONNX 等,未来也将支持更多不同的扩展框架。
“周易” Z2 AIPU 将主要面向中高端安防、智能座舱和 ADAS、边缘服务器等应用场景。
快速例子
radxa 提供一个开箱即用的目标 分类例子,旨在用户可以直接在 sirider s1 使用 AIPU 推理 resnet50 模型,免去复杂的模型编译和执行代码编译, 这对想快速使用 AIPU 而不想从头编译模型的用户是最佳的选择,如您对完整工作流程感兴趣可以参考 周易 Z2 AIPU 使用教程
-
克隆仓库代码
git clone https://github.com/zifeng-radxa/siriders1_NPU_example.git
-
安装依赖
cd siriders1_NPU_example
pip3 install -r requirements.txt -
生成用于模型输入的文件
python3 input_gen.py --img_path <your_image_path>
-
模型推理
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/libs
./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin
周易 Z2 AIPU 使用教程
x86 PC 端安装周易 AIPU SDK
周易 SDK 是一个全栈平台,可为用户提供快速上市的开发和部署能力。
-
准备一个 python3.8 的环境
-
(可选)安装 Anaconda
如果系统中没有安装 Python 3.8(必要版本),或者同时有多个版本的 Python 环境,建议使用 Anaconda 创建新的 Python 3.8 环境
-
安装 Anaconda
在计算机的终端窗口中执行以下命令,检查是否安装 Anaconda,若已安装则可省略此节步骤
$ conda --version
conda 23.10.0如出现 conda: command not found, 则表示未安装 anaconda, 请参考 Anaconda 官网进行安装
-
创建 conda 环境
conda create -n aipu python=3.8
-
进入 aipu conda 环境
conda activate aipu
-
退出环境
conda deactivate
-
-
-
在瑞莎下载站下载周易 Z2 SDK 安装包后解压安装
tar -xvf Zhouyi_Z2.tar.gz
cd Zhouyi_Z2 && bash +x SETUP.SH -
安装后得到的完整 SDK 文件如下
-
AI610-SDK-r1p3-AIoT
: ARM ZhouYi Z2 工具包 -
siengine
: siengine 提供的 ARM ZhouYi Z2 模型编译(nn-compiler-user-case-example)及板子部署(nn-runtime-user-case-example)的 demos
-
-
配置 nn-compiler 环境
cd AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/Out-Of-Box/out-of-box-nn-compiler
pip3 install -r lib_dependency.txt因为此 SDK 不包含模拟功能, 故安装过程会出现安装 AIPUSimProfiler 的报错,可以忽略
若使用 venv 的用户请 在 env_setup.sh 中 pip3 install 部分去掉 --user 选项
source env_setup.sh
x86 PC 端模型转换
nn-compiler 可以将 TensorFlow、ONNX 等框架模型转换成可以在周易 AIPU 进行硬件加速推理的模型文件
此案例中将介绍开箱即用案例:resnet50 目标分类
完整 SDK 文档请参 AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/AI610-DOC-1001-r1p3-eac0
-
进入 siengine nn-compiler-user-case-example 目录
如没配置好 nn-compiler 环境, 请按照 x86 PC 端安装 AIPU SDK进行配置
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 (开箱即用案例已提供)
vim ./resnet50/build.cfg
-
生成 aipu 模型
cd ./restnet50
aipubuild build.cfg在 ./restnet50 中得到 aipu_mlperf_resnet50.bin
提示如果找不到
aipubuild
命令,可尝试export PATH=$PATH:/root/.local/bin
板端使用周易 Z2 推理 AIPU 模型
在使用周易 Z2 AIPU 推理前需要在 x86 主机进行交叉编译生成可执行文件 aiputest
,然后拷贝到 Sirider S1 中执行
在 x86 PC 端交叉编译二进制可执行文件
-
安装 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 -
编译 aiputest
- 修改 UMDSRC 变量
cd siengine/nn-runtime-user-case-example
vim CMakeLists.txt
#set(UMDSRC "${CMAKE_SOURCE_DIR}/../AI610-SDK-${AIPU_VERSION}-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd")
set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd")- 交叉编译
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make编译生成的文件在
siengine/nn-runtime-user-case-example/out/linux/aipu_test
在 Sirider S1 进行板端推理
-
将生成的
aipu_mlperf_resnet50.bin
模型文件,input_3_224_224.bin
照片文件,aipu_test
可执行文件,out/linux/libs
动态库文件夹复制到 Sirider S1 中 -
执行 aipu_test
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your libs path>
./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin(aiot-focal_overlayfs)root@linux:~/ssd# ./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin
usage: ./aipu_test aipu.bin input0.bin
aipu_init_context success
aipu_load_graph_helper success: aipu_mlperf_resnet50.bin
aipu_create_job success
Frame #0
aipu_finish_job success
No profiler data
get output tensor 0 success (1/1)
output_desc zero_point: 0.0000 scale: 5.5835
idx: 637 fval: 21.4919
idx: 749 fval: 19.8800
idx: 415 fval: 16.1189
idx: 412 fval: 15.0443
idx: 791 fval: 14.1488
Frame #1
aipu_finish_job success
No profiler data
get output tensor 0 success (1/1)
output_desc zero_point: 0.0000 scale: 5.5835
idx: 637 fval: 21.4919
idx: 749 fval: 19.8800
idx: 415 fval: 16.1189
idx: 412 fval: 15.0443
idx: 791 fval: 14.1488
aipu_clean_job success
aipu_unload_graph success
aipu_deinit_ctx success两次的推理总时间
real 0m0.043s
user 0m0.008s
sys 0m0.023s这里结果仅显示 推理结果的标签值,最大置信度 637 即对应 imagenet1000 中的
mailbag, postbag