瑞芯微NPU使用攻略

描述

RKNPU 概述

 RKNPU(Rockchip Neural Processing Unit)是瑞芯微(Rockchip)公司专为神经网络处理设计的硬件加速单元,旨在提升人工智能和机器学习任务的效率。以下是其核心要点:

 

定义与功能

 

硬件加速单元:RKNPU是集成在瑞芯微芯片中的专用NPU,专注于加速深度学习算法,如图像识别、目标检测、语音处理等,同时优化功耗与性能平衡。

 

支持多平台:适配瑞芯微多款芯片,包括RK3566、RK3568、RK3588等,覆盖从嵌入式设备到高性能边缘计算场景。

 

架构与软件栈

 

分层架构:

硬件层:物理NPU硬件,提供算力支持。

驱动层:负责硬件初始化、数据传输和任务调度,连接上层应用与硬件258。

应用层:通过C或Python API(如RKNN API)实现模型部署,支持动态形状和多种操作符,开发者可灵活调用58。

 

开源工具链:提供驱动、运行时库(如librknn_runtime)及模型转换工具(如RKNN-Toolkit2),支持TensorFlow、PyTorch等框架模型的转换与优化。

 

核心技术与工具

 

RKNN模型:瑞芯微专有的模型格式,通过量化、融合等技术优化模型,提升在NPU上的推理效率。支持加密功能,确保模型安全性。

 

开发工具:

RKNN-Toolkit2:用于PC端模型转换、量化和性能评估,支持跨平台模型迁移。

RKNPU2 SDK:提供C/C++接口,适用于高性能嵌入式部署。

 

应用场景

 

智能物联网(IoT):如智能摄像头、工业传感器,实现本地实时数据处理,减少云端依赖。

边缘计算:支持高并发任务(如视频分析、语音识别),适用于低带宽或离线环境。

消费电子:应用于智能电视、家居设备,提升人脸识别、图像处理等功能的响应速度。

 

优势与特点

 

高效能低功耗:通过硬件加速和驱动优化,显著降低AI任务的能耗,适合资源受限的嵌入式设备。

多框架兼容性:支持主流深度学习框架的模型转换,降低开发门槛。

社区与生态:开源驱动和详尽的文档支持,开发者可快速上手并参与社区迭代。

 

开发环境搭建

Ubuntu:用于模型转换和编译示例程序。

 

Miniforge Conda :Python环境和包管理工具。

 

RKNN-Toolkit2:模型适配与优化的核心工具。

 

rknn_model_zoo:提供示例代码。

 

源码下载

按照如下两个链接将rknn-toolkit2和rknn_model_zoo下载到本地Ubuntu系统下。

RKNPU2 SDK (for RK3576/RK3562/RK3566/RK3568/RK3588/RV1103/RV1106)

https://github.com/airockchip/rknn-toolkit2

Model zoo:

https://github.com/airockchip/rknn_model_zoo

 

安装RKNN-Toolkit2环境

[!NOTE]

请确保源码下载章节中RKNPU2 SDK下载成功,安装RKNN-Toolkit2会使用到此工具包。

 

安装Python

如果系统中没有安装 Python 3.8(建议版本),或者同时有多个版本的 Python 环境,建议使用Miniforge Conda 创建新的 Python 3.8 环境。 

 

安装Miniforge Conda

Miniforge Conda是一个Python环境和包管理工具,它提供了一个轻量级、高效的Conda发行版,适合那些希望避免Anaconda大型包集合或者对系统资源有限制的用户。通过使用Miniforge,用户可以享受到Conda的便利,同时不必担心额外的负担。

在终端窗口执行以下命令,检查当前系统是否安装Miniforge Conda,若已安装则省略此节步骤。

在终端窗口执行以下命令,检查当前系统是否安装Miniforge Conda,若已安装则省略此节步骤。

conda -V
#如果输出类似conda 24.9.2,表示当前系统已安装Miniforge conda,且版本为24.9.2
#如果输出conda: command not found,表示当前系统未安装Miniforge conda

如果没有安装Miniforge Conda,可以通过下面的链接下载Miniforge Conda安装包。

[!TIP]

如果当前Ubuntu终端访问不到该github链接,也可浏览器访问https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh下载该安装脚本并拷贝到Ubuntu环境目录下进行安装。

wget -c https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh

通过以下命令安装Miniforge Conda。

chmod 777 Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh

使用Miniforge Conda创建Python环境

在计算机的终端窗口中执行以下命令进入Conda base环境。

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

通过以下命令创建名称为toolkit2的Python3.8环境。

conda create -n toolkit2 python=3.8

激活toolkit2环境,后续将在此环境中安装RKNN-Toolkit2:

[!NOTE]

当终端重启后要重新激活toolkit2环境

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

安装RKNN-Toolkit2

激活RKNN-Toolkit2环境成功后,可通过pip源或者本地wheel包这两种方式安装RKNN-Toolkit2(建议使用本地wheel包安装):

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目录,以下操作均在rknn-toolkit2根目录下进行
cd rknn-toolkit2-master/rknn-toolkit2/

#请根据不通的python版本以及处理器架构选择不同的requirements文件,cp38为python版本号为3.8,请根据实际conda安装Python环境时的版本和处理器架构进行安装,2.3.2为当前rknn-toolkit2的版本
pip install -r packages/x86_64/requirements_cp38-2.3.2.txt

#安装RKNN-Toolkit2,cp38为python版本号为3.8,请根据实际conda安装Python环境时的版本和处理器架构选择对应的wheel安装包进行安装,2.3.2为当前rknn-toolkit2的版本
pip install packages/x86_64/rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

机器学习

验证是否安装成功

执行以下命令,没有报错则代表RKNN-Toolkit2环境安装成功。

#进入Python交互模式
python

#导入RKNN类
from rknn.api import RKNN

机器学习

安装编译环境

安装cmake

在计算机终端中执行以下命令。

#更新包列表
sudo apt-get update

#安装cmake
sudo apt-get install cmake

安装Linux GCC交叉编译器

因为不同的Linux文件系统对应的编译工具链版本不一致,请根据实际系统选择对应的交叉编译器,并下载到本地。

Buildroot:https://developer.arm.com/-/media/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz?rev=cf8baa0ef2e54e9286f0409cdda4f66c&hash=E813B503D52B4EF0CBEBEE36300B05049EB6B41F

Ubuntu22.04:https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz?rev=8d05006a68d24d929d602804ec9abfb4&hash=E8A66D3B9FF0EFC60A5C041AC3C5EE476349817B

  •  

编译示例程序

RKNN Model Zoo 提供了示例代码,example目录下包括了一些常用的模式示例,例如MobileNet 和 YOLO等。每个模型示例提供了Python和C/C++两个版本的示例代码。以下我们以在RK3588的buildroot系统上部署C/C++的YOLOV8模型示例。

[!NOTE]

请确保源码下载章节中Model Zoo下载成功,以下的示例程序均采用其中的示例代码。

准备模型

#进入rknn_model_zoo-main/examples/yolov8/model目录
cd rknn_model_zoo-main/examples/yolov8/model

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

模型转换

进入rknn_model_zoo-main/examples/yolov8/python目录,运行convert.py 脚本,该脚本将原始的 ONNX 模型转成RKNN 模型。

#进入rknn_model_zoo-main/examples/yolov8/python目录
cd rknn_model_zoo-main/examples/yolov8/python

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

[!NOTE]

本示例以RK3588为例,如果使用其他型号的CPU平台,请在模型转换时根据实际情况更改转换命令中的CPU平台指定。

编译RKNN C/C++ Demo

指定编译器的路径 GCC_COMPILER 为本地的 GCC 编译器路径(编译工具链请参考安装编译环境中安装Linux GCC交叉编译器章节)。即在build-linux.sh脚本中添加GCC_COMPILER属性。

# 添加到 build-linux.sh 脚本的开头位置即可
GCC_COMPILER=/home/hzhy/RKNN_Project/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu

在rknn_model_zoo目录下运行build-linux.sh脚本。

#添加运行权限
chmod 777 build-linux.sh

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

编译完成后会在rknn_model_zoo_main目录下生成install/rk3588_linux_aarch64/rknn_yolov8_demo/文件夹(根据对应的example生成对应的demo文件夹),将该文件夹通过scp或者其他方式拷贝到板卡中。

[!NOTE]

本示例以RK3588为例,如果使用其他型号的CPU平台,请在Demo编译时根据实际情况更改转换命令中的CPU平台指定。

板端运行Demo

通过串口、ssh、adb其中一种方式登录到板卡终端。并进入存放C/C++ Demo的目录。

机器学习

在板端运行可执行文件。

#设置依赖库环境变量
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH

#运行可执行文件
#用法 ./rknn_yolov8_demo model_path为模型文件路径 image_path为待推理图片路径
./rknn_yolov8_demo ./model/yolov8n.rknn ./model/bus.jpg

查看编译结果

板端运行Demo推理完毕后会在当前目录下生成推理后的图片out.png,可以将out.png拷贝到PC上查看推理结果。

机器学习

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分