创龙 RK3588 单板 / 工控机 NPU 开发手册

前言

本文为 SBC-TL3588 单板机、EPC-TL3588 工控机配套 AI 开发指导文档,面向嵌入式 AI 开发人员,完整讲解 RK3588 内置 NPU 的全流程开发方案。依托瑞芯微 RKNN-Toolkit2、RKLLM-Toolkit 两套工具链,分别提供 YOLOv5 图像目标检测、DeepSeek-R1 1.5B 本地大模型两大实操案例。文档覆盖环境搭建、模型转换、交叉编译、板端部署推理全流程,附带可直接复用的源码、编译命令与运行调试日志,可快速完成边缘视觉识别、本地离线大语言模型落地,帮助开发者快速完成平台 NPU 性能评估与 AI 应用开发。

备注:本文适用于SBC-TL3588单板机及EPC-TL3588工控机系列(由SBC-TL3588单板机搭配扩展板与外壳组成),文中所有演示均基于4GByte LPDDR4X + 32GByte eMMC硬件配置的单板机开展。

注意事项

1.无特殊说明,默认从eMMC启动系统,使用DEBUG作为调试串口。

2.请先参考《应用开发手册》"开发环境搭建说明"章节完成应用开发环境搭建,并参考《系统使用手册》附录"系统组件安装说明"安装OpenCV。

3.我司提供的NPU开发案例位于产品资料"4-软件资料\Demo\platform-demos\"目录,具体说明如下。

NPU开发说明

RK3588内部已集成高能效神经网络处理器NPU,支持神经网络推理硬件加速,能够流畅运行AI算法。主要参数如下:

1.支持INT4/INT8/INT16/FP16等;

2.支持多种框架,如TensorFlow、MXNet、PyTorch、Caffe等;

3.6TOPS算力。

备注:更多详细信息请查看"6-开发参考资料\数据手册\SBC-TL3588单板机元器件\"目录下的文档。

为简化开发者在AI模型部署与优化过程中的工作量,瑞芯微官方提供了两款核心开发工具包:RKNN-Toolkit2和RKLLM-Toolkit。这两款工具包分别针对不同类型的AI模型和应用场景,提供了从模型转换、量化到推理部署的一站式解决方案。

1.RKNN-Toolkit2工具说明

RKNN-Toolkit2是瑞芯微官方推出的用于模型转换、量化、推理和性能评估的开发工具包,支持将预训练的深度学习模型转换为瑞芯微NPU(神经网络处理单元)专用的RKNN格式,并在其芯片平台上高效部署。

开发流程如下:

1.模型训练:用户根据需求自行训练模型或使用官方提供的模型;

2.模型转换:使用RKNN-Toolkit2将预训练模型转换为RK3588 NPU可使用的RKNN模型;

3.应用开发:基于RKNN API开发应用程序。

图1

关于RKNN-Toolkit2环境搭建、模型转换使用说明、混合量化、精度问题排查的详细介绍,可查看yolov5_object_detect案例"\tool\rknn-toolkit2.tar.gz"压缩包的"rknn-toolkit2\doc\02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf"文档。

关于RKNN-Toolkit2模型转换API接口说明,可查看yolov5_object_detect案例"\tool\rknn-toolkit2.tar.gz"压缩包的"rknn-toolkit2\doc\03_Rockchip_RKNPU_API_Reference_RKNN_Toolkit2_V2.0.0beta0_CN.pdf"文档。

关于RKNN API的详细使用说明,可查看yolov5_object_detect案例"\tool\rknn-toolkit2.tar.gz"压缩包的"tool\rknn-toolkit2\doc\04_Rockchip_RKNPU_API_Reference_RKNNRT_V2.0.0beta0_CN.pdf"文档。

2.RKNN-Toolkit工具说明

RKLLM-Toolkit是专为Rockchip硬件平台设计的大语言模型(LLM)部署与优化工具包,旨在帮助开发者高效地将训练好的大语言模型部署到Rockchip设备上,通过提供的接口便捷地完成模型转换和量化。

此外,RKLLM Toolkit提供了一个软件开发工具包,让用户能够在PC机上轻松进行模型转换和量化操作。RKLLM Runtime工具包为Rockchip NPU平台提供了C/C++编程接口,支持用户快速部署RKLLM模型并加速LLM应用程序的实现。

图2

为了使用RKNPU,用户首先需在计算机上安装RKLLM-Toolkit工具,将训练后的模型转换为RKLLM格式模型,然后在单板机上使用RKLLM C API进行推理。

RKLLM的整体开发步骤主要分为:"模型转换"和"本地部署运行"。

模型转换是使用RKLLM-Toolkit,将预训练的大语言模型转换为RKLLM格式。

本地部署运行是调用RKLLM Runtime库,加载RKLLM模型到瑞芯微NPU平台,然后进行推理等操作。

(1) yolov5_object_detect案例

案例说明

本案例基于RKNN API实现对图片中目标对象的识别,并将识别结果以加水印的方式添加至图像,并保存为图片文件。案例循环测试10次,统计出推理的平均处理耗时。

备注:本案例基于瑞芯微官方例程实现,进行了目录的重构及编译的简化,功能逻辑未进行修改。官方例程位于LinuxSDK源码"external/rknpu2/examples/rknn_yolov5_demo/"目录下。

图3

程序处理流程图如下:

图4

案例测试

在进行案例测试前,请先参考《系统使用手册》中的"系统组件安装说明"章节,完成OpenCV组件的安装。

请通过网线将单板机千兆网口LAN1连接至路由器。请将案例bin目录下的所有文件拷贝至单板机系统任意目录下。

图5

在可执行文件所在目录,执行如下命令,对图片目标对象进行模型推理。

备注:模型运行的时间会有抖动。

Target#./yolov5_object_detect yolov5s-640-640_rk3588.rknn car.jpg

图6

从输出信息可知,本案例程序识别出测试图片包含person、car、bus、truck等对象,运行1次模型耗时为22.550000ms;循环运行10次模型平均耗时为19.516600ms。

案例程序对测试图片的目标对象标记成功后将输出名称为out.jpg的标记图片至当前目录,请将out.jpg文件拷贝至Windows下,并使用PC端相关软件对比查看car.jpg与out.jpg,测试结果如下所示。

图7
图8
图9

从out.jpg图片可知,案例程序能正确框选出人物、汽车等物体,同时显示person、car等文字标签和置信度,标记对象的数量及信息等与程序打印信息一致。

本程序能够支持识别的目标数据集类型说明位于案例"bin/model"目录下的coco_80_labels_list.txt文件,用户可根据相关目标类型进行测试验证。

图10

案例编译

将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录,执行如下命令配置环境变量,并修改CMake配置文件CMakeLists.txt,请根据实际情况修改为LinuxSDK源码路径。

**Host#**source /home/tronlong/RK3588/environment

**Host#**vim CMakeLists.txt

图11

修改内容如下:

set(SDK_ROOT_PATH /home/tronlong/RK3588)

图12

执行如下命令,新建一个build目录,用于存放编译过程产生的相关文件,并进入build目录。

**Host#**mkdir -p build

**Host#**cd build

图13

执行如下命令进行案例编译,编译完成将会在build目录下生成编译过程产生的相关文件。

**Host#**cmake ../ //配置CMake项目

**Host#**make -j4 //指定使用4个线程并行编译

**Host#**make install //将编译生成的文件安装到指定系统目录
图14
图15

build目录存放编译过程产生的相关文件,src目录存放案例相关文件,包括测试图片car.jpg、类别数据集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rk3588.rknn和可执行程序yolov5_object_detect等文件,如下图所示。
图16
图17

关键代码

图片处理
图18
图19

执行推理
图20

后处理
图21

画框和概率
图22

重复运行10次模型并统计平均耗时
图23

llm_demo案例

案例说明

本案例基于Rockchip LLM(大型语言模型)推理框架实现,用于加载语言模型并与其进行交互,获取生成结果。

本次操作基于瑞芯微RKLLM-Toolkit工具实现DeepSeek-R1模型的量化转换,并通过单板机NPU加速架构完成本地部署。

DeepSeek-R1是深度求索(DeepSeek)公司推出的开源多模态大语言模型,专为长上下文理解和多模态交互优化。DeepSeek-R1基于开源模型进行了微调,提供了1.5B、7B等参数版本的DeepSeek-R1-Distill模型,适合部署到边缘设备。

图24

备注:当前7B大模型因内存溢出无法正常运行。llm_demo进程申请内存时,内存页属性配置为可移动内存(MOVABLE);而GPU驱动执行DMA数据搬运时,必须申请不可移动连续物理内存(UNMOVABLE)。系统长时间运行后产生严重内存碎片化,内核无法分配满足DMA要求的连续物理内存页,最终内存分配失败,模型启动异常。

案例程序流程图如下:
图25

为方便用户测试,我司同时提供转换好的1.5B模型文件。下文将基于SBC-TL3588单板机(DDR容量4GByte,eMMC容量32GByte,CPU为RK3588J)以1.5B模型为例进行演示。

案例测试

请通过网线将单板机千兆网口LAN1连接至路由器,将案例bin目录下的llm_demo、DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm模型文件拷贝至单板机系统,请将案例的bin目录下的librkllmrt.so库文件拷贝至单板机系统lib目录下。
图26

执行如下命令,设置环境变量,即可在每次推理完成后显示Prefill与Generate阶段的Token数量与推理耗时。

**Target#**export RKLLM_LOG_LEVEL=1 //设置Rockchip LLM(大语言模型)运行时日志级别
图27

执行如下命令,运行加载DeepSeek-R1模型。

Target#./llm_demo DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096

参数解析:

2048:生成阶段最多可生成的新Tokens数量;

4096:模型支持的最大上下文长度(输入 + 输出的总Tokens数上限)。
图28

请根据提示输入自定义问题,推理完成后,测试结果、Token数量与推理耗时如下。

图29

图30

同时可测得CPU占用率约为23%,NPU占用率约为77%,内存占用率约为16%。

由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注Tronlong创龙科技或者评论区留言,感谢您的支持!

相关推荐
2601_9516438815 天前
C语言长文整理,关键字和数据类型
c语言·数据类型·关键字·嵌入式开发·格式化输出
意法半导体STM3215 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
凡人叶枫16 天前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
凡人叶枫16 天前
Effective C++ 条款40:明智而审慎地使用多重继承
java·数据库·c++·嵌入式开发·effective c++
俊基科技16 天前
工业实战:DA-03音频模组在智慧矿山广播与应急通信系统中的应用
嵌入式开发·数模转换·da-03
凡人叶枫17 天前
Effective C++ 条款33:避免遮掩继承而来的名字
linux·服务器·开发语言·c++·嵌入式开发
凡人叶枫17 天前
Effective C++ 条款31:将文件间的编译依存关系降至最低
linux·开发语言·c++·php·嵌入式开发·effective c++
凡人叶枫17 天前
Effective C++ 条款32:确定你的 public 继承塑模出 is-a(是一种)关系
java·linux·开发语言·c++·嵌入式开发
程序员爱德华17 天前
嵌入式开发
嵌入式开发