1容器环境准备
需提前在宿主机上下载好docker和nvidia-docker及相关依赖。下载过程可参考:https://blog.csdn.net/dream__dream/article/details/113616493
另外,yolov8在dockerhub上是有现成的容器的(ultralytics/ultralytics:latest),直接下载这个容器应该会方便很多,但是我这里用的是通用的ubuntu系统和cuda容器,也可以同样的方式部署其他算法。
1.1启动docker服务
systemctl start docker
1.2基础镜像导入
提前下载ubuntu系统镜像打包文件cuda_cudnn_ubuntu.tar到宿主机,该镜像包含系统、cuda、cudnn和显卡驱动。
目前dockerhub禁用的情况可参考另一篇博文进行镜像下载:github配置阿里云镜像库,加速docker镜像下载。
导入镜像:
sudo docker load < cuda_cudnn_ubuntu.tar
导入结束后显示:
镜像名修改:
sudo docker tag a62 yolov8:latest
测试镜像导入结果:
sudo docker images
显示如下:
yolov8镜像名、tag和IMAGE_ID都能对应的上,说明基础镜像导入成功。
1.3利用镜像创建容器
sudo docker run -it --name yolov8Solar --shm-size 32g -v /home/docker/workers/yolov8:/home --gpus all yolov8:latest /bin/bash
其中,yolov8Solar是容器名称,32g是容器内存,-v后的路径是将容器的/home/文件夹挂载到宿主机的yolov8路径中,–gpu是允许容器使用的gpuID,yolov8:latest是镜像名称。
查看容器:
sudo docker ps -a
显示如下:
可以看到,第一个容器是利用yolov8:latest镜像创建的名为yolov8Solar的容器。接着启动容器:
sudo docker start 093
093是容器ID的前三个字符,系统会自动识别到容器ID。检查容器是否在运行:
sudo docker ps
显示在运行容器信息:
进入容器:
sudo docker attach 093
显示如下:
说明进入了093容器,且进入了root账户。
需要注意的是,此时的容器只包含ubuntu系统、cuda、cudnn和显卡驱动等深度学习运行环境,没有其他环境依赖。
要配置其他的环境依赖项,首先需要下载python。
更新apt库(如果需要换源,需要在此步骤前更换/etc/apt/sources.list文件
apt update
apt upgrade
apt install python3.9
注意:这时候输入python不一定能对应上python3.9,可能需要在~/.bashrc中添加环境变量:alias python=’PYTHON PATH’,填上对应的python路径。
此时的pip也不一定能对应上python3的pip,需要从/usr/bin或者/usr/local/bin的pip文件中修改pip对应的python路径。
当然,如果能对应上,那以上都不需要了。
接着可以下载算法yolov8对应的深度学习依赖库
pip install ultralytics
上句指令可以安装运行yolov8的所有依赖库。
cd /home进入home文件夹,下载yolov8工程。没有git工具的需要提前下载。
git clone https://github.com/ultralytics/ultralytics.git
也可以直接下载github工程的zip文件进行解压。可以直接将压缩包放在我们前面挂在的宿主机的路径(/home/docker/workers/yolov8)中,这个文件夹和容器的/home/文件夹相对应。
2容器验证
2.1训练工程验证
更改/ultralytics/ultralytics/cfg/datasets/DOTAv1.yaml文件中的训练集和验证集路径。
创建train.py文件,文件内代码如下:
from ultralytics import YOLO
model = YOLO('yolov8n-obb.yaml').load('weights/yolov8n-obb.pt')
model.train(data='DOTAv1.yaml', epochs=100, imgsz=512)
直接从ultralytics包中导入YOLO模型,其中yolov8n-obb.yaml是网络的模型结构文件;’/weights/yolov8n-obb.pt’是模型的预训练权重文件(如果没有需要提前下载并放在工程目录的weights文件夹中);’DOTAv1.yaml’是数据集配置文件;epochs是训练的迭代次数,imgsz是训练图像的尺寸。
运行train.py
python train.py
显示如下:
在容器内训练正常。
2.2推理验证
创建推理文件detect.py,代码如下:
from ultralytics import YOLO
from ultralytics.utils import DEFAULT_CFG
# DEFAULT_CFG.save_dir = 'runs/test'
model = YOLO(r'runs/obb/train/weights/best.pt')
# model.val(data='DOTAv1.yaml', imgsz=512, save=True, save_txt=True, save_conf=True)
results = model('val/images', save=True, save_txt=True, save_conf=True, show_conf=True, show_labels=False)
其中DEFAULT_CFG.save_dir可以修改推理结果的保存路径。运行推理代码:
python detect.py
显示如下:
在容器内推理正常。
3镜像打包
退出容器:
exit
或者在宿主机中停止容器:
sudo docker stop 093
利用部署好的容器生成镜像:
sudo docker commit > yolov8_solar:base
等待镜像生成完成后,查看所有镜像:
sudo docker images
显示如下:
可以看到名为yolov8_solar,tag名为base的镜像,此镜像大小为16.2GB。接着,将镜像保存成压缩文件,方便镜像移植和交付:
sudo docker save 60c> yolov8_solar.tar
’60c‘为镜像ID,等待打包完成。
需要注意的是,镜像打包只包含环境,不包含/home/文件下的代码工程与数据文件。
接下来就可以移植这个镜像压缩文件到其他宿主机中进行部署安装了。