使用docker将深度学习模型容器化

一、使用Docker制作深度学习模型镜像(了解)

:首先,一开始shell中命令行所在位置在root文件下,即root@4210node:~。其次,整个文件夹目录如下:

root
|—model
  |—result         # 存放推理后的图片
  |—val            # 存在数据集
  |—deeplabv3plus  # 存放模型代码
    |—deeplabv3plus.pth
    |—deeplabV3plus.py
    |—deploy.py
    |—joint_transforms.py
    |—requirements.txt
    |—transforms.py
  1. 拉取pytorch镜像,本实例使用pytorch镜像版本为1.9.1-cuda11.1-cudnn8-devel
docker run -it -v /root/model/result:/media/result --name="pytorch" \
--gpus=all pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel /bin/bash
  1. 将数据集和模型代码文件从宿主机复制到镜像中
# 退出镜像
exit
# 启动容器
docker start pytorch
# 将文件复制到镜像中
docker cp model/val/ pytorch:/media/
docker cp model/deeplabv3plus/ pytorch:/workspace/
# 进入镜像中去
docker exec -it pytorch /bin/bash
  1. 安装相关依赖
pip install -r deeplabv3plus/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
  1. 运行py文件,启动模型
cd deeplabv3plus
python deploy.py

二、使用Dockerfile制作镜像

项目目录树如下:

root
|—container
  |—result             # 存放推理后的图片
  |—deeplabv3plus      # 存放deeplabv3plus的Dockerfile文件
  |—deeplabv3plus.tar  # 存放deeplabv3plus模型代码的压缩包
    |—deeplabv3plus.pth
    |—deeplabV3plus.py
    |—deploy.py
    |—joint_transforms.py
    |—requirements.txt
    |—transforms.py
  |—pspnet             # 存放pspnet的Dockerfile文件
  |—pspnet.tar         # 存放pspnet模型代码的压缩包
    |—pspnet.pth
    |—pspnet.py
    |—deploy.py
    |—joint_transforms.py
    |—requirements.txt
    |—transforms.py
  |—segnet             # 存放segnet的Dockerfile文件
  |—segnet.tar         # 存放segnet模型代码的压缩包
    |—segnet.pth
    |—segnet.py
    |—deploy.py
    |—joint_transforms.py
    |—requirements.txt
    |—transforms.py
  |—val.tar            # 数据集压缩包

以deeplabv3plus深度学习模型为例,使用Dockerfile制作镜像,并运行深度学习容器。

步骤如下:

  1. 制作深度学习模型镜像
# 拉取基础镜像
FROM  pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel

# 维护者信息
MAINTAINER shiftyCat [email protected]

# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

# 设置数据集路径和工作路径
ENV DATASET /media
ENV WORKSPACE /workspace

# 将宿主机上的数据集和模型代码压缩包复制到镜像中,并解压
ADD val.tar $DATASET
ADD deeplabv3plus.tar $WORKSPACE

# 容器启动后执行的命令
# 配置工作目录
WORKDIR $WORKSPACE
# 安装第三方依赖库
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
  1. 使用docker命令(build)执行Dockerfile文件制作镜像
docker build -f container/deeplabv3plus -t deeplabv3plus:1.0.0 .
  1. 使用docker命令(run)运行容器
docker run -it -v /root/container/result:/media/result --name="deeplabv3plus" --gpus=0 deeplabv3plus:1.0.0 /bin/bash
  1. 进入容器内部运行python文件
python deploy.py

三、Docker及Dockerfile相关命令总结

  1. Docker

  2. pull:拉取远程仓库中的镜像。

```shell
 docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
```
  1. run:运行镜像。其中,存在一些短选项,如-i,-t,-v。
- -i:以交互模式运行容器;
  
- -t:为容器重新分配一个伪输入终端;
  
- -v:将容器中的某个文件或文件夹挂载到宿主机上;
  
- --name:给运行的容器命名;
  
- --gpus:为容器分配GPU资源。
  

```shell
docker run -it -v /root/model/result:/media/result --name="pytorch" \
--gpus=all pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel /bin/bash
```
  1. cp:将宿主机上的文件(或文件夹)复制到容器中
```shell
docker cp model/val/ pytorch:/media/
```
  1. 关于容器的其他命令
```shell
# 容器名为deeplabv3plus
# 查看运行中的容器
docker ps
# 查看所有容器,可查看停止运行的镜像及其中断原因
docker ps -a
# 关闭容器
docker stop deeplabv3plus
# 删除容器
docker rm deeplabv3plus
# 重启容器
docker restart deeplabv3plus
# 开启容器
docker start deeplabv3plus
# 以伪终端的方式进入容器内部
docker exec -it deeplabv3plus /bin/bash
```
  1. 关于镜像的一些命令
1. build:制作镜像,存在一些短选项
  
  - -f:定位在container目录下名为deeplabv3plus的Dockerfile文件;
    
  - -t:镜像命名,`:`后为镜像标签,若不表明默认为latest。
    
  
  ```shell
  # 镜像名为deeplabv3plus
  # 制作镜像(build)
  docker build -f container/deeplabv3plus -t deeplabv3plus:1.0.0 .
  ```
  
2. images:查看所有镜像信息
  
  ```shell
  docker images
  ```
  
3. save:保存镜像
  
  ```shell
  docker save -o deeplabv3plus.tar deeplabv3plus
  ```
  
4. load:载入镜像
  
  ```shell
  docker load --input deeplabv3plus.tar
  docker load < deeplabv3plus.tar
  ```
  
5. rmi:删除镜像
  
  ```shell
  docker rmi deeplabv3plus:1.0.0
  ```
  1. Dockerfile

  2. FROM :基础镜像,当前镜像是基于哪个镜像的

```dockerfile
# 拉取基础镜像
FROM  pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
```
  1. MAINTAINER:镜像维护者的姓名和邮箱地址
```dockerfile
# 维护者信息
MAINTAINER shiftyCat [email protected]
```
  1. RUN:容器构建时需要运行的命令
```dockerfile
# 安装第三方依赖库
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
```
  1. EXPOSE:当前容器对外暴露的端口号

  2. ENV:用来在构建镜像过程中设置环境变量

```dockerfile
# 设置数据集路径和工作路径
ENV DATASET /media
ENV WORKSPACE /workspace
```
  1. WORKDIR:指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
```dockerfile
# 配置工作目录
WORKDIR /workspace
# 或者如下
WORKDIR $WORKSPACE
```
  1. ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
```dockerfile
ADD val.tar /media
ADD deeplabv3plus.tar $WORKSPACE
```
  1. COPY:类似于ADD,拷贝文件和目录到镜像中。

  2. VOLUME:容器数据卷,用于数据保存和持久化工作。

你可能感兴趣的:(docker,云服务器,深度学习,docker,pytorch)