【端侧AI系列】入坑篇–瑞芯微RV1126及RKNN

RV1126

一直想业余学习学习端侧AI,刚好前段时间从朋友那弄了一套RV1126的硬件。
开始这一切的前提条件是软硬件都已调通OK,可以正常使用的板子,这里主要涉及RKNN及其应用,不涉及硬件驱动调试及系统调试

RV1126简介

RV1126基于四核arm Cortex A7 32位内核,集成NEON和FPU。每个核心都有一个32KB I-cache和32KB D-cache以及 512KB 的共用 二级缓存。内置2.0Tops神经网络处理器NPU支持 INT8/INT16 混合操作,算力强大,实现AI运算的功耗不及所需GPU的10%。配套AI算法工具完善,支持Tensorflow、Pytorch、Caffe、MxNet、DarkNet、ONNX等主流AI框架直接转换和部署

RV1126芯片架构.png

rknpu驱动

顾名思义,即NPU的驱动,它包含了NPU驱动、API接口及示例等。

Rockchip的NPU有几套,适用于RK1808/RK1806系列和RV1109/RV1126系列的是:
https://github.com/rockchip-linux/rknpu

RV1109/RV1126驱动:

  • linux-armhf-puma: RV1109/RV1126 full driver
  • linux-armhf-puma-mini: RV1109/RV1126 mini driver

NPU full driver与mini driver的区别

主要包含以下几点:

  • Mini driver只支持预编译的rknn模型,如果跑非预编译模型,会出现 RKNN_ERR_MODEL_INVALID的错误,从1.6.0开始,会返回RKNN_ERR_NON_PRE_COMPILED_MODEL_ON_MINI_DRIVER的错误;
  • Full driver支持RKNN Toolkit的联机调试功能,mini driver不支持;
  • Mini driver 库大小比full driver小很多,以RV1109/RV1126 1.6.0驱动为例,full driver大小为87MB,mini driver大小为7.1MB,可以有效的节省flash大小。
  • Mini driver库运行时占用的内存比full driver小。

librknn_api与librknn_runtime的区别

librknn_api是对librknn_runtime的封装,主要是为了减少对其他so的编译依赖,功能上并没有区别。检查驱动版本时,一般以librknn_runtime.so为准。

RKNN及RKNN-Toolkit

RKNN 是 Rockchip npu 平台使用的模型类型,以.rknn后缀结尾的模型文件。Rockchip 提供了完整了模型转换 Python 工具,方便用户将自主研发的算法模型转换成 RKNN 模型,同时 Rockchip 也提供了C/C++和Python API 接口。

RKNN Toolkit是一套PC上的软件工具包,为用户提供RKNN模型转换、推理和性能评估。
RKNN Toolkit Lite为Rockchip NPU平台提供Python编程接口,帮助用户部署RKNN模型,加速AI应用程序的实现

RKNN-Toolkit:https://github.com/rockchip-linux/rknn-toolkit
RKNN C API:https://github.com/rockchip-linux/rknpu/tree/master/rknn/rknn_api
OP支持列表:https://github.com/rockchip-linux/rknn-toolkit/blob/master/docs/RKNN_OP_Support_V1.7.5.md