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 的协同关系(示意图)
视频/语音/传感器数据] --> 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 任务:
- 视觉任务(CNN/Transformer 视觉模型):分类、检测、分割、关键点、部分多目标场景。
- 语言任务(LLM):端侧问答、指令执行、轻量 Agent 推理等。
- 多模态任务(VLM/Omni):图文理解、视觉问答、部分音视觉融合交互。
- 多模型并发:在主控 + 协处理器分工下,支持业务逻辑与推理并行,提高系统响应能力。
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-Instruct 或 Qwen3-VL)给出一个最小流程,实际工程中可按同一框架替换成其他已支持模型。
4.1 PC 端完成模型转换与量化
该步骤目标是把 Hugging Face 的 Qwen 模型转成 RK 平台可加载的格式。
文本模型产物是 .rkllm;多模态模型通常需要两份产物:视觉编码器 .rknn + 语言模型 .rkllm。
可按以下顺序执行:
- 准备 Linux PC 环境:安装 Conda(建议 Ubuntu 20.04/22.04),创建 Python 环境并安装
rkllm-toolkit。 - 下载原始模型:从 Hugging Face 拉取 Qwen 模型完整目录(建议先从
Qwen2.5-3B-Instruct这类体量适中的模型起步)。 - 生成量化数据:在
rknn-llm/examples/rkllm_api_demo/export下运行generate_data_quant.py。 - 配置导出脚本:在
export_rkllm.py中设置模型路径、目标平台、量化方式(W4A16或W8A8)、NPU 核配置等关键参数。 - 执行导出:运行
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
上面命令中的 2048 和 4096 分别对应 max_new_tokens 与 max_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 的数据连接有两种常见方式:
- USB + adb:通过 USB 数据线连接 PC 与 RK182x,使用 adb 推送文件与调试。
- 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.h和librknn3_api.so,说明rknn3-model-zoo的3rdparty/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 协处理器驱动与服务。解决步骤:
- 获取 SDK 包
RK182X_AI_COPROCESSOR_SDK_ALPHA_V1.0.0.tgz(联系瑞芯微销售或技术支持)。 - 在 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
- 编译产物位于
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 回复生成完毕的时间。