rk3588上创建一个能调用NPU加速的docker容器

需要先确认一下目录系统是否加载了NPU,使用什么方法加载NPU驱动的,方法是:

dmesg | grep -i rknpu

正确的话应该可以看到

[ 9.617119] [drm] Initialized rknpu 0.8.2 20220829 for fdab0000.npu on minor 1

之类的初始化日志。

再运行:ls -l /dev/dri 2>/dev/null || echo “no /dev/dri”

正常的话应该可以看到:

crw-rw—-+ 1 root video 226, 0 2023年 5月 9日 card0
crw-rw—-+ 1 root video 226, 1 2023年 5月 9日 card1
crw-rw-rw- 1 root render 226, 128 2023年 5月 9日 renderD128
crw-rw-rw- 1 root render 226, 129 2023年 5月 9日 renderD129

再运行 sudo find /usr -name “librk
nn*.so*” 2>/dev/null

正常应该至少看到:

/usr/lib/librknnrt.so/usr/lib/librknnrt.so

这样就可以确定系统是以内核的方式加载了npu驱动,并具备一个最小的runtime 库 librknnrt.so

这样就可以使用以下命令启动一个能调用npu 的容器:

docker run -it –rm \
  –device=/dev/dri/card1 \
  –device=/dev/dri/renderD129 \
  -v /usr/lib/librknnrt.so:/usr/lib/librknnrt.so:ro \
  <镜像> bash

创建一个能使用ffmpeg 调用rk3588硬件视频编解码的容器

使用如下docker 命令:

docker run -it –privileged -d –device=/dev/mpp_service:/dev/mpp_service –device=/dev/rga:/dev/rga –device=/dev/dri:/dev/dri –device=/dev/dma_heap:/dev/dma_heap –name test_vpu -v /tmp:/tmp -v /home/marblech:/data rk3588_ubuntu2004_gst:latest bash

编译ffmpeg:

git clone https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
./configure \
  –prefix=/usr/local \
  –enable-gpl \
  –enable-version3 \
  –enable-libdrm \
  –enable-rkmpp \
  –enable-rkrga \
  –disable-static \
  –enable-shared
# 编译并安装
make -j8
sudo make install

rk3588上创建可调用硬件加速容器的方法记录

这是记录尝试在rk3588开发板上创建可调用npu 硬件加速和视频硬件编解码容器的笔记。

通过网上资料和AI模型的消息。我在rk3588的板上创建一个可以调用硬件加速的容器需要如下操作:

1、我使用的是香橙派的 orange pi  5 ultra ,8G内存,256G 的SD卡。厂商号称有6T算力。

2、宿主机的操作系统是 orange OS ,其实是 arc linux 的摩改版

3、docker 镜像是ubuntu 20.04 ,在创建镜像时,需要引用宿主机的硬件,使用如下参数:

docker run -it -d –name test_vpu –device /dev/mpp_service –device /dev/dri –device /dev/rga ubuntu:20.04 bash

但在后来使用时发现存在容器MPP 找不到 SoC的问题,

需要加入:

–privileged \
–volume /proc/device-tree:/proc/device-tree:ro \

容器内安装包:

apt-get update && apt-get install -y –no-install-recommends \
    ca-certificates git build-essential pkg-config cmake meson ninja-build \
    libdrm-dev libv4l-dev libudev-dev \
    libglib2.0-dev libgudev-1.0-dev \
    gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav \
    gstreamer1.0-plugins-base-apps \
    python3 python3-pip \
    && rm -rf /var/lib/apt/lists/*
4、下载mpp 代码并编译:
git clone –depth=1 https://github.com/rockchip-linux/mpp.git && \
    cmake -S mpp -B mpp/build -DCMAKE_BUILD_TYPE=Release -DRKPLATFORM=ON && \
    cmake –build mpp/build -j”$(nproc)” && \
    cmake –install mpp/build
5、下载gstreamer 的mpp 插件并编译:
apt install -y git meson ninja-build pkg-config build-essential \
libdrm-dev libglib2.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev
下载和编译gstreamer-mpp插件代码并编译,这个原本rk3588厂家在github 上的仓库已不存在,所以使用了其他分支的镜像。
git clone https://github.com/Meonardo/gst-rockchip
cd gst-rockchip
meson setup build –prefix=/usr –buildtype=release
ninja -C build
ninja -C build install
验证插件是否正确安装

gst-inspect-1.0 | grep rockchip
应该能看到类似:

rkmpph264enc

rkmpph265enc

rkmppjpegenc

rkmppvideodec

rkmppfilter

rk3588的RKNN_lite使用方法

1、在使用Python的 RKNN_toolkit_lite2 时提示没有找到 librknnrt.so 需从以下路径获取。

https://github.com/rockchip-linux/rknpu2/blob/master/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so

2、貌似没有RKNN_toolkit2的板端部署的Python whl 所以,只能把RKNN_toolkit2先在X86 的PC上安装,并使用其进行模型转换,之后再把转换后的模型 复制到板端部署使用。

3、模型转换最好使用ONNX格式,转换成目标的rknn格式。ONNX需转换成upset12或以上。