1. 课程导入
欢迎进入《RK3588/RKNN 边缘 AI 交付》课程。本课程面向已经具备一定 Linux 与 Python 基础、希望把训练好的深度学习模型真正部署到 RK3588 硬件上运行的工程师。与"在服务器上跑通一个模型"不同,边缘 AI 交付的核心挑战在于:算力受限、内存受限、功耗受限,同时还要满足实时性、稳定性和量产一致性。RK3588 作为瑞芯微旗舰级 AIoT 芯片,内置 6 TOPS 算力的 NPU,配合 RKNN 工具链,为这类交付提供了完整的软硬件基础。
一、学习目标:从"能跑"到"能交付"
本课程的学习目标可以概括为四个层次。第一层是理解硬件:掌握 RK3588 的 CPU、GPU、NPU 三核异构架构,理解 NPU 的算力边界与内存带宽约束。第二层是掌握工具链:熟练使用 RKNN-Toolkit2 完成模型转换、量化、精度分析,使用 RKNN Runtime 在板端完成推理。第三层是打通流程:从 PyTorch/ONNX 模型出发,经过量化校准、模型转换、板端部署、性能调优,形成可复现的交付流水线。第四层是工程化落地:处理多路视频、模型热更新、异常恢复、功耗与散热等量产问题。
二、核心概念:RKNN 生态的关键名词
在正式进入实操之前,需要先建立统一的概念坐标系。RKNN 并不是一个单一工具,而是一套围绕 NPU 的软件栈。理解下面几个概念,后续章节才不会迷失方向。
- RKNN:瑞芯微定义的神经网络模型格式,是 NPU 可直接加载执行的中间表示,类似 TensorRT 的 engine 或 TFLite 的 flatbuffer。
- RKNN-Toolkit2:运行在 PC(x86 Linux/Windows)上的模型转换与量化工具,负责把 ONNX、PyTorch、TensorFlow 等模型转成 RKNN。
- RKNN Runtime:运行在 RK3588 板端的推理库,提供 C/C++ 与 Python API,负责加载 RKNN 模型并调度 NPU 执行。
- 量化(Quantization):把 FP32 权重与激活值映射到 INT8,是提升 NPU 利用率、降低内存占用的关键步骤,也是精度损失的主要来源。
- 异构计算:RK3588 的 CPU、GPU、NPU 各有所长,实际交付中常需要把预处理放在 CPU、后处理放在 CPU/GPU、核心推理放在 NPU。
三、整体框架:一张图看清交付链路
下图展示了从模型训练到 RK3588 板端推理的完整数据流与工具链关系。左侧是 PC 侧工作,右侧是板端工作,中间通过 RKNN 模型文件衔接。请重点观察三个转换节点:ONNX 导出、量化校准、RKNN 编译。
四、交付流程概览:五个阶段与关键检查点
把上图展开为可执行的工程流程,可以归纳为五个阶段。每个阶段都有明确的输入、输出与验收标准,缺少任何一环都会在量产阶段暴露问题。
| 阶段 | 主要工作 | 关键产物 | 验收标准 |
|---|---|---|---|
| 1. 模型准备 | 确定输入尺寸、算子兼容性、导出 ONNX | model.onnx | ONNX 可被 onnxruntime 正确推理 |
| 2. 量化校准 | 准备校准集、选择量化算法、逐层分析 | 量化配置与精度报告 | 余弦相似度 > 0.99 |
| 3. 模型转换 | RKNN-Toolkit2 编译、算子融合 | model.rknn | 转换无警告、无回退算子 |
| 4. 板端部署 | Runtime 加载、预处理/后处理对接 | 可执行推理程序 | 单帧推理结果与 PC 一致 |
| 5. 性能调优 | 多核调度、零拷贝、批处理 | 性能报告 | 满足帧率与延迟指标 |
五、典型场景与常见误区
一个典型的交付场景是:在 RK3588 上部署 YOLOv5s 做 4 路 1080p 视频的实时检测。工程师需要把 PyTorch 模型导出为 ONNX,用 300 张现场图片做 INT8 校准,转换成 RKNN 后在板端用多线程加载,并利用 RGA 做硬件缩放。整个链路中,最容易出问题的不是模型本身,而是预处理对齐、量化校准集分布、以及 NPU 与 CPU 之间的数据拷贝。
本课程后续章节将沿着上述五个阶段逐一展开,每一节都会给出可运行的命令、配置与排障方法。建议你在学习过程中准备一块 RK3588 开发板,边看边做,把每个阶段的产物都实际生成一遍。只有亲手跑通整条链路,才能真正理解边缘 AI 交付的工程细节。
# 板端快速验证 RKNN 模型是否可加载
rknn_server &
python3 -c "
from rknnlite.api import RKNNLite
rknn = RKNNLite()
ret = rknn.load_rknn('model.rknn')
print('load_rknn ret =', ret)
ret = rknn.init_runtime()
print('init_runtime ret =', ret)
"
当你能够稳定复现上面这段验证脚本,并且清楚每一步背后的数据流与资源开销,你就已经迈入了 RK3588 边缘 AI 交付的门槛。接下来,我们从硬件架构与 NPU 算力模型开始,逐层拆解这套系统。