本文介绍瑞芯微原厂RKNN端侧模型的开发环境搭建方法,后续还将带来详细测试方法。基于触觉智能RK3576开发板Purple Pi OH2演示。
RKNN
RKNN(Rockchip Neural Network) 是瑞芯微专为自家 NPU (神经网络处理单元) 开发的端侧神经网络计算框架,提供完整的 "模型转换 - 部署 - 推理" 解决方案。RK官方提供了RKNN软件栈可以帮助用户快速地将AI模型部署到Rockchip芯片,整体的框架如下。
RKNN-Toolkit2是为用户提供在计算机上进行模型转换、推理和性能评估的开发套件,RKNN-Toolkit2的主要框图如下。为了使用RKNPU,用户需要首先在计算机上运行RKNN-Toolkit2工具,将训练好的模型转换为RKNN格式模型,之后使用RKNN C API或Python API在开发板上进行部署。该工具提供的Python接口可以便捷地完成模型转换、量化、模型推理、性能和内存评估、量化精度分析、模型加密等功能。
RKNN Runtime负责加载RKNN模型,并调用NPU驱动实现在NPU上推理RKNN模型。推理RKNN模型时,包括原始数据输入预处理、NPU运行模型、输出后处理三项流程。根据不同模型输入格式和量化方式,RKNN Runtime提供通用API和零拷贝API两种处理流程:
- 通用API推理流程
提供一套简洁、无门槛的推理API,易于使用,流程如图所示。其中对数据的归一化、量化、数据排布格式转换、反量化等均在CPU上运行,模型本身的推理在NPU上运行。
- 零拷贝API推理
优化了通用API的数据处理流程,归一化、量化和模型推理都会在NPU上运行,NPU输出的数据排布格式和反量化过程在CPU或者NPU上运行。零拷贝API对于输入数据流程的处理效率会比通用API高。
另外对RK3576端侧性能感兴趣的朋友们,可点击触觉智能相关实测视频:
https://www.bilibili.com/video/BV1T8UqBMErn/?spm_id_from=333.1387
开发环境搭建
- RKNN-Toolkit2安装
首先,执行如下命令进行安装Miniforge Conda:
wget -c https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.sh
进入Conda base环境,创建一个RKNN-Toolkit2 Conda环境,命令如下:
source ~/miniforge3/bin/activate conda create -n RKNN-Toolkit2 python=3.8
进入RKNN-Toolkit2 Conda环境:
conda activate RKNN-Toolkit2
激活RKNN-Toolkit2 Conda环境后,可通过 pip 源安装RKNN-Toolkit2:
pip install rknn-toolkit2 -i https://pypi.org/simple
验证RKNN-Toolkit2,若执行以下命令没有报错,则安装成功。
python3 >>> from rknn.api import RKNN
- 下载RKNN相关仓库
执行如下命令从github上拉群RKNN相关仓库,后续编译、测试会用到。
mkdir Projects cd Projects # 下载 RKNN-Toolkit2 仓库 git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1 # 下载 RKNN Model Zoo 仓库 git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
- 安装编译工具
执行如下命令安装cmake工具:
sudo apt install cmake
下载GCC 交叉编译器工具链:
- https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
下载后拷贝到Ubuntu虚拟机并解压软件包,建议将GCC软件包解压到 Projects的文件夹中,后面编译RKNN C Demo时会用到:
- 安装板端RKNPU环境
开发板硬件连接如下图所示,烧录网盘固件:
IDO_PurplePiOH2_V1B_Ubuntu22.04_HDMI4K_250907R.img。
注意:OTG接口需要连接到Ubuntu虚拟机,Ubuntu虚拟机需要安装adb命令:
sudo apt install adb
接下来,确认板卡系统支持的RKNPU驱动版本,开发板上电进入系统,执行以下命令查询NPU驱动版本:
adb shell dmesg | grep -i rknpu
默认出厂固件已支持NPU驱动,若以上命令查询不到NPU驱动版本,在内核源中使能如下配置以集成NPU驱动:
CONFIG_ROCKCHIP_RKNPU=y
RKNN-Toolkit2的调试功能要求板端安装RKNPU2环境,并启动
rknn_server服务。以下是RKNPU2 环境中的两个基本概念:
RKNN Server:一个运行在开发板上的后台代理服务。该服务的主要功能是调用板端 Runtime 对应的接口处理计算机通过USB传输过来的数据,并将处理结果返回给计算机。
RKNPU2 Runtime 库(librknnrt.so):主要职责是负责在系统中加载 RKNN 模型,并通过调用专用的神经处理单元(NPU)执行RKNN模型的推理操作。
如果能够启动 rknn_server 服务,则代表板端已经安装 RKNPU2 环境。
# 进入板端 adb shell # 启动 rknn_server restart_rknn.sh
检查rknn_server、librknnrt.so版本是否一致,命令如下:
# 查询rknn_server版本 strings /usr/bin/rknn_server | grep -i "rknn_server version" # 查询librknnrt.so库版本 strings /usr/lib/librknnrt.so | grep -i "librknnrt version"
如果出现以下输出信息,则代表rknn_server版本为x.x.x,librknnrt.so的版本为x.x.x。
默认出厂的固件rknn_server、librknnrt.so已经一致,若版本不一致需要更新库。
# 进入前面下载的rknn-toolkit2仓库的 rknpu2 目录 cd Projects/rknn-toolkit2/rknpu2
拷贝上述脚本和库替换开发板系统对应的文件进行更新:
完成以上步骤,瑞芯微原厂RKNN模型推理的开发环境就完成搭建了,下集为您带来RKNN详细测试方法。本文相关资料请关注深圳触觉智能。


