LQ50 为基于 RK1828 的 M.2 算力卡,目标芯片统一填 rk1828;RK1820 目标芯片填 rk1820。
RKNN3 SDK V1.0,硬件架构:RK3588 主机 + RK1820/RK1828 (LQ50) PCIe AI 协处理器。
整体链路:PC 模型转换 → 板端硬件校验 → 推送模型 → Runtime 推理运行 → 性能调优。
一、SDK 软件栈说明
组件 | 作用 |
rknn3toolkit | PC (Ubuntu22.04) 端,模型转换、量化、精度校验、仿真推理 |
rknn3runtime | 板端库,C/Python 推理 API,驱动交互 |
rknn3modelzoo | CV/LLM/VLM 完整示例,直接参考改代码 |
环境要求:PC Ubuntu22.04,Python3.10;大模型转换建议内存≥120G;板端固件必须是 RK182X 适配固件,普通 RK3588 固件无法识别 LQ50/RK1828。
二、步骤 1:PC 端环境搭建(模型转换主机)
# 拉取SDK套件
git clone https://github.com/airockchip/rknn3‑toolkit
git clone https://github.com/airockchip/rknn3‑model‑zoo
# 安装依赖
cd rknn3‑toolkit/packages
pip3 install -r requirements_cp310.txt
export PYTHONPATH=$(pwd)/../
不建议 Windows,优先 WSL2 或物理 Ubuntu;RKNN3 不兼容旧 RKNN‑Toolkit2,环境不要混用。
三、步骤 2:原始模型导出 ONNX
1. CV 模型(YOLO、检测、分割):PyTorch 导出 ONNX,opset12;去掉冗余算子,避免自定义算子。
# pytorch导出示例
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=12, do_constant_folding=True)
2. LLM/VLM 大模型:优先使用 zoo 自带export_llm.py脚本,不要手动导出 onnx,大模型有特殊权重分片逻辑。
cd rknn3‑model‑zoo/examples/Qwen2_5/python
python export_llm.py --model_path Qwen/Qwen2.5‑3B‑Instruct --quant
四、步骤 3:RKNN3 Toolkit 转换模型(生成.rknn + .weight)
方式 A:调用 zoo 现成脚本(推荐)
# CV模型示例,RK1828 / LQ50
cd rknn3‑model‑zoo/examples/yolov5/python
python convert.py ./yolov5s.onnx rk1828
# RK1820则改为 rk1820
输出产物:xxx.rknn(模型图) + xxx.weight(权重文件),两个文件必须成对放到板端使用。
方式 B:Python API 转换脚本模板
from rknn3.api import RKNN3
rknn = RKNN3()
# 配置目标芯片 rk1828(LQ50)/rk1820
rknn.config(target_platform="rk1828", quantized_dtype="w8a8", quant_algorithm="normal")
rknn.load_onnx(model="./model.onnx")
rknn.build(do_quant=True, dataset="./calib.txt")
rknn.export_rknn("./out/model.rknn")
rknn.release()
量化:CV 常用 w8a8;大模型使用 zoo 脚本内置量化;必须提供真实业务校准数据集,否则精度暴跌。
转换完成后可以在 PC 做 sim 仿真推理,对比 onnx 输出,确认转换无明显精度损失。
五、步骤 4:板端(RK3588+LQ50/RK182X)硬件校验
LQ50(RK1828)M.2 卡上电顺序:先插卡,再上电主板,保证 PCIe 枚举成功;需要适配固件,普通固件识别不到加速卡。
板端执行:
# 查看PCIe设备
lspci | grep RK182
# rknn‑smi 查看NPU状态(类似nvidia‑smi)
sudo rknn‑smi info -l
sudo rknn‑smi ‑v
正常输出:能看到 RK1828/RK1820 硬件版本,无报错,代表硬件、驱动正常。
六、步骤 5:推送模型、库、demo 到板端
# adb推送,也可用scp
adb push out/model.rknn /data/rknn_demo/model/
adb push out/model.weight /data/rknn_demo/model/
# 推送runtime库与demo程序
adb push rknn3‑model‑zoo/install/rk3588_linux_aarch64/rknn_yolov5_demo /data/rknn_demo
七、步骤 6:板端运行推理
1)C++ Demo(产品正式部署)
adb shell
cd /data/rknn_demo
export LD_LIBRARY_PATH=./lib
# CV模型
./rknn_yolov5_demo model/model.rknn test.jpg
# LLM模型示例(zoo大模型demo)
./rknn_qwen2_5_demo model/qwen.rknn model/qwen.weight model/tokenizer.gguf 0xff "你好"
2)板端 Python 推理
from rknn3_runtime import RKNN3Runtime
rt = RKNN3Runtime()
rt.load_model("./model.rknn", "./model.weight")
output = rt.inference(inputs=[img_data])
rt.release()
八、关键踩坑要点(RK1820/RK1828 / LQ50)
1. 成对文件:.rknn与.weight必须配套,不能混用不同转换批次文件,大模型还附带 tokenizer、embed.bin 文件。
2. 目标平台不要写错:LQ50 是 RK1828,填rk1828,填 rk3588 会报错。
3. 固件:必须使用 RK182X 适配固件,普通 RK3588 固件缺少 PCIe 驱动,rknn‑smi 找不到设备。
4. 大模型转换 PC 内存要求高,7B 以上建议≥120G 内存,否则 OOM 失败。
5. ONNX opset 建议 12;不要大量自定义算子,不支持算子需要算子替换或者自定义算子开发。
6. 上电顺序:M.2 算力卡先插好,再上电主板,避免 PCIe 枚举失败识别不到卡。
7. RKNN3 与 RKNN‑Toolkit2 不互通,旧.rknn 模型不能直接跑在 RK1828,必须用 rknn3‑toolkit 重新转换。
九、性能测试
# 板端benchmark测试时延、吞吐量
rknn3‑benchmark --model model.rknn --weight model.weight
十、开发资源
github:airockchip/rknn3‑toolkit、rknn3‑model‑zoo
文档:rknn3‑toolkit/doc RKNN3 SDK 用户手册、RK1820/RK1828 快速入门文档
需求留言: