跳转至

Linux RKNPU

瑞芯微RK356X、RK3576、RK3588系列芯片均内置独立NPU(神经网络处理单元),其中INT8算力最高可达1TOPS、6TOPS级别,全面支持TensorFlow、TF-lite、Pytorch、Caffe、ONNX等主流深度学习框架,具体详细参数可参考对应芯片数据手册。

NPU作为专为神经网络运算设计的专用硬件,核心使命是高效加速人工智能领域的神经网络算法,尤其适配机器视觉、自然语言处理等核心场景。随着人工智能应用场景的不断拓展,基于RKNPU的解决方案已覆盖多个领域,包括面部跟踪、手势与身体姿态跟踪、图像分类、视频监控、自动语音识别(ASR)以及高级驾驶员辅助系统(ADAS)等,满足多样化的AI部署需求。

为方便开发者基于RKNPU进行AI项目开发,瑞芯微官方提供了全套RKNN组件,涵盖开发、部署、优化全流程,具体包括RKNPU2、RKNN Toolkit2、RKLLM-Toolkit及RKNPU驱动等,各组件功能分工明确、协同适配:

  • RKNPU2:开发套件核心组成部分,提供librknnrt.so等运行库,支持C/C++编程接口,可直接用于Linux、Android系统下RKNN模型的部署与推理,为AI应用落地提供底层运行支撑。
  • RKNN Toolkit2:基于Python接口的开发套件,支持x86、arm64双平台,集成模型转换、量化、推理测试、性能与内存评估、量化精度分析、模型加密等一站式功能;其中包含的RKNN Toolkit Lite2子模块,可直接在瑞芯微板卡上部署RKNN模型,简化板端开发流程。
  • RKNN模型:瑞芯微基于自身NPU硬件架构定制的专属模型格式,相较于通用模型格式,其在Rockchip NPU上可实现更高的推理性能与运行效率,是RKNPU加速能力的核心载体。
  • RKLLM-Toolkit:专注于大语言模型(LLM)开发的专用套件,支持在计算机上完成Hugging Face格式大语言模型的量化与转换,最终输出适配RKNPU的RKLLM模型,助力大语言模型在瑞芯微平台的快速部署。
  • RKNPU驱动:提供NPU硬件与系统的接口程序,瑞芯微板卡系统固件已完成驱动适配,开发者无需额外开发驱动,可直接基于现有固件开展AI项目开发,降低部署门槛。

此外,瑞芯微官方还提供了RKNN Model Zoo模型仓库,该仓库基于RKNN工具链开发,整合了当前主流AI算法的完整部署例程,涵盖Python API与C API两种开发接口,开发者可直接参考例程快速上手,大幅缩短AI项目的开发周期。

rknn-toolkit2 支持平台

  • RK3588 Series
  • RK3576 Series
  • RK3566/RK3568 Series
  • RK3562 Series
  • RV1103/RV1106
  • RV1103B/RV1106B
  • RV1126B
  • RK2118

rknn_model_zoo 支持平台

  • Support RK3562, RK3566, RK3568, RK3576, RK3588 , RV1126B platforms.
  • Limited support RV1103, RV1106
  • Support RV1109, RV1126, RK1808 platforms.

rknn-llm 支持平台

  • RK3588 Series
  • RK3576 Series
  • RK3562 Series
  • RV1126B Series

系统支持部署 rknn-toolkit2rknn_model_zoorknn-llm/,点击跳转至 Rockhip 在线官方文档。

PC 端 RKNN 部署

rknn-toolkit2 环境部署

下载 RKNN 相关仓库

可通过命令行或云盘中进行下载RKNN仓库

# 新建 Projects 文件夹
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

# 注意:
# 1.参数 --depth 1 表示只克隆最近一次 commit
# 2.如果遇到 git clone 失败的情况,也可以直接在 github 中下载压缩包到本地,然后解压至该目录

安装 Miniforge Conda

conda -V
# 参考输出信息:conda 23.3.1 ,表示 Miniforge conda 版本为 23.3.1
# 如果提示 conda: command not found,则表示未安装 Miniforge

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

source ~/miniforge3/bin/activate # Miniforge 安装的目录
# 成功后,命令行提示符会变成以下形式:
# (base) xxx@xxx:~$

conda create -n toolkit2 python=3.8

conda activate toolkit2
# 成功后,命令行提示符会变成以下形式:
# (toolkit2) xxx@xxx:~$

安装 RKNN-Toolkit2

通过 pip 源安装

pip install rknn-toolkit2 -i https://pypi.org/simple

# 如果已安装 RKNN-Toolkit2,可通过以下命令升级 RKNN-Toolkit2
pip install rknn-toolkit2 -i https://pypi.org/simple --upgrade

通过本地 wheel 包安装

# 进入 rknn-toolkit2 目录
cd Projects/rknn-toolkit2/rknn-toolkit2

# 请根据不同的 python 版本及处理器架构,选择不同的 requirements 文件:
# 其中 cpxx 是 python 版本号
pip install -r packages/x86_64/requirements_cpxx.txt
# pip install -r packages/arm64/arm64_requirements_cpxx.txt

# 安装 RKNN-Toolkit2
# 请根据不同的 python 版本及处理器架构,选择不同的 wheel 安装包文件:
# 其中 x.x.x 是 RKNN-Toolkit2 版本号,cpxx 是 python 版本号
pip install packages/x86_64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# pip install packages/arm64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

验证,如果安装失败,请查阅 《Rockchip_RKNPU_User_Guide_RKNN_SDK_CN.pdf》文档中的第 10.2 章节 “工具安装问题”,其中详细介绍了 RKNN-Toolkit2 环境安装失败的解决方法。

# 进入 Python 交互模式
python
# 导入 RKNN 类
from rknn.api import RKNN

rknn 模型转换

# 进入 rknn_model_zoo/examples/yolov5/model 目录
cd Projects/rknn_model_zoo/examples/yolov5/model

# 运行 download_model.sh 脚本,下载 yolov5 onnx 模型
# 例如,下载好的 onnx 模型存放路径为 model/yolov5s_relu.onnx
./download_model.sh

# 进入 rknn_model_zoo/examples/yolov5/python 目录
cd Projects/rknn_model_zoo/examples/yolov5/python

# 运行 convert.py 脚本,将原始的 ONNX 模型转成 RKNN 模型
# 用法: python convert.py model_path [rk3566|rk3588|rk3562] [i8/fp] [output_path]
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn

rknn_model_zoo 交叉编译

编译环境安装

sudo apt install libopencv-dev git cmake make gcc g++ libsndfile1-dev -y

GCC 交叉编译工具链下载

板端为 64 位系统:

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

板端为 32 位系统:

https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linuxgnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

# 存放路径
Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu # 此路径在后面编译RKNN C Demo时会用到

交叉编译

# 添加到 build-linux.sh 脚本的开头位置即可
GCC_COMPILER=Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

# 进入 rknn_model_zoo 目录
cd Projects/rknn_model_zoo

# 运行 build-linux.sh 脚本
# 用法:./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]
# -t : target (rk356x/rk3588) # 平台类型,rk3568/rk3566 都统一为rk356x
# -a : arch (aarch64/armhf) # 板端系统架构
# -d : demo name # 对应 examples 目录下子文件夹的名称,如yolov5、mobilenet
# -b : build_type(Debug/Release)
# -m : enable address sanitizer, build_type need set to Debug
./build-linux.sh -t rk356x -a aarch64 -d yolov5

主板端 RKNN 部署

如果板端没有安装 RKNN Server 和 Runtime 库,或者 RKNN Server 和 Runtime 库的版本不一致,都需要重新安装 RKNPU2 环境。

通常情况下,开发板默认已经安装版本一致的 RKNPU2 环境。

(注意:1. 若使用动态维度输入的 RKNN 模型,则要求 RKNN Server 和 Runtime 库版本 >= 1.5.0。2. 要保证 RKNN Server 、Runtime 库的版本、RKNN-Toolkit2 的版本是一致的,建议都安装最新的版本)

确认 RKNPU2 环境

# 查询 RKNPU2 驱动版本
dmesg | grep -i rknpu

# 启动 rknn_server
restart_rknn.sh
# start rknn server, version: x.x.x 代表启动rknn_server服务成功,即已经安装RKNPU2环境

# 查询rknn_server版本
strings /usr/bin/rknn_server | grep -i "rknn_server version"

# 查询librknnrt.so库版本
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"

安装/更新 RKNPU2 环境

# rknpu2 目录
Projects/rknn-toolkit2/rknpu2

# 拷贝 rknn_server 到主板目录下
# 注:在64位Linux系统中,BOARD_ARCH对应aarch64目录,在32位系统,对应armhf目录。
Projects/rknn-toolkit2/rknpu2/runtime/Linux/rknn_server/${BOARD_ARCH}/usr/bin/* /usr/bin

# 拷贝 librknnrt.so 到主板目录下
Projects/rknn-toolkit2/rknpu2runtime/Linux/librknn_api/${BOARD_ARCH}/librknnrt.so /usr/lib

# 赋予可执行权限
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh

# 重启 rknn_server 服务
restart_rknn.sh

rknn_model_zoo 板端编译

编译环境安装

sudo apt install libopencv-dev git cmake make gcc g++ libsndfile1-dev -y

编译

# 进入 rknn_model_zoo 目录
cd rknn_model_zoo

# 运行 build-linux.sh 脚本
# 用法:./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]
# -t : target (rk356x/rk3588) # 平台类型,rk3568/rk3566 都统一为rk356x
# -a : arch (aarch64/armhf) # 板端系统架构
# -d : demo name # 对应 examples 目录下子文件夹的名称,如yolov5、mobilenet
# -b : build_type(Debug/Release)
# -m : enable address sanitizer, build_type need set to Debug
./build-linux.sh -t rk356x -a aarch64 -d yolov5