谈谈RK182x协处理器

2026-04-26

1. RK182x 是什么:从“协处理器”说起

在边缘 AI 系统里,协处理器(Co-processor)通常指“配合主 SoC 工作、专注某类计算任务”的芯片。
其核心价值不是替代主控,而是把高负载、可并行的任务(如神经网络推理)从主控侧剥离出来,从而提升整体吞吐、降低时延并改善能效比。

RK182x(含 RK1820、RK1828)可以理解为瑞芯微面向端侧 AI 推理场景推出的协处理器系列。典型形态是与 RK3588 / RK3576 等主控平台配套,通过 PCIe(或 USB)实现高速互联:

  • Host(如 RK3588):负责业务逻辑、调度、数据前后处理、系统控制。
  • Device(RK182x):负责 AI 推理主计算负载。
  • 高速互联(PCIe/USB):负责低时延数据交换与任务下发。

这种分工可概括为“主控负责系统,协处理器负责算力密集型 AI 推理”。

1.1 RK3588 + RK182x 的协同关系(示意图)

graph TD %% 定义全局样式类 classDef default fill:#fff,stroke:#333,stroke-width:1px,color:#000,rx:2,ry:2; A[业务输入
视频/语音/传感器数据] --> B[RK3588 主控
调度与前后处理] B --> C{推理任务类型} C -- CNN/检测/分割 --> D[RK182x 推理执行] C -- LLM/VLM Token 生成 --> D D --> E[结果回传 Host] E --> F[应用层输出
告警/控制/交互] B <-- PCIe/USB --> D %% 将样式应用到所有节点 %% class A,B,C,D,E,F plain;

注:该图为工程分工示意,非官方芯片框图;具体链路与拓扑以硬件手册和板卡设计为准。

2. RK1820 与 RK1828 有什么区别

二者同属 RK182x 家族,软件栈与开发方式一致性较高(如 RKNN3 工具链、模型转换与 Runtime 运行方式),差异主要体现在板级资源配置与目标负载上限

对比项 RK1820 RK1828
NPU 算力(INT8) 20 TOPS 20 TOPS
支持精度 INT4/INT8/INT16/FP8/FP16/BF16 INT4/INT8/INT16/FP8/FP16/BF16
主机互联接口 PCIe 2.0、USB 3.0 PCIe 2.0、USB 3.0
片上内存配置 2.5GB 级别 5GB 级别
RISC-V 控制核架构 同系列多核 RISC-V 方案 同系列多核 RISC-V 方案
推荐模型规模(LLM) 0.5B~3B 更常见 3B~7B 更常见
上下文容量余量 中等 更大
多实例并发稳定性 中等 更高
VLM 分辨率/负载上限 中等 更高
大模型端侧解码速度(同量化) 3B 级别可达百 token/s 量级 7B 级别仍可保持较高 token/s(常见 50+)
典型价格(开发套件/模组市场) 大致在 5k~8k RMB 区间 大致在 7k~10k RMB 区间

可以看到,两者在 NPU 峰值、指令精度与主机接口上并无本质代差,核心差异集中在内存规模带来的可部署模型上限。实测中也验证了这一点:RK1820 与 RK1828 在算力、带宽、通用 CPU 计算能力上表现接近,硬件兼容,相同代码可较好地迁移;真正拉开差距的是内存——RK1828 内存翻倍,能跑更大的模型(例如 Qwen3-VL-4B 在 RK1820 上会因内存不足而初始化失败)。

3. RK182x 能做什么:能力边界与模型支持

RK1820/RK1828 是瑞芯微专为大模型推理设计的 AI 协处理器。采用RKLLM 编程生态。

  • PC 端开发 (模型转换与量化):主要使用 RKLLM-Toolkit 工具。它提供了 Python 编程接口,能够将 Hugging Face 格式的模型(如 LLaMA, Qwen 等)转换为定点模型(支持 w4a16、w8a8 等量化类型),并最终导出为 NPU 专用的 .rkllm 格式文件。
  • 板端部署 (推理运行):主要使用 RKLLM Runtime (librkllmrt) 提供的 C/C++ 编程接口。其核心开发流程包括加载模型、配置推理参数(如文本生成方式),并通过预先定义的 C 语言回调函数 (Callback) 持续获取实时的推理生成结果。

3.1 典型可落地方向

RK182x 适合以下端侧 AI 任务:

  1. 视觉任务(CNN/Transformer 视觉模型):分类、检测、分割、关键点、部分多目标场景。
  2. 语言任务(LLM):端侧问答、指令执行、轻量 Agent 推理等。
  3. 多模态任务(VLM/Omni):图文理解、视觉问答、部分音视觉融合交互。
  4. 多模型并发:在主控 + 协处理器分工下,支持业务逻辑与推理并行,提高系统响应能力。

3.2 已支持模型(RKNN-LLM 口径)

airockchip/rknn-llm 当前版本与更新记录,已覆盖的模型家族主要包括:

  • 文本大模型(LLM):Llama/Llama2/Llama3/TinyLlama、Qwen/Qwen2/Qwen2.5/Qwen3、Phi/Phi-2/Phi-3、ChatGLM3、Gemma/Gemma2/Gemma3/Gemma3n、InternLM2、MiniCPM/MiniCPM3/MiniCPM4、RWKV7、TeleChat、DeepSeek-R1-Distill。
  • 多模态模型(VLM):Qwen2-VL、Qwen2.5-VL、Qwen3-VL、MiniCPM-V、InternVL2/InternVL3/InternVL3.5、Janus/Janus-Pro、DeepSeekOCR。
  • 量化与部署形态:支持 w4a16、w8a8、group-wise 量化,以及多实例推理、长上下文、Function Calling 等能力。

rknn-llm 外,视觉方向在 rknn_model_zoo / rknn3-model-zoo 中也有大量可直接复用的模型示例(如 YOLO、MobileNet 等),可用于 CNN 任务快速落地。

4. 以 Qwen 为例:RKLLM 部署流程

下面用 Qwen 系列(如 Qwen2.5-3B-InstructQwen3-VL)给出一个最小流程,实际工程中可按同一框架替换成其他已支持模型。

4.1 PC 端完成模型转换与量化

该步骤目标是把 Hugging Face 的 Qwen 模型转成 RK 平台可加载的格式。
文本模型产物是 .rkllm;多模态模型通常需要两份产物:视觉编码器 .rknn + 语言模型 .rkllm

可按以下顺序执行:

  1. 准备 Linux PC 环境:安装 Conda(建议 Ubuntu 20.04/22.04),创建 Python 环境并安装 rkllm-toolkit
  2. 下载原始模型:从 Hugging Face 拉取 Qwen 模型完整目录(建议先从 Qwen2.5-3B-Instruct 这类体量适中的模型起步)。
  3. 生成量化数据:在 rknn-llm/examples/rkllm_api_demo/export 下运行 generate_data_quant.py
  4. 配置导出脚本:在 export_rkllm.py 中设置模型路径、目标平台、量化方式(W4A16W8A8)、NPU 核配置等关键参数。
  5. 执行导出:运行 python3 export_rkllm.py,得到 *.rkllm 文件。若是 Qwen-VL,还需准备匹配的视觉模型 *.rknn

一个典型命令序列如下(以文本模型为例):

cd rknn-llm/examples/rkllm_api_demo/export
python3 generate_data_quant.py -m ~/Qwen2.5-3B-Instruct
python3 export_rkllm.py

导出完成后,目录中会生成类似 Qwen2.5-3B-xxx.rkllm 的文件,这就是板端推理所需主模型。

4.2 板端部署运行

该步骤目标是在 RK182x 开发环境中加载模型并完成推理。
部署前建议先确认板端 NPU 驱动版本满足 SDK 要求,再进行运行。

先将可执行文件与模型推送到板端:

adb push ./demo_Linux_aarch64 /data
adb push ./qwen_model.rkllm /data/demo_Linux_aarch64
# 若是 Qwen-VL,再推送视觉模型
# adb push ./qwen_vl_vision.rknn /data/demo_Linux_aarch64
adb shell
cd /data/demo_Linux_aarch64
export LD_LIBRARY_PATH=./lib
export RKLLM_LOG_LEVEL=1
./llm_demo ./qwen_model.rkllm 2048 4096

上面命令中的 20484096 分别对应 max_new_tokensmax_context_len,可按业务需求调整。
如果是 Qwen-VL,需要改用多模态 demo,并同时传入视觉模型、语言模型与视觉 token 参数。例如:

./demo demo.jpg ./qwen3-vl-2b_vision.rknn ./qwen3-vl-2b.rkllm 2048 4096 3 "<|vision_start|>" "<|vision_end|>" "<|image_pad|>"

完成后即可在板端进行交互推理;同一流程也可平移到其他已支持模型。

5. RKNN3 实践:环境准备与测试

以下记录在 RK3588 + RK1820/RK1828 平台上,基于 RKNN3 工具链完成 VLM 推理环境搭建与实测的全过程。

5.1 PC 与 RK182x 的连接方式

RK182x 与 PC 的数据连接有两种常见方式:

  1. USB + adb:通过 USB 数据线连接 PC 与 RK182x,使用 adb 推送文件与调试。
  2. SSH 远程连接:RK182x 接网线,PC 与板卡在同一网段下通过 SSH 登录。此方式下所有操作相当于在 RK182x 本地运行,代码库与权重需提前上传到板端。

5.2 PC 端环境安装

PC 端完成安装后,推荐的项目目录结构如下:

Projects/
├── rknn3-toolkit/
├── rknn3-model-zoo/
└── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/   # 交叉编译 C Demo 时会用到

RK182x 板端无需额外安装 Runtime,RKNN3 运行时库已预置在 /usr/bin/usr/lib

(1)安装 rknn3-toolkit(PC 端模型转换)

airockchip/rknn3-toolkit 下载并解压后,创建 Python 3.10 虚拟环境并安装:

conda create -n rknn3 python=3.10
conda activate rknn3
cd Projects/rknn3-toolkit/rknn3-toolkit/packages
pip install -r requirements_cp310-1.0.0.txt
pip install rknn3_toolkit-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

验证安装:

from rknn.api import RKNN   # 不报错即成功

(2)RKNN3 Runtime(板端推理库)

提供 C/C++ 编程接口,头文件 rknn3_api.h 和库文件 librknn3_api.so 在交叉编译 C Demo 时需要用到。该 SDK 需联系瑞芯微技术支持获取;RK182x 板端最新系统已预装,无需额外安装。

(3)rknn3-model-zoo(参考实现)

airockchip/rknn3-model-zoo 包含 CNN / LLM / VLM 等模型的转换与部署示例,克隆即用,无需安装。

(4)交叉编译工具链

# 安装 CMake
apt update && apt install cmake

# 下载并解压 GCC 交叉编译器
# https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/
tar -xJf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

编译器路径为 .../gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

5.3 C/C++ Demo 编译与板端运行

编译

export GCC_COMPILER=/path/to/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
./build-linux.sh -t rk3588 -a aarch64 -b Release -d Qwen3_VL
./build-linux.sh -t rk3588 -a aarch64 -b Release -d yolov6

编译常见问题:若提示缺失 rknn3_api.hlibrknn3_api.so,说明 rknn3-model-zoo3rdparty/rknpu3 目录下没有 Runtime SDK——需联系瑞芯微技术支持获取后,拷贝到对应目录即可正常编译。

板端运行(以 Qwen3-VL-4B 为例)

将编译产物(可执行文件、动态库、模型文件)拷贝到板端后执行:

./rknn_qwen3_vl_demo \
  ./model/vision_Qwen3-VL-4B.rknn \
  ./model/vision_Qwen3-VL-4B.weight \
  ./model/llm_Qwen3-VL-4B.rknn \
  ./model/llm_Qwen3-VL-4B.weight \
  ./model/Qwen3-VL-4B.tokenizer.gguf \
  ./model/Qwen3-VL-4B.embed.bin \
  0xff 0xff \
  ./model/demo.jpg \
  "请描述图片内容" \
  384 384

板端运行常见问题与排查

问题一:设备数据通信错误

W RKNNAPI: MSG_MEM_SYNC_ACK fail, ack = ACK_UNKNOWN, expect = ACK_SUCC!
E RKNNAPI: sync_data_to_device: copy command to device failed!
E NPUTransfer: recv TransferClient recv failed, client fd: -1, ret = 0

根本原因是 Host 端(RK3588 / RK3576)尚未安装 RK182x 协处理器驱动与服务。解决步骤:

  1. 获取 SDK 包 RK182X_AI_COPROCESSOR_SDK_ALPHA_V1.0.0.tgz(联系瑞芯微销售或技术支持)。
  2. 在 PC 端解压并配置编译:
tar xf RK182X_AI_COPROCESSOR_SDK_ALPHA_V1.0.0.tgz
cd RK182X_AI_COPROCESSOR_SDK
.repo/repo/repo sync -l
./build.sh config   # 选择 RK182X SODIMM(选项 2)
./build.sh
  1. 编译产物位于 output/firmware/rknn3_rk182x_sodimm_installer_arm64.tgz,将其上传到 Host 板端:
tar xzf rknn3_rk182x_sodimm_installer_arm64.tgz
./install.sh
sudo reboot

重启后 Host 端会自动下载 RK182x 固件并启动后台服务,重新 SSH 连接即可正常通信。

问题二:LLM 模型初始化失败(MODEL_SETUP fail

E RKNNAPI: MODEL_SETUP fail, ack = ACK_FAIL, expect = ACK_SUCC!

这通常不是软件 bug,而是模型内存需求超出 RK1820 片上内存。例如 Qwen3-VL-4B 推理内存约 2.6 GB,超过 RK1820 的 2.5 GB 上限,应换用 RK1828 或更小的模型(如 Qwen3-VL-2B)。

5.4 Python 板端推理

若需在 RK182x 板端直接用 Python 跑推理,可安装 rknn3-toolkit-lite

conda create -n rknn3-lite python=3.10
conda activate rknn3-lite
cd rknn3-toolkit-lite/packages
pip install -r requirements.txt
pip install rknn3_toolkit_lite-1.0.0-cp310-cp310-linux_aarch64.whl

进入示例目录运行(以 Qwen3-VL-2B 为例):

cd rknn3-toolkit-lite/examples/
python test.py \
  --rknn_vision_path /path/to/vision_Qwen3-VL-2B.rknn \
  --rknn_llm_path /path/to/llm_Qwen3-VL-2B.rknn \
  --tokenizer_path /path/to/qwen3_VL_2B \
  --embed_path /path/to/Qwen3-VL-2B.embed.bin

板端若无法通过 apt/pip 安装依赖,需先确保开发板网络可达。

6. 实测结果汇总

以下是在 RK3588 + RK1820/RK1828 平台上的推理性能实测数据。

6.1 Qwen3-VL 推理测试(C/C++ 与 Python)

输入为 384×384 图片 + 文本 prompt。

推理方式 设备 模型 内存占用 CPU 占用(峰值/最小) 输入 Token 速度 首次(tokens/s) 输入 Token 速度 后续(tokens/s) 生成 Token 速度(tokens/s) 视觉编码耗时 LLM 输入耗时 LLM 生成耗时 总耗时
C/C++ RK1828 Qwen3-VL-2B 1.42 G 34.8% / 5% 903.33 1792.69 125 170 ms 211 / 106 ms 1936 ms 2.3 s
C/C++ RK1828 Qwen3-VL-4B 2.63 G 34.5% / 6% 496.71 1182.52 81.4 180 ms 384 / 161 ms 3636 ms 4.2 s
C/C++ RK1820 Qwen3-VL-2B 1.42 G 26.9% / 5.0% 956 2231 123 172 ms 199 / 85 ms 2025 ms 2.4 s
Python RK1828 Qwen3-VL-2B 1.47 G 125% / 20% 957 2301 102.7 250 ms 198 / 82 ms 1897 ms 2.3 s
Python RK1828 Qwen3-VL-4B 2.75 G 125% / 20% 525.07 1314.07 68.3 311 ms 361 / 144 ms 4247 ms 4.9 s
Python RK1820 Qwen3-VL-2B 1.47 G 115% / 12% 1065.19 2641.38 118 217 ms 178 / 71 ms 1646 ms 2.0 s

RK1820 无法运行 Qwen3-VL-4B(内存不足)。Python 路径 CPU 占用偏高,但在 RK1820 上总耗时反而略快于 C/C++(2.0 s vs 2.4 s),可能与运行时调度差异有关。

6.2 Qwen2.5 推理测试(RKLLM,RK1828)

输入为 1280×720 图片 + 约 100 token 的 prompt。

模型 精度 显存占用 输入 Token 速度 首次(tokens/s) 输入 Token 速度 后续(tokens/s) 首 Token 耗时 首次 首 Token 耗时 后续 生成 Token 速度(tokens/s) 回复生成总耗时
Qwen2.5-3B FP16 2.4 G 56.67 1726.80 16 s 0.55 s 10 10.64 s

「首 Token 耗时」指从发起推理到收到第一个生成 token 的延迟;「回复生成总耗时 10.64 s」为约 100 token 回复生成完毕的时间。

参考资料