工程实践与部署

RK3588 NPU 部署完全指南

从 PyTorch 模型到板端 100Hz 实时推理的完整流程,涵盖模型转换、板端部署、性能验证和生产环境配置。

Part 1: PC 端 - Ubuntu 22.04 环境搭建与模型转换

在 PC 上安装 RKNN Toolkit2,完成 PyTorch → ONNX → RKNN 模型转换

Ubuntu 22.04 装 RKNN Toolkit2 踩坑记录

记一下重点。Ubuntu 22.04 上装这个有三个坑:

这三条哪个不对后面都会报错。

1. 装系统依赖

先把该装的基础包装上:

sudo apt update
sudo apt install -y \
    build-essential cmake git wget unzip \
    libglib2.0-0 libsm6 libxrender1 libxext6

装 Python 3.8(22.04 不自带):

sudo apt install -y python3.8 python3.8-dev python3.8-venv

# 确认一下版本
python3.8 --version

2. 搞虚拟环境

建个虚拟环境,别污染系统 Python:

mkdir -p ~/envs
cd ~/envs
python3.8 -m venv rknn_env

# 激活(命令行前面会出现 (rknn_env) )
source ~/envs/rknn_env/bin/activate

# 检查一下
which python       # 应该是 ~/envs/rknn_env/bin/python
python --version   # 应该是 Python 3.8.x

路径不对或版本不是 3.8 就别往下走了。

升级 pip:

pip install --upgrade pip setuptools wheel

3. 下载源码

cd ~
git clone https://github.com/rockchip-linux/rknn-toolkit2.git
cd rknn-toolkit2
git checkout master

4. 装包

确认虚拟环境还在(echo $VIRTUAL_ENV 能看到路径就行):

# 装依赖(注意是 cp38 那个)
pip install -r packages/requirements_cp38.txt

# 装主程序
pip install packages/rknn_toolkit2-*.whl

别直接 pip install rknn-toolkit2,PyPI 那个不全。

5. 装模型转换所需的库

只装转换需要的:

# PyTorch(加载模型和导出 ONNX 用,CPU 版本就够了)
pip install torch --index-url https://download.pytorch.org/whl/cpu

# ONNX(转换中间格式)
pip install onnx

6. 测试一下

python - << EOF
from rknn.api import RKNN
print("装好了")
EOF

能 print 出来就说明成功了。每次新开终端记得激活:source ~/envs/rknn_env/bin/activate

7. 下载模型转换示例代码

装好 RKNN Toolkit2 后,下载我的模型转换示例:

包里都有啥:

怎么用:

# 1. 激活虚拟环境
source ~/envs/rknn_env/bin/activate

# 2. PyTorch 模型 → ONNX
python export_maddpg_actors_to_onnx.py

# 3. ONNX → RKNN(不量化,保证精度)
python onnx_to_rknn_maddpg.py

# 4. 生成参考输出(用于板端对比验证)
python pc_make_torch_out.py

重点:转换时设置 do_quantization=False,保证和 PyTorch 输出一致。


Part 2: 板端 - RK3588 部署与验证

在 RK3588 开发板上部署 C 程序,实现 100Hz 实时推理和系统服务

0. 你要达到的最终状态

1. 新板子基础配置

1.1 登录板子并确认架构

uname -m

应输出 aarch64(RK3588 是 ARM64)。

1.2 更新系统 + 安装编译工具

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential cmake git pkg-config

2. 安装 RKNN Runtime(librknnrt)

重点:apt 装不到,必须来自 rknpu2 SDK(或厂商 SDK)。

2.1 找到你的 rknpu2 SDK 目录

选项 1:懒得在官网下?用我打包好的:

解压后用这个路径(aarch64 版本):

# 解压到板子上
unzip rknpu2-master.zip
cd rknpu2-master

# 查看文件
ls runtime/RK3588/Linux/librknn_api/aarch64/

选项 2:板子上已有的 SDK(路径因人而异):

先找到你板子上的 librknnrt.so 在哪:

# 查找 librknnrt.so 的位置
sudo find / -name "librknnrt.so" 2>/dev/null

# 或者用 locate(更快,但可能需要先 updatedb)
sudo updatedb
locate librknnrt.so

找到后记下路径,常见路径示例:

# Khadas 板子常见路径
ls /home/khadas/khadas/rknpu2/runtime/RK3588/Linux/

# 或者其他厂商路径
ls /opt/rknpu2/runtime/RK3588/Linux/

应该能看到:

librknnrt.so / librknnrt.so.1
librknn_api/include/rknn_api.h

2.2 安装到系统目录(推荐,最稳)

如果用我的压缩包(aarch64):

sudo cp rknpu2-master/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so* /usr/lib/
sudo ldconfig

如果用板子自带的(路径根据你实际情况改):

# 示例:Khadas 路径
sudo cp /home/khadas/khadas/rknpu2/runtime/RK3588/Linux/librknnrt.so* /usr/lib/
sudo ldconfig

验证:

ldconfig -p | grep rknn

应该能看到 librknnrt.so

3. 建项目目录

mkdir -p ~/rknn_deploy_demo
cd ~/rknn_deploy_demo

把你的 .rknn / obs.bin / torch_out.bin 放这里。

4. 下载完整示例代码

环境配好了,现在下载我打包好的完整代码:

4.1 包里都有啥

核心 C 程序:

编译和部署脚本:

systemd 配置:

测试数据:

文档:

4.2 怎么用

快速部署(推荐):

# 解压后进入目录
cd rknn_c

# 一键部署(编译+安装+启动)
chmod +x *.sh
sudo ./deploy_npu_system.sh

# 查看运行状态
sudo systemctl status rk3588-npu-daemon

分步测试:

# 1. 编译验证工具
./compile_validate.sh

# 2. 验证模型(确保数值和 PyTorch 一致)
./validate_rknn actor_agent0.rknn obs_actor_0.bin torch_out_actor_0.bin

# 3. 测试守护进程(不安装服务)
./test_daemon.sh