Docker打包深度学习项目

Ubuntu如何用Docker打包深度学习项目?请看这里!

docker就不用多介绍了吧

Docker 安装:

没什么好说的,参照官网:https://docs.docker.com/engine/install/ubuntu/

sudo apt-get update

sudo apt-get install ca-certificates curl gnupg lsb-release

添加GPG key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

插曲:假如你使用官网的这行命令不成功,估计是网络问题,你可以:

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
     "deb [arch=amd64] Index of /docker-ce/linux/ubuntu/ \
     $(lsb_release -cs) \
     stable"

本人在使用下面这条命令时,同样出现连接超时,就是docker.com的问题:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

如果你也是,你可以:
(1)在软件与更新力更换源:
Docker打包深度学习项目_第1张图片
(2)在/etc/docker/daemon.json脚本添加(我直接简单粗暴添加多个):

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

更新一下软件包并安装:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

测试:

sudo docker run hello-world

会输出一连串东西,没报错就是正确的。

取消sudo执行docker:

有一说一,sudo docker xxx太烦了,好在可以设置

sudo cat /etc/group | grep docker
sudo groupadd docker    (一般来说安装docker后自动生成docker group)
sudo gpasswd -a ${USER} docker 
sudo chmod a+rw /var/run/docker.sock
sudo systemctl restart docker 

Docker打包深度学习项目_第2张图片

nvidia-docker安装

官方教程:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#
docker

YOLOX下载与配置:

你会在当前文件夹获得一个YOLOX的文件夹

git clone https://github.com/Megvii-BaseDetection/YOLOX.git

创建Dockerfile,注意位置:

touch Dockerfile

在这里插入图片描述
在Dockerfile写上:

FROM pytorch/pytorch:latest
  
ADD . /
 
WORKDIR /YOLOX
 
RUN apt-get update && apt-get install -y build-essential libgl1-mesa-dev libglib2.0-dev
RUN pip3 install -U pip && pip3 install -r requirements.txt
RUN python setup.py develop

如果你希望在创建镜像后要运行什么测试的命令,直接在后面加

RUN python xxx.py  (根据需要)

什么意思呢,就是使用dockers hub 中发布的pytorch/pytorch:latest镜像作为基础镜像(下载速度感人),ADD . /表示将当前所有文件’添加到镜像的根目录下”/“。然后执行一系列指令完成YOLOX的环境安装。

你也可以使用其他pytorch版本的镜像,在这里查看:https://hub.docker.com/r/pytorch/pytorch/tags

下载权重放到YOLOX/下(只要你喜欢,随便放)
https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth

创建镜像

docker build -t dockertest:v1.0 .

不要漏了后面那个点,意思是根据当前目录下的Dockerfile进行创建,dockertest表示镜像名字,v1.0表示tag,就是一个标签,随便写
在这里插入图片描述(省略一堆)
最后看到Successfully 的信息就行了
查看一下镜像,看到dockertest就表示成功了:

docker imags

启动一个容器

docker run -it --name task1 --gpus all dockertest:v1.0 /bin/bash

-it 表示交互式终端操作 , --name表示容器的名字, --gpus all表示使用GPU, 使用dockertest:v1.0镜像,(/bin/bash允许一个bash进程?)

然后你就会切换到容器的交互式终端中:
使用正常的YOLOX提供的demo命令即可进行测试:

python tools/demo.py image -n yolox-s -c yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu

你会看到执行后的输出的信息,没报错就行.

退出容器:

exit

导出镜像

docker save -o docker_image.tar dockertest:v1.0

docker_image.tar是你要保存的文件名,也可以用xxx/xxx/docker_image.tar的形式。

发布镜像

将镜像发布到docker Hub中,这样其他人也可以下载,先登录docker,然后注意tag的格式,声明:这部分我没实测过

sudo docker login
sudo docker tag dockertest YOUR_DOCKER_ID/dockertest
sudo docker push YOUR_DOCKER_ID/dockertest

导入镜像

此时如果你想测试一下,找个其他主机啥的:

docker load -i docker_image.tar

你会看到这些信息,导入成功:

824bf068fd3d: Loading layer [==================================================>]  65.51MB/65.51MB
f15a0881ce19: Loading layer [==================================================>]   33.8MB/33.8MB
354dfcbe6a14: Loading layer [==================================================>]  6.197GB/6.197GB
0f801b69538d: Loading layer [==================================================>]  1.536kB/1.536kB
3c2e99e92150: Loading layer [==================================================>]  121.3MB/121.3MB
a1425ccadcb9: Loading layer [==================================================>]  438.3MB/438.3MB
b46ef3c5741b: Loading layer [==================================================>]  762.6MB/762.6MB
0f146ef9d82c: Loading layer [==================================================>]  18.93MB/18.93MB

你就可以看到新的主机下也有一个dockertest:v1.0的镜像。同样的你可以启动一个容器进行执行相关命令(跟上面的一样)

主机和容器文件交互:

(1)文件复制

docker cp xxx/xxx/test.txt cont:/
docker cp xxx/xxx/dataset cont:/root/  (复制文件夹)

将主机的xxx.xxx/test.txt这个文件复制到容器名为cont的’/'目录下,路径反过来就不要说了。
(2)路径映射

docker run -v xxx/xxx/data:/root/temp -it dockertest:v1.0

将主机的xxx/xxx/data路径映射到dockertest:v1.0容器的/root/temp路径,这样可以在容器内直接访问容器外的xxx/xxx/data文件夹

容器->镜像

如果你在容器中修改或添加了某些脚本,原始的dockertest:v1.0是不会有任何改变的,所以你希望保存这个修改后的容器作为镜像的话,(重新根据Dockerfile再创建太费事),直接将容器导出为镜像就行:

 docker commit -a 'boy' -m 'instruction' cont new_docker:v1.0

cont:容器名字 new_docker:新的镜像名字,其他随意。

其他指令

删除容器

docker ps -a  (查看CONTAINER_ID)
docker rm CONTAINER_ID  

容器启动停止:

docker stop cont  (cont为容器名字)
docker start cont

进入容器:

docker exec -it cont /bin/bash

删除镜像:
先关掉该镜像实例化的容器才能删除:

docker images  (查看IMAGE_ID)
docker rmi IMAGE_ID

第二种创建镜像方式

一般深度学习项目环境都是在anaconda的虚拟环境下配置的,当然你可以在docker hub下载相应的镜像,这里提供一种新的创建镜像的方式,简单来说就是将虚拟环境和代码直接复制到anaconda/anaconda的容器中
参考链接:https://blog.csdn.net/qq_32101863/article/details/120344080

你可能感兴趣的:(docker,容器,深度学习)