Rockchip RK3588 - 板级支持包之RKNPU

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

开发板 :ArmSoM-Sige7开发板eMMC64GBLPDDR48GB
显示屏 :15.6英寸HDMI接口显示屏u-boot2017.09linux5.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等,你可能好奇这些配置项是用来做什么的,但是请你按住性子往下看下去,我们会在后续文章一一介绍这些编译配置选项。

二、RKNPU介绍

2.1 NPU的由来

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

在深度学习技术刚开始流行的时候,人们主要使用通用计算设备,如CPUGPU,来执行神经网络计算。但是,随着神经网络的复杂度和规模不断增加,传统的计算设备已经不能满足快速、高效地执行神经网络计算的需求。因此,研究人员开始探索如何设计一种专门用于加速神经网络计算的处理器,这就是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已经经过了几代的发展,趋近成熟;

  • 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性能计算

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操作;
  • 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模型

RKNN(Rockchip 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//requirements*.txt,比如:

#python3.6
cat rknn-toolkit2/packages/requirements_cp36-1.6.0.txt
# if install failed, please change the pip source to 'https://mirror.baidu.com/pypi/simple'

# base deps
protobuf==3.12.2

# utils
psutil>=5.9.0
ruamel.yaml>=0.17.4
scipy>=1.5.4
tqdm>=4.64.0
opencv-python>=4.5.5.64
fast-histogram>=0.11

# base
onnx==1.10.0
onnxoptimizer==0.2.7
onnxruntime==1.10.0
torch==1.10.1

四、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 创建虚拟环境

输入命令:

root@ubuntu:/work# conda create -n toolkit2_1.6 python=3.10

其中:

  • toolkit2_1是环境名;
  • 3.10python版本。

激活环境中,命令为:

root@ubuntu:/work# conda activate toolkit2_1.6

提示:在进行后续操作之前,一定要先进入刚创建的环境,不然后面的操作是在默认环境base上进行。

4.2.4 安装cuda

通过conda search cudatoolkit命令查看可下载的版本:

root@ubuntu:/work# conda search cudatoolkit
Loading channels: done
# Name                       Version           Build  Channel
cudatoolkit                      9.0      h13b8566_0  anaconda/pkgs/main
cudatoolkit                      9.0      h13b8566_0  pkgs/main
cudatoolkit                      9.2               0  anaconda/pkgs/main
cudatoolkit                      9.2               0  pkgs/main
cudatoolkit                 10.0.130               0  anaconda/pkgs/main
cudatoolkit                 10.0.130               0  pkgs/main
cudatoolkit                 10.1.168               0  anaconda/pkgs/main
cudatoolkit                 10.1.168               0  pkgs/main
cudatoolkit                 10.1.243      h6bb024c_0  anaconda/pkgs/main
cudatoolkit                 10.1.243      h6bb024c_0  pkgs/main
cudatoolkit                  10.2.89      hfd86e86_0  anaconda/pkgs/main
cudatoolkit                  10.2.89      hfd86e86_0  pkgs/main
cudatoolkit                  10.2.89      hfd86e86_1  anaconda/pkgs/main
cudatoolkit                  10.2.89      hfd86e86_1  pkgs/main
cudatoolkit                 11.0.221      h6bb024c_0  anaconda/pkgs/main
cudatoolkit                 11.0.221      h6bb024c_0  pkgs/main
cudatoolkit                   11.3.1      h2bc3f7f_2  anaconda/pkgs/main
cudatoolkit                   11.3.1      h2bc3f7f_2  pkgs/main
cudatoolkit                   11.8.0      h6a678d5_0  anaconda/pkgs/main
cudatoolkit                   11.8.0      h6a678d5_0  pkgs/main

开始安装:

root@ubuntu:/work# conda install cudatoolkit=11.0.221

注意:安装之后的CUDA会存放在虚拟环境的lib文件夹 或者include文件夹里面;比如动态库libcudart.so.11.0安装在/work/anaconda3/envs/tf/lib/路径。

4.2.5 安装cudnn

通过conda search cudnn命令查看可下载的版本:

root@ubuntu:/work# conda search cudnn
Loading channels: done
# Name                       Version           Build  Channel
cudnn                          7.0.5       cuda8.0_0  pkgs/main
.......
cudnn                          8.2.1      cuda11.3_0  pkgs/main
cudnn                       8.9.2.26        cuda11_0  pkgs/main
cudnn                       8.9.2.26        cuda12_0  pkgs/main
cudnn                       9.1.1.17        cuda12_0  pkgs/main
cudnn                       9.1.1.17        cuda12_1  pkgs/main

执行命令安装cudnn包:

root@ubuntu:/work# conda install cudnn==8.2.1
4.2.6 安装tensorflow

可以尝试执行如下命令安装:

root@ubuntu:/work# conda install tensorflow==2.8.2

验证是否安装成功:

root@ubuntu:/work# python
Python 3.8.18 (default, Sep 11 2023, 13:20:55)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
>>> cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
>>> print(gpus, cpus)
[] [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]
4.3 RKNN环境搭建
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 下载RKNN-Toolkit

获取RKNN-Toolkit2安装包:

root@ubuntu:/work/sambashare/rknpu# git clone https://github.com/airockchip/rknn-toolkit2
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2# ll
-rw-r--r-- 1 root root 4113  1月 12 11:20 CHANGELOG.md
drwxr-xr-x 2 root root 4096  1月 12 11:20 doc/
drwxr-xr-x 8 root root 4096  1月 12 11:20 .git/
-rw-r--r-- 1 root root 1574  1月 12 11:20 LICENSE
-rw-r--r-- 1 root root 3735  1月 12 11:20 README.md
drwxr-xr-x 2 root root 4096  1月 12 11:20 res/
drwxr-xr-x 5 root root 4096  1月 12 11:20 rknn-toolkit2/
drwxr-xr-x 4 root root 4096  1月 12 11:20 rknn_toolkit_lite2/
drwxr-xr-x 4 root root 4096  1月 12 11:20 rknpu2/

其中:

  • doc目录包含了RKNN-Toolkit2的使用文档,包括更新记录、RKNN算子支持列表、快速入门指南以及使用指导手册;
  • rknn_toolkit_lite2属于RKNN-Toolkit2的一个阉割版。 RKNN Toolkit lite2相较于RKNN-Toolkit2多 了 一 个lite后缀 , 可以简单的理解为RKNN-Toolkit2的阉割版,只保留了推理的功能,可以帮助用户在开发板端进行模型的初步部署和测试。
4.3.2.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/

分别为:

  • examples目录包含了RKNN-Toolkit2的一些示例代码,用于演示RKNN-Toolkit2的一些功能。 通过运行该示例代码,可以帮助用户更好的理解和掌握RKNN-Toolkit2的具体功能和使用方法;
  • packages目录提供了python 3.6python 3.7python 3.8python 3.9python 3.10python 3.11多个版本的安装包;
4.3.2.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/

分别为:

  • examples目录包含了RKNN-Toolkit lite2的示例代码;

  • packages目录提供了python 3.7python 3.8python 3.9python 3.10python 3.11多个版本的安装包,需要注意的是这里的安装包架构为 aarch64,即需要安装在RK3568或者RK3588ubuntu等发行版Linux操作系统上。

最后对RKNN-Toolkit2RKNN-Toolkit lite2进行对比,对比如下:

  • 提供的语言接口都是python语言;
  • RKNN-Toolkit2提供的安装包架构为X86_64,运行在日常使用的PC电脑上,一般情况下安装在虚拟机 ubuntu 上,而RKNN-Toolkit lite2提供的安装包架构为aarch64,运行在RK3568或者RK3588开发板上;
  • RKNN-Toolkit2可以进行模型转换、推理和性能评估,而RKNN-Toolkit lite2只保留了推理功能,用于模型的初步部署和调试。
4.3.3 安装python依赖

安装依赖:

root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/packages# conda activate tf
# 配置pip源
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/packages# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/packages# pip install -r requirements_cp38-1.6.0.txt  -i https://pypi.tuna.tsinghua.edu.cn/simple
4.3.4 安装RKNN-Toolkit2
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/packages# pip install rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl

检查RKNN-Toolkit是否安装成功:

root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/packages# python
Python 3.10.12 (main, Nov  6 2024, 20:22:13) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from rknn.api import RKNN
>>>

如果导RKNN模块没有失败,说明安装成功。

4.4 运行示例

RKNN-Toolkit2自带了一个模拟器,可以用来仿真模型在npu上运行时的行为。

root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2# cd examples/
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples# ll
drwxr-xr-x  4 root root 4096  1月 12 11:20 caffe/
drwxr-xr-x  3 root root 4096  1月 12 11:20 darknet/
drwxr-xr-x 12 root root 4096  1月 12 11:20 functions/
drwxr-xr-x  4 root root 4096  1月 12 11:20 onnx/
drwxr-xr-x  5 root root 4096  1月 12 11:20 pytorch/
-rw-r--r--  1 root root 2006  1月 12 11:20 readme.txt
drwxr-xr-x  4 root root 4096  1月 12 11:20 tensorflow/
drwxr-xr-x  4 root root 4096  1月 12 11:20 tflite/
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples# cd tflite/
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples/tflite# ll
drwxr-xr-x 2 root root 4096  1月 12 11:20 mobilenet_v1/
drwxr-xr-x 2 root root 4096  1月 12 11:20 mobilenet_v1_qat/

这里以mobilenet_v1为例。示例中的mobilenet_v1是一个Tensorflow Lite模型,用于图片分
类,它是在模拟器上运行的。

运行该示例的步骤如下:

(1) 进入mobilenet_v1 目录;

root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples/tflite# cd mobilenet_v1
root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples/tflite/mobilenet_v1# ll
-rw-r--r-- 1 root root       16  1月 12 11:20 dataset.txt
-rw-r--r-- 1 root root    18889  1月 12 11:20 dog_224x224.jpg
-rw-r--r-- 1 root root    25584  1月 12 11:20 labels.txt
-rw-r--r-- 1 root root 16900760  1月 12 11:20 mobilenet_v1_1.0_224.tflite
-rw-r--r-- 1 root root      563  1月 12 11:20 model_config.yml
-rw-r--r-- 1 root root     1092  1月 12 11:20 README.md
-rw-r--r-- 1 root root     2126  1月 12 11:20 test.py

(2) 执行test.py 脚本;

root@ubuntu:/work/sambashare/rknpu/rknn-toolkit2/rknn-toolkit2/examples/tflite/mobilenet_v1# python3 test.py
W __init__: rknn-toolkit2 version: 1.6.0+81f21f4d
--> Config model
done
--> Loading model
2025-01-12 12:36:12.155353: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.10/dist-packages/cv2/../../lib64::/opt/qt6.5/qt-nanopi/lib/
2025-01-12 12:36:12.155434: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.2.1 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

很明显出现了错误,缺少动态库libcudart.so.11.0,安装cuda

sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo dpkg -i cuda-repo-ubuntu2004-11-1-local_11.1.0-455.23.05-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-1-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

参考文章

[1] Rockchip_Quick_Start_RKNN_SDK_V1.3.0_CN.pdf

[2] AI嵌入式人工智能开发 --- 【1】初始RKNPU

[3] Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.3.0.pdf

[4] AI嵌入式RK3588人工智能开发 --- 【2】RKNPU软件推理框架

[5] 嵌入式AI应用开发实战指南

### 升级 Rockchip RK3588NPU 驱动至版本 0.9.8 为了将 Rockchip RK3588NPU 驱动升级到版本 0.9.8,可以按照以下方法操作: #### 检查当前驱动版本 在执行任何升级之前,建议先确认当前安装的 NPU 驱动版本。可以通过以下命令完成此操作: ```bash dmesg | grep -i rknpu cat /sys/kernel/debug/rknpu/version cat /sys/kernel/debug/rknpu/driver_version cat /proc/debug/rknpu/driver_version ``` 这些命令可以帮助验证当前系统的 NPU 驱动状态[^1]。 #### 下载并编译最新版驱动 访问官方 GitHub 存储库获取最新的工具链和支持文件: ```plaintext https://github.com/rockchip-linux/rknn-toolkit https://github.com/rockchip-linux/rknn-toolkit2 ``` 下载完成后,解压源码包,并根据文档中的说明配置环境变量以及必要的依赖项。通常情况下,这一步涉及安装特定的开发工具和库文件[^3]。 #### 安装更新后的驱动程序 对于香橙派 5 (RK3588S),其支持的 NPU 驱动已知可被升级到版本 `0.9.8`。具体步骤可能因设备型号略有不同,但一般流程如下所示: 1. **准备镜像文件**:如果现有固件不包含目标版本,则需重新烧录带有新版驱动的支持镜像; 2. **手动替换模块**:通过交叉编译生成适配于硬件平台的新内核模块 (`rknpu.ko`) 并加载它; 3. **测试功能正常性**:重启系统之后再运行前述指令来核实最终结果是否达到预期标准[^2]。 #### 示例脚本 下面提供一段简单的 Bash 脚本来简化部分过程: ```bash #!/bin/bash # 更新软件包索引 sudo apt update && sudo apt upgrade -y # 获取rknn toolkit资源 git clone https://github.com/rockchip-linux/rknn-toolkit.git cd rknn-toolkit/ # 构建项目前设置好交叉编译器路径等参数... make clean all # 替换旧有ko文件为新构建出来的那个 cp output/lib/modules/*/*.ko /lib/modules/$(uname -r)/kernel/drivers/ depmod $(uname -r) echo "Reboot now..." sleep 3 reboot ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Graceful_scenery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值