AI 开放平台

提供适配不同硬件平台的AI模型,探索更多端侧场景应用

基于芯擎SE1000-I部署ViT

芯擎: SE1000-I

此文档将详细讲解如何在 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

在 Sirider S1 开发板上进行推理

在使用周易 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

    • 修改 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 运行推理

  1. 将以下文件传输至 Sirider S1:

    • vit.bin (模型文件)
    • input_3_224_224.bin (照片文件)
    • aipu_test (可执行文件)
    • out/linux/libs (动态库文件夹)
  2. 运行行 aipu_test

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your libs path>
    aipu_test ./vit/vit.bin ./vit/input_3_384_384.bin
  3. 示例输出

    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

vit_input