RK1820
RK182X是一款AI协处理器, 与rk3588/rk3576相结合, 通过PCIe通信能灵活、快速的、高效地使用。本文旨在帮助开发者快速熟悉 RK182X 系列 AI 协处理器的硬件特性、软件环境、开发流程及性能优化方法,从而高效地将 AI 算法部署到 RK182X 的硬件平台上。
1. 概述
RK182X协处理器工作模式,即主控SoC通过PCIe/USB高速接口连接RK182X协处理器。
- 主控SoC(Host):作为系统核心,负责任务调度、资源分配和整体控制。
- RK182X协处理器(Device):作为AI计算加速单元,专注于高性能神经网络推理任务。
- PCIe/USB高速接口(通信接口):实现主控与协处理器之间的低延迟、高带宽数据交互。
1.1 开发框架
- PC端开发环境,包含RKNN3 Toolkit、RKNN3 Model Zoo等。
- RKNN3 Toolkit:是一个软件开发工具包,可将PyTorch、ONNX等深度学习框架训练的模型转换为RKNN格式,支持用户进行模型转换、推理和性能评估;
- RKNN3 Model Zoo:提供了丰富的模型转换示例,涵盖多种AI模型类型。
- 板端开发环境,包含RKNN3 Runtime、AI应用Examples、工具集合、驱动等。
- RKNN3 Runtime:模型转换完成后,可在开发板上使用RKNN3 API加载和运行RKNN模型。除RKNN3 API外,还支持OpenAI兼容API调用LLM模型;
- Examples:结合实际应用,提供模型应用参考示例;
- 工具集合:如用于调试的RKNN-SMI和RKNN Console;
- 驱动:提供RK182X PCIe EP驱动。
- RK182X协处理器:提供固件,通过PCIe/USB高速接口与主控SoC互联。
| 模块名 | 功能 | 部署环境 |
|---|---|---|
| RKNN3 Toolkit | PC端开发套件,用户可通过RKNN3 Toolkit将PyTorch、ONNX等深度学习框架训练的模型转换为RKNN格式 | PC |
| RKNN3 Model Zoo | 模型转换部署示例,涵盖多种AI模型类型,包括CNN模型、LLM模型、VLM模型 | PC |
| RKNN3 Runtime | 板端运行时序,RKNN 硬件加速接口库,使用RKNN3 API加载和运行RKNN模型 | Host |
| RKNN-SMI | 系统级调试和管理工具 | Host |
| RKNN Console | 调试终端工具 | Host |
| Drivers | 提供RK1820 PCIe EP驱动,其他接口则为通用驱动 | Host |
| Examples | 提供模型应用参考示例 | Host |
| Firmware | 提供预编译RK1820固件 | Device |
1.2 支持平台
| SDK版本 | Host平台 | Device平台(通信接口) |
|---|---|---|
| Alpha V0.0.1 | RK3588, RK3576 | RK1820(PCIe) |
| Alpha V0.0.2 | RK3588, RK3576 | RK1820(PCIe) |
2. 环境准备
本文档将以Neardi LKD3588 搭配 RK1820 SODIMM 模组进行开发说明,需要准备以下环境:
- Host: Neardi LKD3588
- Device: 以下RK1820硬件之一
- RK1820 SODIMM 模组
- RK1820 SODIMM 模组 + PCIe EXT Board
- LKD3588 预编译固件
- RK1820 SODIMM 预编译软件安装包
2.1 硬件说明
配套该SDK的官方参考硬件有:
| 序号 | 硬件名 | 描述 |
|---|---|---|
| 1 | RK1820 SODIMM | RK1820 SODIMM模组,模组采用260PIN内存余金手指接口,配套RK3588 EVB10做集成验证,也可设计开发底板配套使用,实现快速开发及其应用 |
| 2 | PCIe EXT Board | PCIe EXT Board可适配RK1820 SODIMM模组,外扩32GB eMMC并扩展USB3.0 OTG口、USB2.0 HOST口、GE-RJ45、FAN等,通过标准64Pin PCIe金手指与HOST端连接 |
| 3 | LKD3588 | LKD3588 可作为Host平台使用 |
3. RK1820 SDK
RK1820 SDK 是一个功能完备的软件开发套件,主要包含以下部分:
| 路径/文件 | 说明 |
|---|---|
| build.sh -> scripts/common/build.sh | SDK 编译脚本 |
| docs | SDK 文档 |
| driver | 驱动程序,用于 Host 与 RK182X 硬件通信 |
| examples | 示例代码,覆盖 CNN 和 LLM 等多种应用场景 |
| gstreamer | GStreamer 插件源码 |
| rockit_yolo_detect | 预编译固件、工具集 |
| web | |
| pkgroot | |
| rkmn | RKNN3 工具集 |
| rkmn3-model-zoo | 提供LLW/VLM/CNN模型转换示例等 |
| rkmn3-runtime | 运行时序,提供 C++ 和 Python API,供应用程序调用 |
| rkmn3-toolkit | 核心开发工具链,用于模型转换、量化和优化 |
| rkmn-gstreamer-plugins | RKNN GStreamer 插件源码 |
| scripts | SDK 脚本集合 |
3.1 PC 环境
系统推荐使用 Ubuntu 22.04 或更高版本的系统进行编译,文档下述操作均基于Ubuntu 22.04验证。
使用如 apt-get命令安装后续操作所需的库和工具:
sudo apt-get update && sudo apt-get install git make gcc python-is-python3 python2
3.2 配置和编译
3.2.1 SDK配置
SDK默认配置为 SODIMM 板卡。
如果配置方案和实际不符,可以通过 ./build.sh config 重新配置。
Select board type:
1) RK1820 EVB1
2) RK1820 SODIMM
3) RK1820 M2
4) Cancel
#?
3.2.2 编译
进入SDK根目录,执行编译脚本:
# PC端执行
./build.sh
生成的软件安装包在 output/firmware/rknn3_rk182x_sodium_installer_arm64.tgz。
4. Host环境准备
4.1 PCIe驱动安装
4.1.1 驱动文件结构
├── pcie-rkep
│ ├── Makefile
│ ├── pcie-dw-dmatest.c
│ ├── pcie-dw-dmatest.h
│ ├── pcie-rkep.c
│ ├── rk-pcie-ep.h
│ └── rockchip-pcie-dma.h
├── README_CN.md
└── README_EN.md
4.1.2 驱动编译
驱动的编译分为两种方式,KO方式与内建方式,可根据实际情况选择合适的编译方式。
编译时, kernel开启以下开关以开启相关功能支持:
# 启用 Rockchip PCIe EP 功能支持
CONFIG_PCIE_FUNC_RKEP=y
CONFIG_PCIE_DM_DMATEST=y
驱动加载成功后,系统将创建设备节点:
linaro@linaro-alip:~$ ls -l /dev/pcie-rkep-*
crw------- 1 root root 10, 119 6月26日 14:58 /dev/pcie-rkep-0003:31:00.0
4.2 环境验证
RK1820 启动后,可以使用 rknn-smi 来获取信息:
linaro@linaro-alip:~$ sudo rknn-smi info
+-----------------------+---------------+---------------------------------------------------------------+
| rknn-smi Version: 1.0.0 |
+=======================+===============+===============================================================+
| Device | Health | Power(mW) Npu(%) Hugepages-Usage(page) |
| Chip Name | Bus-Id | Temp(C) Memory-Usage(MB) |
+=======================+===============+===============================================================+
| 0 | OK | 0 0 0 / 0 |
| 0 RK1820 | 0003:31:00.0 | 42 281 / 2560 |
+=======================+===============+===============================================================+
4.3 调试工具
4.3.1 rknn-smi
rknn-smi (System Management Interface) 工具用于 RK1820 设备信息收集、功能配置、日志管理等功能。
完整功能使用参考 docs/tools/Rockchip_User_Guide_RKNN-SMI_Tool_CN.pdf
4.3.2 版本信息
linaro@linaro-alip:~$ sudo rknn-smi -v
rknn-smi version : 1.0.0
PCIe driver version : 3.2.0
RC chips connect version : 3.2.0
EP chips connect version : 3.2.0
PCIe Device 0 firmware version: 0.0.2
linaro@linaro-alip:~$ sudo rknn-smi info -l
Device Count : 1
Device ID : 0
Communication mode : PCIe
Product Name : RM1820SA0
Serial Number : A10CB253900020
Chip Count : 1
Chip ID : 0
Chip Name : RK1820
4.3.3 性能模式
可通过rknn-smi调整RK1820性能档位,支持0-EFFICIENT, 1-NORMAL, 2-PERFORMANCE。
linaro@linaro-alip:~$ sudo rknn-smi set -t work_mode -s 1
Successfully set device 0 chip 0 work mode to 1
4.3.4 rknn-console
rknn-console工具用于在HOST端通过PCIe来模拟RK1820端的控制台,实现对RK1820的控制和调试
linaro@linaro-alip:~$ sudo rknn-console rk1820
ep dev max num : 1
08:01:11.608 I [cmp_pcie_rc: cc_cmp_pcie_device: 505] rk pcie tiny version: 30200
08:01:11.608 I [cmp_pcie_rc: cc_cmp_pcie_device: 519] using rc dma: 0, chn: 0
08:01:11.608 I [cmp_pcie_rc: cc_cmp_pcie_device: 522] use dma only in rc: 0
08:01:11.608 D [chipscon: cc_kernel_api_prob: 427] open rkep: /dev/pcie-rkep-0003:31:00.0 Success.
08:01:11.608 D [chipscon: cc_kernel_api_prob: 432] probe pcie_rkep, fd = 3
08:01:11.608 D [core_pcie_rc: cc_core_pcie_dev_i: 65] bar0 size=0x400000
08:01:11.609 D [core_pcie_rc: cc_core_pcie_dev_i: 65] bar1 size=0x100000
08:01:11.609 D [core_pcie_rc: cc_core_pcie_dev_i: 65] bar2 size=0x4000000
08:01:11.609 D [core_pcie_rc: cc_core_pcie_dev_i: 65] bar4 size=0x100000
08:01:11.609 D [core_pcie_rc: cc_core_pcie_dev_i: 65] bar5 size=0x100000
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 460] - id=182a1d87
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 469] - magic=524b4550, ver=1
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 471] - rc_cc_version=30200
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 472] - ep_cc_version=30200
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 473] - bar0_reserved=48000
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 474] - bar1_reserved=58000
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 475] - bar5_reserved=60000
08:01:11.609 I [pcie_dma: cc_core_pcie_dma_i: 497] - bar2 bus_addr=0x9c0000000, cpu_addr=0x1200000000
08:01:11.609 I [chipscon: cc_kernel_api_dbi_: 366] chip info: rk3588
08:01:11.609 D [hugepage_mem: hugepage_mem_init: 183] huagepage mem init success hugepage_manager 0x29ceb900
PCIE VUART RC (Version 0x10000000) started
Line buffered mode: Input will be sent to EP on newline
08:01:11.609 D [cmp_pcie_rc: pcie_task_rc_msg_t: 293] [0003:31:00.0] start
Press Ctrl+X to exit
RX polling thread started
msh />
Ctrl+X pressed, exiting...
08:01:19.614 D [cmp_pcie_rc: pcie_task_rc_msg_t: 321] [0003:31:00.0] end
PCIE VUART RC application terminated
linaro@linaro-alip:~$
5. 开发流程
RK1820支持模型、模型性能、模型精度、使用限制、性能测试、精度测试方案可参考rknn/rknn3-runtime/doc/00_Rockchip_RK1820_ReleaseNote_RKNN3_SDK_V0.3.0b0_CN.pdf
RK1820 模型部署流程可参考 rknn/rknn3-runtime/doc/01_Rockchip_RK1820_Quick_Start_RKNN3_SDK_V0.3.0b0_CN.pdf。
5.1 模型转换
模型转换工具路径为 rknn/rknn3-toolkit/,部署时可参考该目录下的文档。 在PC上面安装rknn3-toolkit/packages里的必要包, 如下:
linx@ubuntu2204-docker:~/rk1820/rknn/rknn3-toolkit/packages$ pip3 install -r requirements_cp310-0.3.0b0.txt
Downloading transformers-4.51.3-py3-none-any.whl (10.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.4/10.4 MB 343.7 kB/s eta 0:00:00
Requirement already satisfied: pillow in /mnt/data/linx/.local/lib/python3.10/site-packages (from -r requirements_cp310-0.3.0b0.txt (line 15)) (11.1.0)
Collecting sentencepiece
Downloading sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 3.5 MB/s eta 0:00:00
Collecting tabulate
Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
环境安装成功后就可以进行模型转换, 如下:
linx@ubuntu2204-docker:~/rk1820/rknn/rknn3-model-zoo/examples/yolov8/python$ python3 convert.py ../model/yolov8n_rknn3.onnx rk1820
I version: rknn3-toolkit 0.3.0(baf68a1c@2025-09-19T02:29:11)
--> Config model
subgraph: [[['/model.22/dfl_2/Softmax_output_0_sw', '/model.22/dfl_1/Softmax_output_0_sw', '/model.22/dfl/Softmax_output_0_sw', '/model.22/Reshape_11_output_0', '/model.22/Reshape_10_output_0', '/model.22/Reshape_9_output_0', '/model.22/Reshape_2_output_0', '/model.22/Reshape_output_0'], ['693'], 'w16a16']]
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 127/127 [00:00<00:00, 39823.31it/s]
done
--> Building model
I FoldConstant : 100%|█████████████████████████████████████████ ██| 369/369 [00:00<00:00, 740.46it/s]
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 342.10it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 180.78it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 68.64it/s]
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 64.27it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 61.54it/s]
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 60.00it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 56.12it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 54.05it/s]
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 52.91it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:01<00:00, 52.74it/s]
I FoldConstant : 100%|███████████████████████████████████████| 229/229 [00:00<00:00, 550.91it/s]
这里会生成rknn模型, 如下:
linx@ubuntu2204-docker:~/rk1820/rknn/rknn3-model-zoo/examples/yolov8/model$ ls
bus.jpg coco_80_labels_list.txt dataset.txt download_model.sh yolov8n_rknn3.onnx yolov8n_rknn3.rknn yolov8n_rknn3.weight
5.2 应用开发
把转换后的模型拷贝到板端, 并编译yolov8 demo, 编译之前修改toolchain, 如下:
diff --git a/build-linux.sh b/build-linux.sh
index 4467884..d1954b4 100755
--- a/build-linux.sh
+++ b/build-linux.sh
@@ -53,7 +53,9 @@ if [ -z ${TARGET_SOC} ] || [ -z ${BUILD_DEMO_NAME} ]; then
exit -1
fi
+GCC_COMPILER=aarch64-linux-gnu
echo "$GCC_COMPILER"
export CC=${GCC_COMPILER}-gcc
export CXX=${GCC_COMPILER}-g++
再执行如下命令:
linaro@linaro-alip:/userdata/RK182X_AI_COPROCESSOR_SDK/ALPHA_V0.0.2/rknn/rknn3-model-zoo$ ./build-linux.sh -t rk3588 -a aarch64 -d yolov8 -b Release
./build-linux.sh -t rk3588 -a aarch64 -d yolov8 -b Release
aarch64-linux-gnu
===================================
BUILD_DEMO_NAME=yolov8
BUILD_DEMO_PATH=examples/yolov8/cpp
TARGET_SOC=rk3588
TARGET_ARCH=aarch64
BUILD_TYPE=Release
ENABLE_ASAN=OFF
DISABLE_RGA=OFF
DISABLE_LIBJPEG=OFF
INSTALL_DIR=/userdata/RK182X_AI_COPROCESSOR_SDK/ALPHA_V0.0.2/rknn/rknn3-model-zoo/install/rk3588_linux_aarch64/rknn_yolov8_demo
BUILD_DIR=/userdata/RK182X_AI_COPROCESSOR_SDK/ALPHA_V0.0.2/rknn/rknn3-model-zoo/build/build_rknn_yolov8_demo_rk3588_linux_aarch64_Release
CC=aarch64-linux-gnu-gcc
CXX=aarch64-linux-gnu-g++
===================================
-- !!!!!!!!!!!CMAKE_SYSTEM_NAME: Linux
生成如下可执行文件:
linaro@linaro-alip:/userdata/RK182X_AI_COPROCESSOR_SDK/ALPHA_V0.0.2/rknn/rknn3-model-zoo/install/rk3588_linux_aarch64/rknn_yolov8_demo$ tree .
.
├── dataset_eval
├── lib
│ ├── librga.so