1. NPU开发简介

1.1. 前言

板子 OS NPU 连接方式 RKNPU 支持版本 RKNN Toolkit (Lite) 支持版本
AIO-3399Pro-JD4 Linux USB3.0 1.7.1 1.7.1
AIO-3399ProC Linux PCIE 1.7.1 1.7.1

AIO-3399ProC 开发者需要注意:

NPU推理阶段会与CPU进行数据通信,单次传输数据量少但频率高,但是与USB3.0相比PCIE不适合小文件传输。所以导致使用 “PCIE连接的NPU” 会比使用 “USB3.0方式连接的NPU” 在实际推理速度上慢很多。为了解决这个问题,我们制作了相关PCIE-NPU加速补丁,最终结果是推理速度追平“USB3.0方式连接的NPU”,具体使用方法和注意事项请查看补丁注释。

注意:PCIE-NPU加速补丁默认没有启用,具体启用方法和注意事项请查看补丁注释。

  • PCIE-NPU加速补丁 https://gitlab.com/firefly-linux/kernel/-/commit/892d398b3830c1e1b0560167f1896f38bd7e084a

确认是否启用了PCIE-NUP加速补丁 开发者可以通过以下4个测试项测试是否已经启动了PCIE-NUP加速补丁:

  • 系统能正常启动

  • NPU驱动版本不小于1.7.1

dpkg -l |grep firefly-3399pronpu-driver
  • 查看PCIE_RK1808_OPTIMIZATION的状态为okay

cat /sys/firmware/devicetree/base/PCIE_RK1808_OPTIMIZATION/status
  • NPU使用无报错

1.2. NPU特性

  • 支持 8bit/16bit 运算,运算性能高达 3.0TOPS。

  • 相较于 GPU 作为 AI 运算单元的大型芯片方案,功耗不到 GPU 所需要的 1%。

  • 可直接加载 Caffe / Mxnet / TensorFlow 模型。

  • 提供 AI 开发工具:支持模型快速转换、支持开发板端侧转换 API、支持 TensorFlow / TF Lite / Caffe / ONNX / Darknet 等模型 。

  • 提供 AI 应用开发接口:支持 Android NN API、提供 RKNN 跨平台 API、Linux 支持 TensorFlow 开发。

1.3. 开发流程

NPU开发完整的流程如下图所示:

_images/rknn_development_flow.png

1.3.1. 1. 模型训练

在模型训练阶段,用户根据需求和实际情况选择合适的框架(如Caffe、TensorFlow等)进行训练得到符合需求的模型。也可直接使用已经训练好的模型。

1.3.2. 2. 模型转换

此阶段为通过RKNN Toolkit把模型训练中得到的模型转换为NPU可用的模型。

1.3.3. 3. 程序开发

最后阶段为基于RKNN API或RKNN Tookit的Python API开发程序实现业务逻辑。

此文档主要介绍模型转换和基于RKNN程序开发,不涉及模型训练的内容。