最近在用 RK3588 搭配 RK1820/RK1828 做端侧 AI 推理,整理了一些关于架构、工具链和遇到的一些小坑,分享一下,希望能帮大家少走点弯路。
一、 硬件架构是怎么分工的?
它是典型的主从异构架构。简单理解就是:
- 主控(RK3588):负责系统的干活,比如系统调度、资源分配、外设通信等。
- 协处理器(RK1820/RK1828):专职 AI 计算,通过 PCIe 高速接口和主控通信。这种设计的好处是跑大模型推理时不会抢占主控的资源,系统依然能保持流畅。
二、 状态监控工具 rknn-smi
这就相当于 N 卡生态里的 nvidia-smi,日常开发基本离不开它。几个常用命令记一下就行:
- 查软件版本:
sudo rknn-smi -v - 查硬件信息:
sudo rknn-smi info -l - 实时监控状态:
sudo rknn-smi info -w - 切性能模式:
sudo rknn-smi set -t work_mode -s 2 - 查功耗:
sudo rknn-smi info -t power(注意:目前硬件不支持这个命令,跑了也没用)
详细的用法可以直接看 SDK 里的 docs/Tools/Rockchip_User_Guide_RKNN-SMI_Tool_CN.pdf。
三、 踩坑记录:概率性 “Failed to initialize rknnsmi”
刚上电的时候,偶尔会遇到 rknn-smi 初始化失败的报错。查了下,主要是服务启动时序的问题,底层还没完全就绪,服务就急着去查了。
解决办法:
给 systemd 服务加个延时。编辑 /lib/systemd/system/rknn3.service,在 [Service] 下面加一行 ExecStartPre=/bin/sleep 3,让它等个 3 秒再启动。改完大概长这样:
[Unit]
Description=rknn3 runtime service
DefaultDependencies=no
After=local-fs.target
[Service]
Type=forking
ExecStartPre=/bin/sleep 3 # 加个3秒延迟
ExecStart=/bin/rknn3_startup start
ExecStop=/bin/rknn3_startup stop
[Install]
WantedBy=sysinit.target
保存后重启服务或者重启板子,基本就不会再报这个错了。
四、 SDK 目录和工具链梳理
SDK 的 rknn 目录下主要是这几个东西:
rknn/
├── rknn3-model-zoo
├── rknn3-runtime
├── rknn3-toolkit
└── rknn-gstreamer-plugins
rknn3-model-zoo:官方提供的模型部署示例,建议新手直接从这里跑起。rknn3-runtime:板端的运行时库,C/C++ 接口,写应用调它。rknn-gstreamer-plugins:GStreamer 相关的插件。
避坑:
PC 端的模型转换工具是 RKNN3 Toolkit。要注意,它和以前的 RKNN-Toolkit、RKNN-Toolkit2 完全不兼容!千万别下错版本或者混用,不然转换模型的时候会各种报错。