这里介绍了能够支持完整的rfs构建,rknn模型转换和yolo训练的完整的环境,最终会涉及到三个docker系统。注意,Docker运行时,创建了/app路径与宿主机做文件中转。这一个功能是在启动docker的脚本里做到的。
1.Docker环境准备
1.1 准备Dockerfile构建脚本
把下面的内容存放在项目路径根目录下,文件名Dockerfile,考虑了:
- apt-get源指向国内镜像
- 安装过程那个时区命令行输入问题
# Base Image 依赖的ubuntu镜像,
FROM ubuntu:20.04
# Author
LABEL maintainer="username <user@email.addr>" #可以修改这里# Base Image
FROM ubuntu:20.04
# Author
LABEL maintainer="twicave <twicave@aliyun.com>"
# 提前设置时区
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
# 备份原有的 sources.list 文件
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 创建新的 sources.list 文件并写入阿里云源
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list
# 更新软件包列表
RUN apt-get update
# expect
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
git \
libcurl4-openssl-dev \
libgtest-dev \
libxml2-dev \
pkg-config ssh make gcc libssl-dev liblz4-tool \
g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot gcc-multilib g++-multilib \
unzip device-tree-compiler ncurses-dev p7zip bc tree
# workspace
WORKDIR /app
1.2.构建Docker容器
docker build -t <user-name>/rk3588_build:latest .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/Sending build context to Docker daemon 51.2kB
Step 1/x : from ubuntu:20.04
1.3 查看docker镜像
root@LAPTOP-0BJBKJGQ:~/git/rk3588_build# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<user-name>/rk3588-build latest 8f861e5dd21f About an hour ago 1.06GB
1.4 启停docker
启动:
docker run --privileged --name rk3588-build -tid -v /dev/mem:/dev/mem -v /root/git/rk3588_build/:/app/rk3588_build --rm <user-name>/rk3588-build:latest
停止:
docker stop rk3588-build
注意这里对docker的全名重新命名了一下。
1.5 进入docker环境
docker exec -ti rk3588-build /bin/bash
到这一步之后,可以自行在docker环境构建自己的rknn转换工具,以及开发板的文件系统构建工具。然后也可以直接将开发板厂商的文件系统SDK在docker中加载。
一般开发板厂商甚至给直接给你,预先处理过的rknn转换docker。
2.三个AI视频应用的Docker环境:
2.1Docker1:开发板厂商的文件系统SDK
2.1.1 下载厂商sdk, 解包
因为sdk非常大,不建议将其在docker环境中直接解包。下面是将其解包到了宿主机的/root/firefly_sdk目录。注意,如果在windows环境小,不可以将压缩包直接解压在windows目录结构:
root@LAPTOP-0BJBKJGQ:/mnt/d/BaiduNetdiskDownload/base-v1.1.1b# dir
md5sum.txt rk3588_6.1.tgz.split01 rk3588_6.1.tgz.split03 rk3588_6.1.tgz.split05
rk3588_6.1.tgz.split00 rk3588_6.1.tgz.split02 rk3588_6.1.tgz.split04
root@LAPTOP-0BJBKJGQ:/mnt/d/BaiduNetdiskDownload/base-v1.1.1b# mkdir /root/firefly_sdk
root@LAPTOP-0BJBKJGQ:/mnt/d/BaiduNetdiskDownload/base-v1.1.1b# cat rk3588_6.1.tgz.split0* | tar -C /root/firefly_sdk -zx
将这个sdk整体搬运到docker可见目录:
2.1.2 下载对应的rootfs
相关的rootfs是在产品页面下载的:
root@LAPTOP-0BJBKJGQ:~/git/rk3588_build/firefly_sdk/rootfs_ec_r3588rt# 7z x /mnt/d/BaiduNetdiskDownload/Ubuntu22.04-Xfce_COMMON_v3.11-53_20250113.7z
解压缩后:
# ls -l
total 2714496
-rw-r--r-- 1 root root 2779631616 Jan 13 12:39 Ubuntu22.04-Xfce_COMMON_v3.11-53_20250113.img
drwxr-xr-x 2 root root 4096 Jan 13 12:30 mnt
-rw-r--r-- 1 root root 376 Jan 13 12:39 readme
2.1.3 创建符号链接
# mv Ubuntu22.04-Xfce_COMMON_v3.11-53_20250113.img /root/git/rk3588_build/firefly_sdk/rk3588_6.1/prebuilt_rootfs/
#cd /root/git/rk3588_build/firefly_sdk/rk3588_6.1/prebuilt_rootfs/
#ln -sf Ubuntu22.04-Xfce_COMMON_v3.11-53_20250113.img rk3588_ubuntu_rootfs.img
之后,还有一些升级的工作,然后这个环境可以用于创建开发板的待烧写固件包。
2.2.Docker2:rknn模型转换与测试环境准备
2.2.1 下载
里面有docker:
2.2.2 docker导入
#docker load -i /mnt/d/BaiduNetdiskDownload/rknn-toolkit2-v2.3.0-cp38-docker.tar.gz
2.2.3 加载&进入
#docker run --privileged --name rknn-toolkit2 -tid -v /dev/mem:/dev/mem -v /root/git/rk3588_build/:/app/rk3588_build --rm rknn-toolkit2:2.3.0-cp38
#docker exec -ti rknn-toolkit2 /bin/bash
2.3 Docker3: yolo模型训练、测试&转换的docker环境
之前介绍了yolo11的一个极简训练环境:
但是为了把模型从宿主机迁移至开发板,还有一些其他的事项要做,最好的方法还是利用yolo原始发布目录的docker,创建一个完整版本的执行环境。
首先还是克隆yolo环境,然后利用docker构建脚本,来手工生成docker:
docker build -t twicave/yolo:latest -f ./docker/Dockerfile-python .
注意,原始的yolo Dockerfile-python是指向国外的,需要将其指向国内镜像。1.1节中包含apt-get的国内镜像处理;另外,pip的镜像处理可以这样做:
# 设置 pip 镜像源
ENV PIP_INDEX_URL https://mirrors.aliyun.com/pypi/simple/
注意:yolov11的Dockerfile使用 uv 来替代pip install来安装python包。它的国内镜像我不确定怎么处理,导致那个docker build的过程极慢。稍后我在增补这部分内容。现在,只有等。
附录A 有关uv python包安装工具的信息
uv我没有找到使用国内pip镜像站的方法。它并不快。
uv-速度飞快的pip替代 - 知乎https://zhuanlan.zhihu.com/p/689976933
附录B 版本兼容性问题
注意把各个docker中的onnx pytorch随着下表对齐到特定的版本范围,版本不匹配会造成不可预知的后果。我这边刚刚发现训练出的模型转换后无法识别。还在排查原因。
下面的文件是rknn-toolkit2.3的doc文档:03_Rockchip_RKNPU_API_Reference_RKNN_Toolkit2_V2.3.0_CN.pdf page5.
这个时候,最大的问题,你会遇到在缺省pip源无法安装特定的pytorch版本的问题,解决办法,暂时的处理我只能想到这个:
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cpu --default-timeout=10800
我加大了超时时间。仍然从原始pip源安装。上面这个依从于rknn-toolkit2.3的自定义pytorch版本安装命令行来自这里:
Previous PyTorch Versions | PyTorchhttps://pytorch.org/get-started/previous-versions/
我现在确认,在torch==2.4.0,对于rknn-toolkit2.3可以正常使用。(Feb17,2025)
附录C 修改apt-get 源的另一个版本
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#一组指向aliyun的apt install镜像
root@BF-202502171133:~# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
附录D 删除docker images里的一些不再使用的映像
附录E 常用的docker指令与脚本
docker commit -a "Your Name" -m "Updated some configurations" abc123 my-custom-image:v1