常用docker命令:
docker images 查看镜像
docker rmi image-id 删除镜像
docker ps -a 查看所有容器
docker rm container-id 删除容器
docker image prune 释放
yolov5封装学习链接
csdn学习链接:用Docker搭建yolov5开发环境_docker yolov5-优快云博客
官方给的链接:Docker Image - Ultralytics YOLO Docs
使用docker封装本地yolov5项目总结
安装docker
官方网址下载,需要邮箱注册
配置镜像源
在设置里面的dockers engine中配置镜像
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
更换 image保存路径,不然c盘会炸
更换前需要将images中所有进程停止
这里面的yolov5v1就没有停止,显示的是In use
创建Dockerfile,注意,没有拓展名
#基于的基础镜像
FROM nvcr.io/nvidia/pytorch:24.01-py3
#代码添加到code文件夹
ADD . /usr/src/app/uniform/yolotest
# 设置code文件夹是工作目录
WORKDIR /usr/src/app/uniform/yolotest
# 安装支持
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
在Yolov5项目目录的中创建Image(用pycharm的终端、cmd都可以)
由于封装cuda和cudnn总是出问题,最后也没有解决,主要是connect不上,国内镜像都是cpu的torch
然后直接在网上找了一个现成的,里面的python是3.10的
需要先用docker pull一下:docker pull nvcr.io/nvidia/pytorch:24.01-py3
在docker的images中可以看到
然后进行创建
docker build -t yourname .
这里的yourname为自己设定的名字,我这里设定的是yolov5
在docker的bulids和images里面有记录,我这里的images已经删除了
中间一般不会有报错了
Image转为Container
docker run --gpus all -it --name yolov5 -v E:\Users\yolov5:/mnt/ yolov5:last bash
其中:
--gpus all:请求使用所有可用的 GPU 资源。
-it:两个选项的组合:
-i:以交互模式运行容器,保持标准输入流(stdin)打开。
-t:分配一个伪终端,允许用户与容器交互。
-v E:\Users\yolov5:/mnt/:挂载一个卷,将主机上的 E:\Users\yolov5 目录映射到容器内的 /mnt/ 目录。这允许容器访问主机上的文件。mnt可以随意更 换,尽量是没有出现过的地址,不然里面的东西可能会被覆盖
--rm:容器在停止时自动删除。这避免了容器占用的空间。(可以不用)
yolov5:last:指定要运行的 Docker 镜像,yolov5 是镜像的名称,last 是标签。
bash:在容器内运行 bash shell,这样用户可以与容器交互。
如果需要添加或者修改yolov5里面的文件,可以在本地的地址(我这里是 E:\Users\yolov5)进行修改,然后进行cp就可以
在docker里面是可以找到 /mnt/ 目录的, /mnt/ 目录里面的内容就我是主机上的 E:\Users\yolov5 里面的内容
在Docker容器中运行yolov5
我这里的名字为yolov5v1,运行 docker run --gpus all -it --name yolov5v2 -v E:\Users\yolov5:/yolo/ yolov5v1 bash
也可以查看自己的docker :docker ps
出现以下的内容就说明成功了,而且没有报GPU错误
查看文件夹内容:ls
启动:python detect.py
docker commit
环境可能会有一些问题,可以直接在docker里面进行pip安装,(conda是不行的,因为没有将conda封装到yolov5里面),在配置完环境可以运行后,新启一个cmd,将修改好可以运行的images进行commit
docker commit 9f593dbe2e80 yolov5v1
9f593dbe2e80为container的ID,用docker ps可以看到,后面是commit的名字,要和之前的不同
我的是yolov5v1
导出封装的docker到本地
在cmd中,或者pycharm的终端
docker save yolov5v1 -o yolov5v1.tar
过程会比较慢
导出完了会在你的目录下面有
上传服务器
托拉,scp上传方法都可以
然后到目录下sudo docker load -i yolov5v1.tar
就可以了
启动方法和windows一样
但是我这出现了问题
服务器的GPU用不了,目前还在查看问题所在
问题解决
我们尝试了很多方法,进行了排除
1.直接将nvcr.io/nvidia/pytorch:24.01-py3打包放进服务器
显示可以使用cuda,torch-gpu也是可以用的
2.考虑可能nvcr.io/nvidia/pytorch:24.01-py3存在问题
在torch版本显示的时候,出现类似于乱码的问题
因此,去docker官网https://hub.docker.com/r/pytorch/pytorch/tags,重新拉取一个镜像,我拉取的是
记得去查看服务器的cuda版本,这里的版本不能超过服务器显卡的cuda上线
2.1 先将这个直接打包上传服务器(接下来所有操作都在服务器)
上传完了可能没有name,我这边就没有,在REPOSITORY和TAG显示
需要重新命名
docker tag 632278b72312 pytorch:1.13.0-cuda11.6-cudnn8-devel
2.2 将pytorch在docker中运行
运行之后,将本地的yolov5文件放到映射的文件夹,使用cp进行复制到运行的docker中
2.3 配置环境
将requirements.txt文件中torch和torchvision注释,不然可能会重新安装pytorch
2.4 配置完运行train.py出现问题
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
这是opencv出现了问题,解决方法(自测有效)
pip install opencv-python-headless,需要和opencv-python一个版本
下面就可以进行训练了
出现一些其他的问题
在cmd中输入:(docker build -t test .)
ERROR: failed to solve: python:3.8.0: failed to resolve source metadata for docker.io/library/python:3.8.0: failed to authorize: failed to fetch oauth token: Post "https://auth.docker.io/token": dial tcp 199.59.149.236:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
解决方案:docker构建问题_error: failed to solve: python:3.8: failed to reso-优快云博客 先把python3.8.0的docker先pull下来:docker pull python:3.8.0;然后重新进行docker构建,就会跳过大包下载失败的问题。