边缘设备RK3588下RKNN的推理适配
这篇文章主要梳理一件事:如何把训练侧模型,稳定地落到 RK3588 上跑起来。
RKNN 是什么
RKNN 是瑞芯微(Rockchip)围绕自研 NPU 推出的完整软件栈,用来解决模型从训练框架到板端推理的落地问题。
常用到的核心组件有两个:
- RKNN-Toolkit2
运行在 PC 端(通常是 Ubuntu)的开发工具链,负责把第三方框架模型(如 PyTorch、TensorFlow、ONNX)转换、量化、优化为 .rknn 文件。
项目地址:
https://github.com/airockchip/rknn-toolkit2
- RKNN Runtime
运行在嵌入式板卡端(如 RK3588)的运行时库,负责加载 .rknn 模型并调用 NPU 执行推理。
RKNN 的典型工作流
从开发到部署,一般可以分成 4 个阶段:
- 模型转换
把 .onnx 或 .pt 模型导入 Toolkit,完成图转换与算子适配。
- 量化与优化
这是 RKNN 提速的关键步骤。NPU 更擅长整数计算(INT8),通常会把 FP32 模型量化为 INT8,在保证精度可接受的前提下换取更高吞吐和更低延迟。
- 模型导出
导出目标模型文件:.rknn。
- 板端推理
在 RK3588 上通过 C/C++ 或 Python 接口调用 Runtime,完成加载、预处理、推理和后处理。
推荐转换链路
实际项目里,更推荐这条链路:
PyTorch (.pt) -> ONNX (.onnx) -> RKNN-Toolkit2 -> .rknn
原因很简单:ONNX 在中间层更通用,便于调试和排查算子兼容问题;如果直接从训练框架到 RKNN,遇到兼容性问题时排错成本更高。
适配过程中的几个经验点
- 优先保证 ONNX 导出稳定
在进入 RKNN 转换前,先用 ONNXRuntime 做一次基线推理,确认输入输出 shape、数值范围和后处理逻辑都正确。
- 量化数据集要贴近真实场景
INT8 量化效果高度依赖校准数据分布。采样越接近线上真实输入,精度掉点通常越可控。
- 板端前后处理要和训练侧对齐
比如颜色空间(RGB/BGR)、归一化参数、resize 方式、padding 策略,任意一个不一致都会直接影响最终效果。
- 先跑通,再压榨性能
第一阶段优先打通端到端流程;等结果稳定后,再逐步做 batch、线程、流水线和内存复用优化。
小结
RKNN 的核心价值,在于让模型在边缘设备上跑得快、跑得稳,还能持续优化。
如果你正在做 RK3588 的部署,建议先把链路固定在 ONNX 中间层,先验证精度一致性,再做性能优化,这样整体节奏会顺很多。
版权声明: 本文首发于 指尖魔法屋-边缘设备RK3588下RKNN的推理适配(https://blog.thinkmoon.cn/post/992-%E8%BE%B9%E7%BC%98%E8%AE%BE%E5%A4%87rk3588%E4%B8%8Brknn%E7%9A%84%E6%8E%A8%E7%90%86%E9%80%82%E9%85%8D/) 转载或引用必须申明原指尖魔法屋来源及源地址!