程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Rockchip RK3588 - Rockchip RKNN快速上手

----------------------------------------------------------------------------------------------------------------------------

开发板 :ArmSoM-Sige7开发板
eMMC64GB
LPDDR48GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot2017.09
linux5.10
----------------------------------------------------------------------------------------------------------------------------

在《Rockchip RK3588 - Rockchip Linux SDK Buildroot文件系统构建》我们对Buildroot文件系统进行了详细的介绍,不过不知道你有没有留意到在配置环节【配置Target packages】中,需要配置Rockchip板级支持包,这些板级支持包是由Rockchip提供的,本节的目的实际上就是研究部分核心板级支持包,比如OpenGL ESrknpu

至于为什么去研究这些很简单,比如我们自己在做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,还有一堆其它的编译选项,比如rknpuOpenGL 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把编译出来的的binlib拷贝到指定目录。

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_serverlibrknn_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.shlibrknnrt.so,并且这些文件并不是编译得到的,因此我们是无法查看其实现。

二、RKNPU介绍

2.1 NPU的由来

NPUNerual Processing Unit)是一种专门用于加速神经网络计算的处理器。

在深度学习技术刚开始流行的时候,人们主要使用通用计算设备,如CPUGPU,来执行神经网络计算。但是,随着神经网络的复杂度和规模不断增加,传统的计算设备已经不能满足快速、高效地执行神经网络计算的需求。因此,研究人员开始探索如何设计一种专门用于加速神经网络计算的处理器,这就是NPU的由来。

早期的NPU主要是基于FPGAField Programmable Gate Array)实现的。FPGA 是一种可编程逻辑器件,可以通过编程实现各种不同的电路功能。由于FPGA具有高度的灵活性和可编程 性,可以用于实现各种不同类型的神经网络处理器。

2010年,斯坦福大学的研究人员提出了一种基于FPGA的神经网络加速器,可以实现高效的神经网络计算。此后,越来越多的研究人员开始尝试使用FPGA实现NPU

随着深度学习技术的不断发展和普及,NPU的研究和开发也取得了越来越多的进展;

  • 2013年,Google发布了一篇论文,介绍了一种名为Tensor Processing UnitTPU)的定制芯片,专 门用于加速深度学习模型的训练和推理。TPU采用了特定的硬件架构和优化算法,可以实现高效、低功耗的神经网络计算。TPU的成功引起了业界的广泛关注,也促进了NPU的发展。 随后,其他公司也开始研发自己的NPU
  • 2015年,华为发布了一款名为Kirin 950的处理 器,集成了一种名为Neural Processing UnitNPU)的模块,用于加速神经网络计算;
  • 2017年,苹果公司在2017年发布的A11芯片中集成了神经网络处理器,用于支持人脸识别等功能;
  • 2018年,华为推出了全新的昇腾(Ascend)系列处理器,其中包括专门用于加速深度学习计算的NPU模块。同年,英伟达推出了名为TensorCore的加速器,用于加速深度学习模型的训练和推理;

随着NPU技术的不断发展和普及,越来越多的公司开始将NPU集成到自己的芯片中,以 速神经网络计算。瑞芯微为了满足人工智能的需要,瑞芯微的处理器也逐渐集成了NPU,而瑞芯微处理器内置的NPU,就被称之为RKNPU

2.2 RKNPU介绍

到目前为止,RKNPU已经经过了几代的发展,趋近成熟;

  • RK3399proRK1808初次引入了RKNPU,相比传统的 CPUGPU ,在深度学习运算能力上有比较大幅度的提升;
  • 接下来在RV1109RV1126上使用了第二代NPU,提升了NPU的利用 率;
  • 第三代NPU应用在RK3566RK3568上,搭载全新NPU自研架构;
  • RK3588搭载的 为第四代NPU,提高了带宽利用率,支持了多核扩展。

RKNPU具体发展过程如下图所示:

img

RKNPU1.0RKNPU2.0被划分为了RKNPU,而RKNPU3.0RKNPU4.0RKNPU5.0被划分为了RKNPU2RKNPURKNPU2所使用的SDK和工具套件不同。

RK3568RK3588NPU具有的功能如下:

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三核架构如下图所示:

img

2.3 RKNPU单核框架

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

img
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 AcceleratorCNA)是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 ReLUReLU、 ReluXSigmoidTanh等。它还提供了一些功能,例如Softmax、转置、数据格式转换等;
    • 数据处理单元是一种硬件电路,用于加速神经网络的计算过程。它通常被用于处理前向计算过程中的单个数据,例如卷积层和全连接层中的激活函数计算。不同的激活函数需要不同的 计算操作,例如ReLU需要计算max(0,x)Sigmoid需要计算 1/(1+exp(-x)),而数据处理单元可 以通过硬件电路来实现这些计算操作,从而提高神经网络的计算性能和效率;
    • 除了激活函数计算之外,数据处理单元还提供了一些其他的函数,例如Softmax、转置、 数据格式转换等。这些函数通常被用于神经网络模型的构建和优化过程中,例如将模型的输出 转换为概率分布、重新排列张量的维度、将数据从一种格式转换为另一种格式等。
2.3.3 平面处理单元(Planar Processing Unit,PPU

平面处理单元(Planar Processing Unit)主要提供对数据处理单元的输出数据进行平面操作的功能,例如平均池化、最大值池化、最小值池化等。

平面处理单元是一种硬件电路,用于加速神经网络的计算过程。它通常被用于对数据处理 单元的输出数据进行平面操作,例如在卷积神经网络中,对卷积层的输出进行池化操作,以降 低数据维度和减少计算量。平面处理单元可以通过硬件电路来实现这些操作,从而提高神经网 络的计算性能和效率。

平面处理单元支持多种平面操作,例如平均池化、最大值池化、最小值池化等。这些操作 可以通过不同的参数来控制池化窗口的大小和步幅等,从而适应不同的应用场景和要求。

2.4 NPU性能计算

NPUNeural Processing Unit)是专门用于神经网络计算的处理器,其算力是指每秒可以处理的运算次数,通常以TOPSTera 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操作;
  • RK3588NPU算力为1G HZ
  • 理论峰值性能计算公式为Perf=MACs*2*f(ops/s)

综上RK3588 int 8理论峰值性能为Perf=1024x3x1G×2 = 6 TOPS6 TOPS即每秒处理6万亿次操作

2.5 RKNPU应用领域

Rockchip NPU是一种专门用于深度学习应用的高性能处理器,并且在多个应用场景中都有广泛的应用。

img
2.5.1 计算机视觉

计算机视觉RKNPU最常见的应用场景之一。其主要应用包括:

  • 图像分类:将图像分成不同的类别。例如,将一张图片分成猫、狗、马等不同的类别;
  • 目标检测:检测图像中不同物体的位置和类别。例如,检测图像中的人、汽车、建筑等;
  • 图像分割:将图像中的不同物体分割出来。例如,将一张街景图片分割成不同的车辆、 建筑、行人等。
  • 人脸识别:识别图像中的人脸并将其与已知的人脸进行匹配。
  • 行为识别:识别视频中的不同行为,例如人的走路、跑步、跳舞等。
2.5.2 语音识别

语音识别是另一个常见的RKNPU应用场景。其主要应用包括:

  • 语音识别:将语音信号转换成文字;
  • 语音合成:根据文字生成语音信号;
  • 说话人识别:识别语音信号的说话人身份。
2.5.3 自然语言处理

RKNPU也可以用于自然语言处理。其主要应用包括:

  • 情感分析:判断一段文本表达的情感是正面、负面还是中性;
  • 文本分类:将文本分成不同的类别。例如,将一封电子邮件分为垃圾邮件和非垃圾邮件;
  • 文本生成:根据给定的文本生成新的文本,例如自动写作、机器翻译等;
  • 机器翻译:将一种语言的文本翻译成另一种语言的文本。
2.5.4 医疗保健

在医疗保健领域,可以用于:

  • 疾病预测:利用患者的病历和生理数据等信息预测患者的疾病风险和病情发展;
  • 医学影像分析:对医学影像数据进行分析和识别,例如CTMRI等;
  • 药物发现:利用深度学习模型预测分子与靶点之间的相互作用,从而加速药物研发;
  • 基因组学:利用深度学习模型对基因序列进行分析和预测,例如基因突变、基因表达等。
2.5.5 金融服务

在金融服务领域,可以用于:

  • 风险评估:利用深度学习模型对客户信用、还款能力等进行评估;
  • 欺诈检测:利用深度学习模型检测信用卡欺诈、账户盗用等非法行为;
  • 股票预测:利用深度学习模型预测股票价格和趋势;
  • 投资组合优化:利用深度学习模型对投资组合进行优化,降低风险并提高收益。

RKNPU推理软件框架

img

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接口还是pythonAPI接口编写的应用程序,要想实际运行都需要相应的动态库,动态库包含这些API的具体实现,这些动态库由瑞芯微所提供。而我们只需要根据 瑞芯微所提供的API编写对应的应用程序即可。

3.4 RKNN组件介绍

瑞芯微官方提供的RKNN组件包括 RKNPU2RKNN Toolkit2RKLLM-ToolkitRKNPU驱动等。

  • RKNPU2开发套件有一个运行库(librknnrt.so等),提供c/c++编程接口,用来部署推理RKNN模型,接口适用于Linux或者Android系统;
  • RKNN Toolkit2开发套件(Python接口)提供了在PCRockchip NPU平台上进行模型转换、量化功能、模型推理、性能和内存评估、量化精度分析、模型加密等功能。 该套件中还有一个RKNN Toolkit Lite2 ,它提供了一个Python编程接口,可以在板端部署RKNN模型;
  • RKLLM-Toolkit是为用户提供在计算机上进行大语言模型(Large Language Model,LLM)的量化、转换的开发套件,支持将Hugging Face格式的大语言模型转换为RKLLM模型;
  • RKNPU驱动提供了NPU硬件接口程序,板卡系统固件都已经适配好。

另外,还有 RKNN Model Zoo 模型仓库,是基于RKNN工具链开发,提供了目前主流算法的部署例程(包括Python APIC API例程)。

3.4.1 RKNN模型

RKNNRockchip Neural Network)是瑞芯微公司开发的一种神经网络模型格式,它可以将常见的深度学习模型转换为适用于瑞芯微的AI加速器RKNPU的模型格式。RKNN模型的优点是在保证精度的同时,可以实现高效的推理和低功耗的计算。

下面是RKNN模型的详细介绍:

  • RKNN模型的文件格式:RKNN模型使用自定义的文件格式来表示神经网络模型。它将神经网络模型划分为两个部分:静态部分和动态部分;静态部分包括模型的网络结构和权重,而动态部分包括输入输出的形状和类型等信息。使用这种格式可以减少模型的存储空间和加载时间;
  • RKNN模型的转换工具:为了将其他常见的深度学习模型转换为RKNN模型,瑞芯微提供了一个转换工具 RKNN-Toolkit2。该工具支持将TensorFlowCaffeMXNet等框架训练出来的模型转换为RKNN模型,并且支持对模型进行量化、融合等优化操作,以提高运行效率;
  • RKNN模型的部署和推理:RKNN模型可以通过RKNPU硬件进行高效的推理。在部署RKNN模型时,开发者需要使用RKNPU提供的SDK,并调用相应的API接口来加载和运行RKNN模型。 由于RKNPU硬件的优化,RKNN模型可以实现高效的推理和低功耗的计算。
    img

对于CaffeTensorFlow等其他模型,想要在RK3588平台运行,需要先进行模型转换。可以使用RKNN-Toolkit2工具将模型转换成RKNN格式。

3.4.2 RKNN-Toolkit2工具

RKNN-Toolkit2是为用户提供在PCRockchip NPU平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的Python接口可以便捷地完成各种操作。

工具的全部功能简单介绍如下:

  • 模型转换:支持CaffeTensorFlowTensorFlow LiteONNXDarkNetPyTorch等模型转为RKNN模型,并支持RKNN模型导入导出,RKNN模型能够在Rockchip NPU平台上加载使用;
  • 量化功能: 支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化 (asymmetric_quantized-8asymmetric_quantized-16 ),并支持混合量化功能 。asymmetric_quantized-16目前版本暂不支持;
  • 模型推理:能够在PC上模拟Rockchip NPU运行RKNN模型并获取推理结果; 或将RKNN模型分发到指定的NPU设备上进行推理并获取推理结果;
  • 性能评估:将RKNN模型分发到指定NPU设备上运行,以评估模型在实际设备上运行时的性能;
  • 内存评估:评估模型运行时的内存的占用情况。使用该功能时,必须将RKNN模型分发到NPU设备中运行,并调用相关接口获取内存使用信息;
  • 量化精度分析:该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路;

系统依赖:RKNN-Toolkit2目前版本适用系统ubuntu 18.04(x64)及以上,工具只能安装在PC上,暂不支持 WindowsMacOSDebian等操作系统;

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不仅拥有强大的计算能力,支持TensorFlowCaffeTflitePytorchOnnx NNAndroid NN等常见框架。

使用该NPU需要下载RKNN SDKRKNN SDK为带有NPURK3588S/RK3588芯片平台提供编程接口,能够帮助用户部署使用RKNN-Toolkit2导出的RKNN模型,加速AI应用的落地。

PC端主要是进行模型训练和模型转换等,可以选择Windows系统,或者Windows上的虚拟机ubuntuDockerlinux系统,或者云服务器等等。

PC端需要安装常用软件和库,比如pycharmPython、交叉编译器等, 安装一些深度学习框架,比如PytorchTensorFlowPaddlePaddle等等。 各种软件的使用,建议创建虚拟环境来隔离,常用Python虚拟环境和Anaconda或者Miniconda

在开发板上,系统使用ubuntu或者debian,内核默认适配rknn驱动,其它rknn相关组件均包含。 另外,还有一些常用的软件和库,例如pythoncmakemakegccopencv等等。

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.04Python3.8, 进行模型训练和转换,开发板系统是以debian11ubuntu 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发行版,支持linuxmacwindows系统,提供了包管理和环境管理的功能,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.10python版本。
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键给开发版供电(保持按下Mask5秒以上),将强制进入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驱动到PCubuntu系统;

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

PCubuntu系统执行如下命令:

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

连接成功时输出信息如下,其中a91b637f99bdf965RK3588的设备ID

4.4.3 检查RKNPU2环境是否安装

RKNN-Toolkit2的连板调试功能要求板端已安装RKNPU2环境,并且启动rknn_server服务。

以下是RKNPU2 环境中的两个基本概念:

  • RKNN Server:一个运行在开发板上的后台代理服务。该服务的主要功能是调用板端Runtime对应的接口处理计算机通过USB传输过来的数据,并将处理结果返回给计算机;
  • RKNPU2 Runtime库(librknnrt.so):主要职责是负责在系统中加载RKNN模型,并通过调用专用的神经处理单元(NPU)执行RKNN模型的推理操作;

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

注意:

  • 若使用动态维度输入的RKNN模型,则要求RKNN ServerRuntime库版本 >= 1.5.0
  • 要保证RKNN ServerRuntime库的版本、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-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
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-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(607)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
历史上的今天:
2022-01-12 数据库mysql转为postgresql变动
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示