Rockchip RK3588 - Rockchip RKNN快速上手
----------------------------------------------------------------------------------------------------------------------------
开发板 :ArmSoM-Sige7
开发板
eMMC
:64GB
LPDDR4
:8GB
显示屏 :15.6
英寸HDMI
接口显示屏
u-boot
:2017.09
linux
:5.10
----------------------------------------------------------------------------------------------------------------------------
在《Rockchip RK3588 - Rockchip Linux SDK Buildroot
文件系统构建》我们对Buildroot
文件系统进行了详细的介绍,不过不知道你有没有留意到在配置环节【配置Target packages
】中,需要配置Rockchip
板级支持包,这些板级支持包是由Rockchip
提供的,本节的目的实际上就是研究部分核心板级支持包,比如OpenGL ES
、rknpu
。
至于为什么去研究这些很简单,比如我们自己在做ubuntu
根文件系统的时候,我们通常需要移植适配于硬件的动态库,因此我们就需要参考Rockchip Linux SDK
文件系统的实现。
一、板级支持包回顾
回顾《Rockchip RK3588 - Rockchip Linux SDK Buildroot
文件系统构建》文章【配置Target packages
】小节中的配置:
Target packages --->
Hardware Platforms --->
[*] Rockchip Platform --->
Rockchip SoC (rk3588) --->
( ) rk3358 chip
(X) rk3588 chip
......
[*] Rockchip Camera Engine For ISP
Rockchip BSP packages ---> // Rockchip板级支持包,很重要
[*] Rockchip Camera Engine 3A service run in booting
Specify a directory to store xml speed up bin (disabled) --->
() Rockchip Camera Engine IQ xml file
[ ] rockchip common algorithm
[*] gstreamer1-rockchip
[*] A rockchip-mpp V4L2 wrapper plugin for chromium V4L2 VDA
[ ] Rockchip NPU power control for linux
[ ] Rockchip NPU power control combine for linux
[ ] rk n4 camera
[ ] Rockchip recovery for linux
[ ] rknpu
[ ] rknpu pcie
[ ] rknpu2
[ ] rknn_demo
[*] rockchip script
() default PCM
[ ] rkscript iodomain notice script
......
[ ] Rockchip rkupdate for linux
[*] rkwifibt
[ ] Enable static
[ ] rkwifibt wireless applicantion
[*] rockchip-alsa-config
[*] rockchip-rga
[*] prefer using rockchip-rga
[*] rockchip-mali
......
[*] wayland winsys
[*] GBM
[*] OpenGL EGL
[*] OpenGL EGL Wayland
[*] OpenGL ES
[*] OpenCL
[ ] Vulkan
[*] rockchip-mpp --->
......
除了我们在OTA
升级中介绍过的Rockchip recovery for linux
,还有一堆其它的编译选项,比如rknpu
、OpenGL ES
等,你可能好奇这些配置项是用来做什么的,但是请你按住性子往下看下去,我们会在后续文章一一介绍这些编译配置选项。
在为Buildroot
自定义软件包时,在软件包目录下通常为引入.in
和.mk
文件,这里我们以rknpu2
为例进行介绍;
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/buildroot# ll package/rockchip/rknpu2
-rw-r--r-- 1 root root 509 6月 9 2024 Config.in
-rw-r--r-- 1 root root 82 6月 9 2024 rknpu2.hash
-rw-r--r-- 1 root root 1575 6月 9 2024 rknpu2.mk
1.1 Config.in
我们首先从Config.in
文件入手,该文件实际上就是定义make menuconfig
支持的配置选项;
config BR2_PACKAGE_RKNPU2
bool "rknpu2"
help
"rknpu runtime lib and server"
config BR2_PACKAGE_RKNPU2_ARCH
string
depends on BR2_ARCH = "arm" || BR2_ARCH = "aarch64"
default "armhf" if BR2_ARCH="arm"
default BR2_ARCH
config BR2_PACKAGE_RKNPU2_SOC
string
depends on BR2_PACKAGE_RK3566_RK3568 || BR2_PACKAGE_RK3562 || \
BR2_PACKAGE_RK3588
default "RK3588" if BR2_PACKAGE_RK3588
default "RK356X"
if BR2_PACKAGE_RKNPU2
config BR2_PACKAGE_RKNPU2_EXAMPLE
bool "rknpu2 example"
default y
endif
BR2_PACKAGE_RKNPU2
用于启用或禁用 rknpu2
包,它提供了运行时库和服务,支持RK
处理器中的神经网络加速功能。
BR2_PACKAGE_RKNPU2_ARCH
用于指定 rknpu2
的架构,对于RK3588
配置项BR2_ARCH=aarch64
,因此BR2_PACKAGE_RKNPU2_ARCH=aarch64
。
BR2_PACKAGE_RKNPU2_SOC
指定 rknpu2
的目标系统,对于RK3588
配置项BR2_PACKAGE_RK3588=y
,因此BR2_PACKAGE_RKNPU2_SOC=RK3588
。
比如我们勾选了rknpu2
,在生成的output/rockchip_rk3588/.config
配置文件会配置:
BR2_PACKAGE_RKNPU2=y
BR2_PACKAGE_RKNPU2_ARCH="aarch64"
BR2_PACKAGE_RKNPU2_SOC="RK3588"
BR2_PACKAGE_RKNPU2_EXAMPLE=y
1.2 rknpu2.mk
buildroot
编译rknpu2
所需要的设置rknpu2.mk
,包括源码位置、安装目录、权限设置等。
################################################################################
#
# rknpu2
#
################################################################################
RKNPU2_VERSION = 1.0.0
RKNPU2_SITE_METHOD = local
RKNPU2_SITE = $(TOPDIR)/../external/rknpu2
RKNPU2_INSTALL_STAGING = YES
RKNPU2_LICENSE = ROCKCHIP
RKNPU2_LICENSE_FILES = LICENSE
RKNPU2_ARCH = $(call qstrip,$(BR2_PACKAGE_RKNPU2_ARCH))
RKNPU2_SOC = $(call qstrip,$(BR2_PACKAGE_RKNPU2_SOC))
define RKNPU2_INSTALL_TARGET_CMDS
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/rknn_server/$(RKNPU2_ARCH)/* \
$(TARGET_DIR)/
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(TARGET_DIR)/usr/lib/
endef
define RKNPU2_INSTALL_STAGING_CMDS
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(STAGING_DIR)/usr/lib/
cp -rT $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/include \
$(STAGING_DIR)/usr/include/rknn
endef
ifeq ($(BR2_PACKAGE_RKNPU2_EXAMPLE),)
$(eval $(generic-package))
else
RKNPU2_SUBDIR = examples/rknn_common_test
RKNPU2_CONF_OPTS += -DTARGET_SOC=$(call LOWERCASE,$(RKNPU2_SOC))
define RKNPU2_INSTALL_TARGET_EXAMPLE
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(STAGING_DIR)/usr/lib/
cp -rT $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/include \
$(STAGING_DIR)/usr/include/rknn
cp $(@D)/$(RKNPU2_SUBDIR)/rknn_common_test $(TARGET_DIR)/usr/bin/
cp -r $(@D)/$(RKNPU2_SUBDIR)/model $(TARGET_DIR)/usr/share/
endef
RKNPU2_POST_INSTALL_TARGET_HOOKS += RKNPU2_INSTALL_TARGET_EXAMPLE
$(eval $(cmake-package))
endif
1.2.1 约定配置
首先映入眼帘的是一些约定的配置:
RKNPU2_VERSION
:定义了源码的版本号为1.0.0
;RKNPU2_SITE
:定义了源码下载地址,这里指定为<SDK>/external/rknpu2
,实际上就是后文我们从github
下载的rknn-toolkit2
仓库的rknpu2
文件夹;RKNPU2_SITE_METHOD
:定义了源码下载的方式,该处指定为本地获取(local
);RKNPU2_LICENSE
:设置许可证类型为ROCKCHIP
;RKNPU2_LICENSE_FILES
:设置许可证文件LICENSE
。
1.2.2 变量
RKNPU2_ARCH = $(call qstrip,$(BR2_PACKAGE_RKNPU2_ARCH))
$(call qstrip, ...)
是一个用于去掉前后空格的函数,因此RKNPU2_ARCH=aarch64
;
RKNPU2_SOC = $(call qstrip,$(BR2_PACKAGE_RKNPU2_SOC))
指定RKNPU2
的目标芯片(SOC
),RKNPU2_SOC=RK3588
。
1.2.3 CMD
命令之INSTALL_TARGET
_INSTALL_TARGET_CMDS
结尾的变量是在编译完之后,自动安装执行,一般是让buildroot
把编译出来的的bin
或lib
拷贝到指定目录。
define RKNPU2_INSTALL_TARGET_CMDS
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/rknn_server/$(RKNPU2_ARCH)/* \
$(TARGET_DIR)/
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(TARGET_DIR)/usr/lib/
endef
其中:$(@D)
是一个自动变量,表示表示当前规则的目标路径,也就是rknpu2
源码所在目录(具体路径为<SDK>/external/rknpu2
);
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/external# tree rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/
rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/ # 复制到目标系统/目录
└── usr
└── bin
├── restart_rknn.sh
├── rknn_server
└── start_rknn.sh
2 directories, 3 files
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/external# tree rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/ # 复制到目标系统/usr/lib/目录
rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/
├── librknn_api.so -> librknnrt.so
└── librknnrt.so
0 directories, 2 files
复制 rknn_server
和 librknn_api
相关的文件到目标文件系统相应目录下。
1.2.4 CMD
命令之INSTALL_STAGING
将文件安装到暂存区($(STAGING_DIR)
):
define RKNPU2_INSTALL_STAGING_CMDS
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(STAGING_DIR)/usr/lib/
cp -rT $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/include \
$(STAGING_DIR)/usr/include/rknn
endef
复制 librknn_api
库文件到暂存区的 usr/lib/
目录,并将头文件安装到 usr/include/rknn
目录。
1.2.5 示例程序
如果配置项 BR2_PACKAGE_RKNPU2_EXAMPLE
被启用,示例程序也会被安装;
ifeq ($(BR2_PACKAGE_RKNPU2_EXAMPLE),)
$(eval $(generic-package))
else
RKNPU2_SUBDIR = examples/rknn_common_test
RKNPU2_CONF_OPTS += -DTARGET_SOC=$(call LOWERCASE,$(RKNPU2_SOC))
define RKNPU2_INSTALL_TARGET_EXAMPLE
cp -r $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/$(RKNPU2_ARCH)/* \
$(STAGING_DIR)/usr/lib/
cp -rT $(@D)/runtime/$(RKNPU2_SOC)/Linux/librknn_api/include \
$(STAGING_DIR)/usr/include/rknn
cp $(@D)/$(RKNPU2_SUBDIR)/rknn_common_test $(TARGET_DIR)/usr/bin/
cp -r $(@D)/$(RKNPU2_SUBDIR)/model $(TARGET_DIR)/usr/share/
endef
RKNPU2_POST_INSTALL_TARGET_HOOKS += RKNPU2_INSTALL_TARGET_EXAMPLE
$(eval $(cmake-package))
endif
(eval(generic-package
)) 最核心的就是这个东西了,一定不能够漏了,不然源码不会被编译,这个函数就是把整个.mk
构建脚本,通过Buildroot
框架的方式,展开到Buildroot/
目录下的Makfile
中,生成的构建目标。
1.3 总结
通过前面的分析,我们已经明白rknpu2
配置项的作用,其本质就是安装板端RKNPU2
,涉及到的文件有: restart_rknn.sh
、 rknn_server
、 start_rknn.sh
、librknnrt.so
,并且这些文件并不是编译得到的,因此我们是无法查看其实现。
二、RKNPU
介绍
2.1 NPU
的由来
NPU
(Nerual Processing Unit
)是一种专门用于加速神经网络计算的处理器。
在深度学习技术刚开始流行的时候,人们主要使用通用计算设备,如CPU
和GPU
,来执行神经网络计算。但是,随着神经网络的复杂度和规模不断增加,传统的计算设备已经不能满足快速、高效地执行神经网络计算的需求。因此,研究人员开始探索如何设计一种专门用于加速神经网络计算的处理器,这就是NPU
的由来。
早期的NPU
主要是基于FPGA
(Field Programmable Gate Array
)实现的。FPGA
是一种可编程逻辑器件,可以通过编程实现各种不同的电路功能。由于FPGA
具有高度的灵活性和可编程 性,可以用于实现各种不同类型的神经网络处理器。
2010
年,斯坦福大学的研究人员提出了一种基于FPGA
的神经网络加速器,可以实现高效的神经网络计算。此后,越来越多的研究人员开始尝试使用FPGA
实现NPU
。
随着深度学习技术的不断发展和普及,NPU
的研究和开发也取得了越来越多的进展;
2013
年,Google
发布了一篇论文,介绍了一种名为Tensor Processing Unit
(TPU
)的定制芯片,专 门用于加速深度学习模型的训练和推理。TPU
采用了特定的硬件架构和优化算法,可以实现高效、低功耗的神经网络计算。TPU
的成功引起了业界的广泛关注,也促进了NPU
的发展。 随后,其他公司也开始研发自己的NPU
2015
年,华为发布了一款名为Kirin 950
的处理 器,集成了一种名为Neural Processing Unit
(NPU
)的模块,用于加速神经网络计算;2017
年,苹果公司在2017
年发布的A11
芯片中集成了神经网络处理器,用于支持人脸识别等功能;2018
年,华为推出了全新的昇腾(Ascend
)系列处理器,其中包括专门用于加速深度学习计算的NPU
模块。同年,英伟达推出了名为TensorCore
的加速器,用于加速深度学习模型的训练和推理;
随着NPU
技术的不断发展和普及,越来越多的公司开始将NPU
集成到自己的芯片中,以 速神经网络计算。瑞芯微为了满足人工智能的需要,瑞芯微的处理器也逐渐集成了NPU
,而瑞芯微处理器内置的NPU
,就被称之为RKNPU
。
2.2 RKNPU
介绍
到目前为止,RKNPU
已经经过了几代的发展,趋近成熟;
RK3399pro
和RK1808
初次引入了RKNPU
,相比传统的CPU
和GPU
,在深度学习运算能力上有比较大幅度的提升;- 接下来在
RV1109
和RV1126
上使用了第二代NPU
,提升了NPU
的利用 率; - 第三代
NPU
应用在RK3566
和RK3568
上,搭载全新NPU
自研架构; - 而
RK3588
搭载的 为第四代NPU
,提高了带宽利用率,支持了多核扩展。
RKNPU
具体发展过程如下图所示:

RKNPU1.0
和RKNPU2.0
被划分为了RKNPU
,而RKNPU3.0
、RKNPU4.0
和RKNPU5.0
被划分为了RKNPU2
,RKNPU
和RKNPU2
所使用的SDK
和工具套件不同。
RK3568
和RK3588
的NPU
具有的功能如下:
SoC类型 | NPU功能描述 |
---|---|
RK3588 | (1)拥有三个NPU核心 (2)支持三核协同工作,双核协同工作和独立工作 (3)使用AHB接口配置 NPU (4)使用AXI接口从内存中获取数据 (5)支持int4、int8、int16、float16、Bfloat16和tf32操作 (6)每个周期可进行1024x3 个int8 MAC操作 (7)每个周期可进行512x3 个int16 MAC操作 (8)每个周期可进行512x3 个float16 MAC操作 (9)每个周期可进行512x3 个bfloat16 MAC操作 (10)每个周期可进行256x3 个tf32 MAC操作 (11)每个周期可进行 2048x3 个int4 MAC操作 (12)每个核心有384KB的内部缓存 (13)支持转换的推理模型:TensorFlow、Caffe、Tflite、Pytorch、Onnx NN |
RK3568 | (1)NPU支持以下特性: (2)使用AHB接口配置 NPU (3)使用AXI接口从内存中获取数据 (4)支持int8、int16、float16、Bfloat16 操作(5)每个周期可进行512个int8 MAC操作 (6)每个周期可进行128 个int16 MAC操作 (7)每个周期可进行128 个float16 MAC操作 每个周期可进行128 个 bfloat16 MAC操作(8)4(9)每个核心有256KB的内部缓存 (10)支持转换的模型:TensorFlow、Caffe、Tflite、Pytorch、OnnxNN等 |
RKNN
三核架构如下图所示:

2.3 RKNPU
单核框架
RKNPU
单核心架构如下图所示:

2.3.1 AHB
/AXI
接口
AXI
主接口【用来和内存进行连接,从中获取模型、图像的相关参数和数据】用于从连接到SoC AXI
互联的内存中获取数据。AXI
是 一种高性能、低延迟、可扩展的总线接口,常用于连接处理器和外设,并支持多个主设备和从设备。AXI
主接口通常用于从内存中获取数据,例如从DRAM
或其它存储器中读取程序和数据, 并将其传输到处理器或其他外设中进行处理和计算。
AHB
从接口【用于访问寄存器,从而对RKNPU
进行配置、调试和测试】用于访问寄存器进行配置、调试和测试。AHB
是一种标 准化的系统总线接口,通常用于连接处理器、内存和外设等硬件电路。AHB
从接口通常用于访问寄存器,例如控制和配置处理器、外设和其他硬件电路的参数和状态,以实现系统的配置、 调试和测试。
在SoC
系统中,AXI
主接口和AHB
从接口通常被用于连接处理器、内存、外设和其他硬件电路,以实现数据传输、控制和配置等功能。AXI
接口通常用于高速数据传输和处理,而AHB
接口通常用于配置、调试和测试等低速控制操作。
2.3.2 卷积神经网络加速单元(CNA
)
卷积神经网络加速单元(Convolutional Neural Network Accelerator
,CNA
)是RKNPU
中重要的组成部分之一。包括卷积预处理控制器、NPU
内部缓存区、序列控制器、乘加运算单元和累 加器,下面对各个部分进行介绍:
- 卷积预处理控制器:卷积预处理控制器是
CNA
中用于预处理卷积计算的硬件单元,可以对输入的模型权重进行 解压缩之后加载进NPU
的内部缓冲区,并且可以判断零节点加速运算速度,最后将要推理的数据加载进NPU
的内部缓冲区中; NPU
内部缓存区(Internal Buffer
):NPU
内部缓存区是CNA
中用于存储中间计算结果的缓存区。它可以高效地存储和管理卷积神经网络中的各种数据,包括输入数据、卷积核、卷积结果等。NPU
内部缓存区采用了多级缓 存和数据重用技术,可以高效地利用计算资源和存储资源,从而进一步提高计算速度和效率;- 序列控制器(
Sequence Controller
):序列控制器是CNA
中用于控制卷积计算序列的硬件单元。它可以根据卷积神经网络的结构和参数,自动地配置和控制CNA
中各个硬件单元的工作模式和参数。序列控制器还可以实现卷积计算的并行化和流水化,从而提高计算速度和效率; - 乘加运算单元(
Multiply-Accumulate Unit,MAC
):乘加运算单元是CNA
中用于执行卷积计算的硬件单元。它可以对输入数据和卷积核进行乘 法和累加运算,从而得到卷积计算结果。乘加运算单元采用了高度并行的设计,可以同时执行多个卷积计算操作,从而大大提高计算速度和效率; - 累加器(
Accumulator
):累加器是CNA
中用于累加卷积计算结果的硬件单元。它可以高效地累加卷积计算结果,从 而得到最终的输出结果。累加器可以采用多种精度,可以适应不同的计算精度要求; - 数据处理单元(
Data Processing Unit,DPU
):主要处理单个数据的计算,例如Leaky ReLU
、ReLU、 ReluX
、Sigmoid
、Tanh
等。它还提供了一些功能,例如Softmax
、转置、数据格式转换等;- 数据处理单元是一种硬件电路,用于加速神经网络的计算过程。它通常被用于处理前向计算过程中的单个数据,例如卷积层和全连接层中的激活函数计算。不同的激活函数需要不同的 计算操作,例如
ReLU
需要计算max(0,x)
、Sigmoid
需要计算1/(1+exp(-x))
,而数据处理单元可 以通过硬件电路来实现这些计算操作,从而提高神经网络的计算性能和效率; - 除了激活函数计算之外,数据处理单元还提供了一些其他的函数,例如
Softmax
、转置、 数据格式转换等。这些函数通常被用于神经网络模型的构建和优化过程中,例如将模型的输出 转换为概率分布、重新排列张量的维度、将数据从一种格式转换为另一种格式等。
- 数据处理单元是一种硬件电路,用于加速神经网络的计算过程。它通常被用于处理前向计算过程中的单个数据,例如卷积层和全连接层中的激活函数计算。不同的激活函数需要不同的 计算操作,例如
2.3.3 平面处理单元(Planar Processing Unit,PPU
)
平面处理单元(Planar Processing Unit
)主要提供对数据处理单元的输出数据进行平面操作的功能,例如平均池化、最大值池化、最小值池化等。
平面处理单元是一种硬件电路,用于加速神经网络的计算过程。它通常被用于对数据处理 单元的输出数据进行平面操作,例如在卷积神经网络中,对卷积层的输出进行池化操作,以降 低数据维度和减少计算量。平面处理单元可以通过硬件电路来实现这些操作,从而提高神经网 络的计算性能和效率。
平面处理单元支持多种平面操作,例如平均池化、最大值池化、最小值池化等。这些操作 可以通过不同的参数来控制池化窗口的大小和步幅等,从而适应不同的应用场景和要求。
2.4 NPU
性能计算
NPU
(Neural Processing Unit
)是专门用于神经网络计算的处理器,其算力是指每秒可以处理的运算次数,通常以TOPS
(Tera Operations Per Second
)为单位进行衡量。
每个周期的理论峰值性能为Perf=MACs*2(ops/cycle)
,其中MACs
表示每个周期内可以达到的乘加操作次数,在前面RKNPU
介绍 章节已经对单个周期的每个数据类型可以进行的乘加操作次数进行了列举,而算力指的是运算的次数,所以要将乘加操作分解为一次乘法和一次加法,也就是最后乘以2
的由来。当NPU
的频率为f
时,则每秒的理论峰值性能为Perf=MACs*2*f(ops/s)
。
以RK3588 int 8
数据类型为例进行性能计算演示:
RK3588
每个周期可进行1024x3
个int8 MAC
操作;RK3588
的NPU
算力为1G HZ
;- 理论峰值性能计算公式为
Perf=MACs*2*f(ops/s)
;
综上RK3588 int 8
理论峰值性能为Perf=1024x3x1G×2 = 6 TOPS
,6 TOPS
即每秒处理6
万亿次操作
2.5 RKNPU
应用领域
Rockchip NPU
是一种专门用于深度学习应用的高性能处理器,并且在多个应用场景中都有广泛的应用。

2.5.1 计算机视觉
计算机视觉RKNPU
最常见的应用场景之一。其主要应用包括:
- 图像分类:将图像分成不同的类别。例如,将一张图片分成猫、狗、马等不同的类别;
- 目标检测:检测图像中不同物体的位置和类别。例如,检测图像中的人、汽车、建筑等;
- 图像分割:将图像中的不同物体分割出来。例如,将一张街景图片分割成不同的车辆、 建筑、行人等。
- 人脸识别:识别图像中的人脸并将其与已知的人脸进行匹配。
- 行为识别:识别视频中的不同行为,例如人的走路、跑步、跳舞等。
2.5.2 语音识别
语音识别是另一个常见的RKNPU
应用场景。其主要应用包括:
- 语音识别:将语音信号转换成文字;
- 语音合成:根据文字生成语音信号;
- 说话人识别:识别语音信号的说话人身份。
2.5.3 自然语言处理
RKNPU
也可以用于自然语言处理。其主要应用包括:
- 情感分析:判断一段文本表达的情感是正面、负面还是中性;
- 文本分类:将文本分成不同的类别。例如,将一封电子邮件分为垃圾邮件和非垃圾邮件;
- 文本生成:根据给定的文本生成新的文本,例如自动写作、机器翻译等;
- 机器翻译:将一种语言的文本翻译成另一种语言的文本。
2.5.4 医疗保健
在医疗保健领域,可以用于:
- 疾病预测:利用患者的病历和生理数据等信息预测患者的疾病风险和病情发展;
- 医学影像分析:对医学影像数据进行分析和识别,例如
CT
、MRI
等; - 药物发现:利用深度学习模型预测分子与靶点之间的相互作用,从而加速药物研发;
- 基因组学:利用深度学习模型对基因序列进行分析和预测,例如基因突变、基因表达等。
2.5.5 金融服务
在金融服务领域,可以用于:
- 风险评估:利用深度学习模型对客户信用、还款能力等进行评估;
- 欺诈检测:利用深度学习模型检测信用卡欺诈、账户盗用等非法行为;
- 股票预测:利用深度学习模型预测股票价格和趋势;
- 投资组合优化:利用深度学习模型对投资组合进行优化,降低风险并提高收益。
三 RKNPU
推理软件框架

3.1 RKNPU
硬件层
有关NPU
硬件前文以纪念馆进行了详细介绍,这里不重复介绍。
3.2 RKNPU
驱动层
RKNPU
的驱动层是连接上层应用和RKNPU
硬件的桥梁。驱动层的主要作用是将应用程序需要推理的内容提交给 RKNPU
进行计算,从而加速神经网络的训练和推理过程。
具体来说,驱动层需要完成以下任务:
- 硬件初始化:驱动层需要初始化
RKNPU
硬件,包括设置寄存器、分配内存等操作,以确保RKNPU
可以正常工作; - 数据传输:驱动层需要将数据从主机内存传输到
RKNPU
内存中,以便进行计算。在计算完成后,驱动层还需要将计算结果传输回主机内存; - 计算任务调度:驱动层需要根据应用程序的需求,管理和分配
RKNPU
的计算资源,以确保多个计算任务之间不会互相干扰。
3.3 RKNPU
应用层
RKNPU
应用层由AI
应用程序、RKNN API
以及运行时所需要的库所组成。
开发者通过调用瑞芯微提供好的API
接口进行AI
应用的开发,瑞芯微分别提供了C
语言和python
语言这两种 API
帮助开发者进行嵌入式设备部署,python
语言提供的接口较为简单, 旨在帮助用户进行前期的模型检测、测试以及应用调试,而要想得到更好的效果从而真正应用到实际项目中就要使用C API
接口了。
而无论是由C API
接口还是python
的API
接口编写的应用程序,要想实际运行都需要相应的动态库,动态库包含这些API
的具体实现,这些动态库由瑞芯微所提供。而我们只需要根据 瑞芯微所提供的API
编写对应的应用程序即可。
3.4 RKNN
组件介绍
瑞芯微官方提供的RKNN
组件包括 RKNPU2
、 RKNN Toolkit2
、 RKLLM-Toolkit
和RKNPU
驱动等。
RKNPU2
开发套件有一个运行库(librknnrt.so
等),提供c/c++
编程接口,用来部署推理RKNN
模型,接口适用于Linux
或者Android
系统;RKNN Toolkit2
开发套件(Python
接口)提供了在PC
,Rockchip NPU
平台上进行模型转换、量化功能、模型推理、性能和内存评估、量化精度分析、模型加密等功能。 该套件中还有一个RKNN Toolkit Lite2
,它提供了一个Python
编程接口,可以在板端部署RKNN
模型;RKLLM-Toolkit
是为用户提供在计算机上进行大语言模型(Large Language Model
,LLM
)的量化、转换的开发套件,支持将Hugging Face
格式的大语言模型转换为RKLLM
模型;RKNPU
驱动提供了NPU
硬件接口程序,板卡系统固件都已经适配好。
另外,还有 RKNN Model Zoo
模型仓库,是基于RKNN
工具链开发,提供了目前主流算法的部署例程(包括Python API
和C API
例程)。
3.4.1 RKNN
模型
RKNN
(Rockchip Neural Network
)是瑞芯微公司开发的一种神经网络模型格式,它可以将常见的深度学习模型转换为适用于瑞芯微的AI
加速器RKNPU
的模型格式。RKNN
模型的优点是在保证精度的同时,可以实现高效的推理和低功耗的计算。
下面是RKNN
模型的详细介绍:
RKNN
模型的文件格式:RKNN
模型使用自定义的文件格式来表示神经网络模型。它将神经网络模型划分为两个部分:静态部分和动态部分;静态部分包括模型的网络结构和权重,而动态部分包括输入输出的形状和类型等信息。使用这种格式可以减少模型的存储空间和加载时间;RKNN
模型的转换工具:为了将其他常见的深度学习模型转换为RKNN
模型,瑞芯微提供了一个转换工具RKNN-Toolkit2
。该工具支持将TensorFlow
、Caffe
、MXNet
等框架训练出来的模型转换为RKNN
模型,并且支持对模型进行量化、融合等优化操作,以提高运行效率;RKNN
模型的部署和推理:RKNN
模型可以通过RKNPU
硬件进行高效的推理。在部署RKNN
模型时,开发者需要使用RKNPU
提供的SDK
,并调用相应的API
接口来加载和运行RKNN
模型。 由于RKNPU
硬件的优化,RKNN
模型可以实现高效的推理和低功耗的计算。
对于Caffe
、TensorFlow
等其他模型,想要在RK3588
平台运行,需要先进行模型转换。可以使用RKNN-Toolkit2
工具将模型转换成RKNN
格式。
3.4.2 RKNN-Toolkit2
工具
RKNN-Toolkit2
是为用户提供在PC
、Rockchip NPU
平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的Python
接口可以便捷地完成各种操作。
工具的全部功能简单介绍如下:
- 模型转换:支持
Caffe
、TensorFlow
、TensorFlow Lite
、ONNX
、DarkNet
、PyTorch
等模型转为RKNN
模型,并支持RKNN
模型导入导出,RKNN
模型能够在Rockchip NPU
平台上加载使用; - 量化功能: 支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化 (
asymmetric_quantized-8
及asymmetric_quantized-16
),并支持混合量化功能 。asymmetric_quantized-16
目前版本暂不支持; - 模型推理:能够在
PC
上模拟Rockchip NPU
运行RKNN
模型并获取推理结果; 或将RKNN
模型分发到指定的NPU
设备上进行推理并获取推理结果; - 性能评估:将
RKNN
模型分发到指定NPU
设备上运行,以评估模型在实际设备上运行时的性能; - 内存评估:评估模型运行时的内存的占用情况。使用该功能时,必须将
RKNN
模型分发到NPU
设备中运行,并调用相关接口获取内存使用信息; - 量化精度分析:该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路;
系统依赖:RKNN-Toolkit2
目前版本适用系统ubuntu 18.04(x64)
及以上,工具只能安装在PC
上,暂不支持 Windows
、MacOS
、Debian
等操作系统;
python
版本:3.6~3.11
;
python
依赖库:详见rknn-toolkit2/packages/packages/x86_64/requirements_xx
,比如:requirements_cp310-2.3.0.txt
:
# if install failed, please change the pip source to 'https://pypi.tuna.tsinghua.edu.cn/simple/'
# base deps
protobuf>=4.21.6,<=4.25.4
# utils
psutil>=5.9.0
ruamel.yaml>=0.17.21
scipy>=1.9.3
tqdm>=4.64.1
opencv-python>=4.5.5.64
fast-histogram>=0.11
numpy<=1.26.4
# base
onnx>=1.10.0
onnxruntime>=1.12.0
torch>=1.10.1,<=2.4.0
# tensorflow>=2.8.0rc0,<=2.14.0
四、搭建RK3588 RKNPU
开发环境
RK3588
内置NPU
模块处理性能最高可达6TOPS
(即每秒处理6
万亿次操作)。这款NPU
不仅拥有强大的计算能力,支持TensorFlow
、Caffe
、Tflite
、Pytorch
、Onnx NN
、Android NN
等常见框架。
使用该NPU
需要下载RKNN SDK
,RKNN SDK
为带有NPU
的RK3588S/RK3588
芯片平台提供编程接口,能够帮助用户部署使用RKNN-Toolkit2
导出的RKNN
模型,加速AI
应用的落地。
在PC
端主要是进行模型训练和模型转换等,可以选择Windows
系统,或者Windows
上的虚拟机ubuntu
,Docker
的linux
系统,或者云服务器等等。
在PC
端需要安装常用软件和库,比如pycharm
、Python
、交叉编译器等, 安装一些深度学习框架,比如Pytorch
,TensorFlow
,PaddlePaddle
等等。 各种软件的使用,建议创建虚拟环境来隔离,常用Python
虚拟环境和Anaconda
或者Miniconda
。
在开发板上,系统使用ubuntu
或者debian
,内核默认适配rknn
驱动,其它rknn
相关组件均包含。 另外,还有一些常用的软件和库,例如python
,cmake
,make
,gcc
,opencv
等等。
4.1 RKNN
开发流程

深度学习模型工作流程大致可分为训练和推理,而在板块上部署模型,具体的步骤如下:
- 模型训练:模型训练前需要根据具体项目问题,选择模型,数据采集,然后使用适合的深度学习框架进行模型训练, 其中关于
RKNN
模型算子的支持请参考RKNN_Compiler_Support_Operator_List
。 - 模型转换:将训练的深度学习模型会被转化为
RKNN
格式的模型; - 模型评估:将使用
RKNN-Toolkit2
工具量化和分析模型性能,包括精度、连板推理性能和内存占用等关键指标, 根据模型的评估尝试修改和优化模型,一些模型的优化可以参考下RKNPU_User_Guide_RKNN_SDK
。 - 板端推理:将转换的
RKNN
模型部署到板卡上,具体可以查看下rknpu
运行库和RKNN-Toolkit-lite2
的使用。
后面教程测试,PC端是使用ubuntu 22.04
、Python3.8
, 进行模型训练和转换,开发板系统是以debian11
、ubuntu 20.04
为主,进行部署推理测试。
4.2 软件包安装
4.2.1 ubuntu 22.04
操作系统自行安装ubuntu 22.04
,安装完成后查看:
root@ubuntu:/work# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
4.2.2 安装Anaconda
Anaconda
是一个用于科学计算的python
发行版,支持linux
,mac
,windows
系统,提供了包管理和环境管理的功能,Anaconda
是一个打包的集合,里面装好了conda
,某个版本的python
,众多的packages
等,科学计算工具等。
下载中科大镜像:http://mirrors.ustc.edu.cn/
;
从archive
路径下载Anaconda3-2023.03-0-Linux-x86_64.sh
;
root@ubuntu:/work# wget https://mirrors.ustc.edu.cn/anaconda/archive/Anaconda3-2023.03-0-Linux-x86_64.sh
开始安装:
root@ubuntu:/work# sh Anaconda3-2023.03-0-Linux-x86_64.sh
然后回车,一直往下滑动看完license
,最后输入yes
后,继续按下回车,然后进入安装,安装完成后输入yes
初始化anaconda3
。
后面选择安装路径,我是安装到/work/anaconda3
文件夹下:
>>> yes
Anaconda3 will now be installed into this location:
/root/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/root/anaconda3] >>> /work/anaconda3 PREFIX=/work/anaconda3
Unpacking payload ...
.......
执行到这里说明已经安装成功;
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes
no change /work/anaconda3/condabin/conda
no change /work/anaconda3/bin/conda
no change /work/anaconda3/bin/conda-env
no change /work/anaconda3/bin/activate
no change /work/anaconda3/bin/deactivate
no change /work/anaconda3/etc/profile.d/conda.sh
no change /work/anaconda3/etc/fish/conf.d/conda.fish
no change /work/anaconda3/shell/condabin/Conda.psm1
no change /work/anaconda3/shell/condabin/conda-hook.ps1
no change /work/anaconda3/lib/python3.10/site-packages/xontrib/conda.xsh
no change /work/anaconda3/etc/profile.d/conda.csh
modified /root/.bashrc
==> For changes to take effect, close and re-open your current shell. <==
If you'd prefer that conda's base environment not be activated on startup,
set the auto_activate_base parameter to false:
conda config --set auto_activate_base false
Thank you for installing Anaconda3!
4.2.3 创建虚拟环境(python 3.10
)
输入命令:
root@ubuntu:/work# conda create -n toolkit2_3 python=3.10
其中:
toolkit2_3
是环境名;3.10
是python
版本。
4.2.4 下载RKNN
相关仓库
获取RKNN-Toolkit2
安装包:
root@ubuntu:/work/sambashare/rknpu# git clone https://github.com/airockchip/rknn-toolkit2 --depth 1
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# ll
drwxr-xr-x 4 root root 4096 11月 11 11:58 autosparsity/
-rw-r--r-- 1 root root 5201 11月 11 11:58 CHANGELOG.md
drwxr-xr-x 2 root root 4096 11月 11 11:58 doc/
-rw-r--r-- 1 root root 35 11月 11 11:58 .gitignore
-rw-r--r-- 1 root root 1301 11月 11 11:58 LICENSE
-rw-r--r-- 1 root root 3169 11月 11 11:58 README.md
drwxr-xr-x 2 root root 4096 11月 11 11:58 res/
drwxr-xr-x 5 root root 4096 11月 11 11:58 rknn-toolkit2/
drwxr-xr-x 4 root root 4096 11月 11 11:58 rknn-toolkit-lite2/
drwxr-xr-x 4 root root 4096 11月 11 11:58 rknpu2/
获取RKNN Model Zoo
安装包:
root@ubuntu:/work/sambashare/rknpu# git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
4.2.4.1 rknn-toolkit2
RKNN-Toolkit2
资料包如下;
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# ll rknn-toolkit2
-rw-r--r-- 1 root root 20441 1月 12 11:20 CHANGELOG.txt
drwxr-xr-x 3 root root 4096 1月 12 11:20 docker/
drwxr-xr-x 9 root root 4096 1月 12 11:20 examples/
drwxr-xr-x 2 root root 4096 1月 12 11:20 packages/
4.2.4.2 rknn_toolkit_lite2
RKNN-Toolkit lite2
资料包如下;
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# ll rknn_toolkit_lite2/
-rw-r--r-- 1 root root 890 1月 12 11:20 CHANGELOG.txt
drwxr-xr-x 4 root root 4096 1月 12 11:20 examples/
drwxr-xr-x 2 root root 4096 1月 12 11:20 packages/
4.2.4.3 rknpu2
rknpu2
资料包如下;
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# ll rknpu2/
drwxr-xr-x 17 root root 4096 11月 11 11:58 examples/
-rw-r--r-- 1 root root 64 11月 11 11:58 rknpu.mk
drwxr-xr-x 4 root root 4096 11月 11 11:58 runtime/
4.3 安装RKNN-Toolkit2
环境
激活环境中,命令为:
root@ubuntu:/work# conda activate toolkit2_3
提示:在进行后续操作之前,一定要先进入刚创建的环境,不然后面的操作是在默认环境base
上进行。
4.3.1 安装依赖
安装相关库和软件包:
root@ubuntu:/work# apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 \
libgl1-mesa-glx libprotobuf-dev gcc
4.3.2 安装python
依赖
配置pip
源:
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# conda activate toolkit2_3
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
pip
安装指定版本的库(教程测试时toolkit2
版本是2.3
,请根据python
版本选择文件安装);
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# cd rknn-toolkit2
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2# pip3 install -r packages/x86_64/requirements_cp310-2.3.0.txt
4.3.3 安装RKNN-Toolkit2
需要根据python
版本和rknn_toolkit2
版本选择whl
文件;
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2# pip3 install packages/x86_64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
检查RKNN-Toolkit
是否安装成功:
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2# python
Python 3.10.16 (main, Dec 11 2024, 16:24:50) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rknn.api import RKNN
>>>
如果RKNN
模块没有失败,说明安装成功。
4.4 安装板端RKNPU2
在进行如下操作前,需要给开发板烧录debian
系统,系统编译参考《Rockchip RK3588 - Rockchip Linux SDK
编译》,编译完成会在rockdev
目录下生成如下文件;
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ll rockdev/
lrwxrwxrwx 1 root root 21 1月 2 21:43 boot.img -> ../../kernel/boot.img
lrwxrwxrwx 1 root root 44 7月 19 2024 MiniLoaderAll.bin -> ../../u-boot/rk3588_spl_loader_v1.13.112.bin
-rw-r--r-- 1 root root 49152 7月 19 2024 misc.img
-rw-r--r-- 1 root root 17457152 7月 19 2024 oem.img
lrwxrwxrwx 1 root root 49 7月 19 2024 parameter.txt -> ../../device/rockchip/.chips/rk3588/parameter.txt
lrwxrwxrwx 1 root root 67 7月 19 2024 recovery.img -> ../../buildroot/output/rockchip_rk3588_recovery/images/recovery.img
lrwxrwxrwx 1 root root 30 1月 19 13:19 rootfs.img -> ../../debian/linaro-rootfs.img
lrwxrwxrwx 1 root root 22 7月 19 2024 uboot.img -> ../../u-boot/uboot.img
lrwxrwxrwx 1 root root 26 7月 19 2024 update.img -> ../update/Image/update.img
-rw-r--r-- 1 root root 4472832 7月 19 2024 userdata.img
这里我只重新烧录根文件系统,接着按如下步骤操作;
- 找到开发板的电源接口,连接开发板电源适配器;
- 使用
Type C
数据线连接开发板与计算机; - 按住
Mask
键再长POWER
键给开发版供电(保持按下Mask
键5
秒以上),将强制进入Maskrom
模式;
使用upgrade_tool
工具进行烧录:
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ./tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool ul ./rockdev/MiniLoaderAll.bin -noreset
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ./tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool di -rootfs ./rockdev/rootfs.img
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp#
./tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool di -userdata userdata.img
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ./tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool rd
最后我们重启开发板,进入debian
系统。如果不知道秘密是多少,可以连接串口,重新设置密码;
root@armsom-sige7:/# passwd
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
这里我直接将root
账号密码设置为root
。此外,系统还有一个普通用户:armsom/armsom
。
配置/etc/resolv.conf
文件;
root@armsom-sige7:/# vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
root@armsom-sige7:/# systemctl restart networking
4.4.1 确认RKNPU2
驱动版本
可以在板端执行以下命令查询RKNPU2
驱动版本:
root@armsom-sige7:~# dmesg | grep -i rknpu
[ 3.746154] RKNPU fdab0000.npu: Adding to iommu group 0
[ 3.746305] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[ 3.747582] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff]
[ 3.747606] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff]
[ 3.747624] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff]
[ 3.747957] [drm] Initialized rknpu 0.9.2 20230825 for fdab0000.npu on minor 1
[ 3.751409] RKNPU fdab0000.npu: RKNPU: bin=0
[ 3.751618] RKNPU fdab0000.npu: leakage=9
[ 3.751766] debugfs: Directory 'fdab0000.npu-rknpu' with parent 'vdd_npu_s0' already present!
[ 3.759181] RKNPU fdab0000.npu: pvtm=890
[ 3.764006] RKNPU fdab0000.npu: pvtm-volt-sel=4
[ 3.766556] RKNPU fdab0000.npu: avs=0
[ 3.766999] RKNPU fdab0000.npu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
[ 3.775298] RKNPU fdab0000.npu: failed to find power_model node
[ 3.775331] RKNPU fdab0000.npu: RKNPU: failed to initialize power model
[ 3.775355] RKNPU fdab0000.npu: RKNPU: failed to get dynamic-coefficient
如下图所示,当前RKNPU2
驱动版本为0.9.2
;
[ 3.747957] [drm] Initialized rknpu 0.9.2 20230825 for fdab0000.npu on minor 1
Rockchip
开发板的官方固件均自带RKNPU2
驱动。若以上命令查询不到NPU
驱动版本,则可能使用的是第三方固件,其中可能没有安装NPU
驱动。
如果有固件源码,可以在kernel config
中将CONFIG_ROCKCHIP_RKNPU
选项的值改成y
以集成NPU
驱动,然后重新编译内核驱动并烧录。建议RKNPU2
驱动版本>= 0.9.2
。
4.4.2 adb
驱动安装
安装adb
驱动到PC
端ubuntu
系统;
root@ubuntu:/work# sudo apt-get install android-tools-adb
检查安装是否成功:
root@ubuntu:/work# adb version
Android Debug Bridge version 1.0.41
Version 28.0.2-debian
Installed as /usr/lib/android-sdk/platform-tools/adb
在PC
端ubuntu
系统执行如下命令:
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# adb devices
List of devices attached
如果RK3588
无法被识别为adb
设备,开发板debian
系统添加:
root@armsom-sige7:~# vim /etc/init.d/.usb_config
usb_adb_en
use_hid_en
再次执行如下命令:
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# adb devices
List of devices attached
a91b637f99bdf965 device
连接成功时输出信息如下,其中a91b637f99bdf965
为RK3588
的设备ID
。
4.4.3 检查RKNPU2
环境是否安装
RKNN-Toolkit2
的连板调试功能要求板端已安装RKNPU2
环境,并且启动rknn_server
服务。
以下是RKNPU2
环境中的两个基本概念:
RKNN Server
:一个运行在开发板上的后台代理服务。该服务的主要功能是调用板端Runtime
对应的接口处理计算机通过USB
传输过来的数据,并将处理结果返回给计算机;RKNPU2 Runtime
库(librknnrt.so
):主要职责是负责在系统中加载RKNN
模型,并通过调用专用的神经处理单元(NPU
)执行RKNN
模型的推理操作;
如果板端没有安装RKNN Server
和Runtime
库,或者RKNN Server
和Runtime
库的版本不一致,都需要重新安装RKNPU2
环境。
注意:
- 若使用动态维度输入的
RKNN
模型,则要求RKNN Server
和Runtime
库版本>= 1.5.0
; - 要保证
RKNN Server
、Runtime
库的版本、RKNN-Toolkit2
的版本是一致的,建议都安装最新的版本;
通常情况下,开发板默认已经安装版本一致的RKNPU2
环境,可以通过下面命令确认(如果没有安装RKNPU2
环境或者版本不一致,请按照下一节中的步骤来安装/更新RKNPU2
环境):
4.4.3.1 检查RKNPU2
环境是否安装
如果能够启动rknn_server
服务,则代表板端已经安装RKNPU2
环境。
# PC ubuntu进入板端
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# adb shell
root@armsom-sige7:/#
# 启动 rknn_server
root@armsom-sige7:/# restart_rknn.sh
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
2022-01-12 数据库mysql转为postgresql变动