Rockchip NPU 使用教程
Table of Contents
1. 设备端使能 rknpu
1.1. 内核驱动
ROCKCHIP_RKNPU=y ROCKCHIP_RKNPU_DEBUG_FS=y ROCKCHIP_RKNPU_DRM_GEM=y
1.2. 设备树
rknpu: npu@fdab0000 {
...
compatible = "rockchip,rk3588-rknpu";
...
};
rknpu_mmu: iommu@fdab9000 {
...
compatible = "rockchip,iommu-v2";
...
};
&rknpu {
rknpu-supply = <&vdd_npu_s0>;
mem-supply = <&vdd_npu_mem_s0>;
status = "okay";
};
&rknpu_mmu {
status = "okay";
};
1.3. 验证
dmesg | grep npu # 查看 npu 驱动版本 # [ 29.304384] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode # [ 29.320787] [drm] Initialized rknpu 0.9.8 20240828 for fdab0000.npu on minor 1
2. 设备端安装 rknpu 运行环境
RKNPU2 Runtime: 主要职责是负责在系统中加载 RKNN 模型,并通过调用专用的神经处理单元(npu)执行RKNN模型的推理操作。
2.1. 安装 RKNPU2 Runtime
RKNP2 Runtime 具体存放位置为: rknpu2/runtime/<os>/librknn_api/<arch>/librknnrt.so ,将该库拷贝到设备中既可。推荐路径为 /usr/lib/
git clone https://github.com/airockchip/rknn-toolkit2.git
3. 运行 rknpu 例程
RKNPU2 Runtime 中有很多例程,这里使用 yolov5 模型进行演示。例程路径为 rknpu2/examples/rknn_yolov5_demo/
如果想测试更多的例程可以访问 https://github.com/airockchip/rknn_model_zoo.git
大模型测试例程 https://github.com/airockchip/rknn-llm.git
3.1. 编译运行
############## Host ##################### export GCC_COMPILER=<cross-compiler-path> cd rknpu2/examples/rknn_yolov5_demo/ ./build-linux.sh -t rk3588 -a aarch64 -b Release # 编译完成后会在当前目录下生成 install 目录 scp -O -r install <username>@<device-ip>:<path> # 将编译好的应用程序拷贝到设备中 ############## Device ##################### cd <path>/rknn_yolov5_demo ./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg letterbox # 会在当前目录下产生一个 output.jpg # post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 # Loading mode... # sdk version: 2.3.2 (429f97ae6b@2025-04-09T09:09:27) driver version: 0.9.8 # model input num: 1, output num: 3 # index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 # index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 # index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 # index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 # model is NHWC input fmt # model input height=640, width=640, channel=3 # Read model/bus.jpg ... # img width = 640, img height = 640 # once run use 24.280000 ms # loadLabelName ./model/coco_80_labels_list.txt # person @ (209 243 286 510) 0.879723 # person @ (479 238 560 526) 0.870588 # person @ (109 238 231 534) 0.839831 # bus @ (91 129 555 464) 0.692042 # person @ (79 353 121 517) 0.300961 # save detect result to ./out.jpg # loop count = 10 , average run 23.211700 ms
4. 查看 rknpu 运行信息
cat /sys/kernel/debug/rknpu/freq # 运行频率 # 1000000000 cat /sys/kernel/debug/rknpu/version # 驱动版本 # RKNPU driver: v0.9.8 cat /sys/kernel/debug/rknpu/load # 当前使用率 # NPU load: Core0: 0%, Core1: 0%, Core2: 0%,