此文档将详细讲解如何在 Sirider S1 利用 NPU 硬件加速 ViT 模型推理。
文档分为两部分:快速体验和详细教程。
radxa 提供一个开箱即用的Vit目标分类例子,旨在用户可以直接在 Sirider S1 使用“周易”NPU推理 ViT 模型,免去复杂的模型编译和执行代码编译,
这对想快速使用 “周易”NPU 而不想从头编译模型的用户是最佳的选择,如您对完整工作流程感兴趣可以参考 详细教程
生成用于模型输入的文件
python generate_input_binary.py
运行模型推理
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/libs
./aipu_test ./vit/vit.bin ./vit/input_3_384_384.bin
要使用周易 Z2 NPU 部署目标模型,需要分三步走:模型转换,编译推理文件 和 应用层程序设计
Tips:
此过程在 x86 主机上完成,进行模型转换前,请根据 周易 NPU SDK 安装教程
安装周易SDK
并完成 配置 nn-compiler 环境
nn-compiler
可以将 TensorFlow、ONNX 等框架模型转换成可以在周易 NPU 进行硬件加速推理的模型文件
进入 siengine nn-compiler-user-case-example
目录
cd siengine/nn-compiler-user-case-example/Vit
生成用于模型推理的二进制输入文件
python3 generate_input_binary.py
# 输出:./input_3_224_224.bin
(可选) 配置 build.cfg (开箱即用案例已提供)
vim ./build.cfg
构建 NPU 模型文件
aipubuild build.cfg
得到模型文件 vit.bin
tip
如果找不到aipubuild
命令,请将其添加到环境变量:
export PATH=$PATH:/root/.local/bin
在使用周易 Z2 AIPU 推理前需要在 x86 主机进行交叉编译生成用于模型推理的可执行文件 aiputest
,然后拷贝到 Sirider S1 中执行。
安装 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
修改 CMakeLists.txt
中的 UMDSRC
路径变量
cd siengine/nn-runtime-user-case-example
vim CMakeLists.txt
# 示例:更新 SDK 安装路径
set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/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:
vit.bin
(模型文件)input_3_224_224.bin
(照片文件)aipu_test
(可执行文件)out/linux/libs
(动态库文件夹)运行行 aipu_test
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your libs path>
aipu_test ./vit/vit.bin ./vit/input_3_384_384.bin
示例输出
255|se1000:/data/npu/z2test # ./aipu_test ./vit/vit.bin ./vit/input_3_384_384.bin
WARNING: linker: Warning: "/system/lib64/libc++_shared.so" unused DT entry: unknown processor-specific (type 0x70000001 arg 0x0) (ignoring)
usage: ./aipu_test aipu.bin input0.bin
aipu_init_context success
aipu_load_graph_helper success: ./vit/vit.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: 281.9196
idx: 349 fval: 0.6988
idx: 348 fval: 0.2980
idx: 2 fval: 0.0000
idx: 3 fval: 0.0000
idx: 4 fval: 0.0000
...
aipu_deinit_ctx success
这里结果仅显示推理结果的标签值,最大置信度 349
即对应 imagenet1000 中的 bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis