跳到主要内容

NPU 使用

Teflon TFLite delegate 是一款 Mesa 开源用于在 Amlogic A311D SoC 上使用 NPU 进行神经网络硬件加速推理的 Tensorflow Lite 委托加速器

用户若需使用 teflon delegate 进行 NPU 硬件加速神经网络推理,需使用 radxa 提供的 Armbian 6.8.7_xfce 系统, 请根据 安装操作系统 安装此系统

安装 Teflon TFLite delegate

下载预编译好的 delegate 文件

Teflon TFLite delegate 已经预编译好,用户可以直接下载使用

wget https://github.com/zifeng-radxa/zero2pro_NPU_example/releases/download/v1.0/libteflon.so

手动编译(可选)

  • 克隆仓库
git clone https://gitlab.freedesktop.org/tomeu/mesa.git -b teflon-staging --single-branch --depth=1
cd mesa
  • 准备编译环境
sudo apt install -y python3-pip python3.11-venv libdrm-dev libwayland-dev libwayland-egl-backend-dev libx11-dev libxext libxfixes-dev libxcb-glx0-dev libxcb-shm0-dev libx11-xcb-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-present-dev libxshmfence-dev libxxf86vm-dev libxrandr-dev
python3 -m venv .venv
source .venv/bin/activate
pip3 install meson ninja mako pycparser
  • 编译 Teflon
meson setup build -Dgallium-drivers=etnaviv -Dvulkan-drivers= -Dteflon=true
meson compile -C build
  • 编译成功的 libteflon.so 路径
mesa/build/src/gallium/targets/teflon/libteflon.so

使用 Teflon TLite delegate

用户可先参考 TensorFlow Lite delegate 文档和 delegate 使用文档了解 delegate 的工作原理和使用方法, 使用 NPU 加速需以 root 用户登陆运行推理脚本

MobileNet V1 目标识别示例

这里以 MobileNet V1 目标是识别为例子,利用 Teflon delegate 委托 NPU 进行加速推理识别以下图片内容

  • 获取示例代码与模型文件
git clone https://github.com/zifeng-radxa/zero2pro_NPU_example.git
cd zero2pro_NPU_example
wget http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
tar -xvf mobilenet_v1_1.0_224_quant.tgz
  • 配置环境
python3 -m venv .venv
source .venv/bin/activate
pip3 install numpy pillow tflite-runtime
  • 运行示例代码

    将 -e 换成 libteflon.so 路径

python3 classification.py -i ./grace_hopper.bmp -m ./mobilenet_v1_1.0_224_quant.tflite =l labels_mobilenet_quant_v1_224.txt -e ./libteflon.so
(.venv) root@radxa-zero2:~/zero2pro_npu_example# python3 classification.py -i ./grace_hopper.bmp -m ./mobilenet_v1_1.0_224_quant.tflite -l labels_mobilenet_quant_v1_224.txt -e ./libteflon.so
Loading external delegate from ./libteflon.so with args: {}
0.909804: military uniform
0.019608: Windsor tie
0.007843: bulletproof vest
0.007843: mortarboard
0.003922: cornet
time: 6.256ms
  • 对比 CPU 推理速度提高 16 倍
(.venv) root@radxa-zero2:~/zero2pro_npu_example# python3 classification.py -i ./grace_hopper.bmp -m ./mobilenet_v1_1.0_224_quant.tflite -l labels_mobilenet_quant_v1_224.txt
0.917647: military uniform
0.015686: Windsor tie
0.007843: mortarboard
0.007843: bulletproof vest
0.003922: bow tie
time: 101.621ms