写点什么

Docker 部署深度学习模型

  • 2024-06-06
    福建
  • 本文字数:2595 字

    阅读完需:约 9 分钟

基础概念


  • Docker

Docker 是一个打包、分发和运行应用程序的平台,允许将你的应用程序和应用程序所依赖的整个环境打包在一起。比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安装各种依赖库,最后代码还不一定跑起来。如果我是用了 docker 环境进行项目配置,我只需要将环境打包好后分享给朋友。他只需要安装好显卡驱动就行,什么 cuda、pytorch 之类的都在我分享的环境了。


  • 镜像

Docker 镜像里包含了你打包的应用程序及其所依赖的环境。包含应用程序可用的文件系统和其他元数据。


  • 容器

Docker 容器通常是一个 Linux 容器,基于 Docker 镜像被创建,一个运行中的容器是一个运行在 Docker 主机上的进程,但和主机及所有在主机上的其他进程是隔离的。其资源是受限的,只能访问和使用分配的资源(CPU、内存)。


拉取镜像


​ 在 Windows 上安装 Docker Desktop 就不过多赘述了。


​ 先拉取一个 pytorch 镜像(结合自己电脑的显卡版本挑选适合的镜像版本):

docker pull anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04	
复制代码


准备深度学习项目


​ 我们拿yolov5举例。


​ 在 Windwos 上下载好 yolov5 项目代码,同时下载检查点模型。


​ 准备好测试代码:

import torch
# Modelmodel = torch.hub.load('.', 'custom', path='yolov5l.pt',source='local')
# Imagesimg = "./pic/gyt.jpg" # or file, Path, PIL, OpenCV, numpy, list
# Inferenceresults = model(img)
# Resultsresults.save() # or .show(), .save(), .crop(), .pandas(), etc.
复制代码


创建容器


​ 镜像我们有了,现在我们可以创建容器了。同时我们需要将深度学习项目资源拷贝到容器中,下面有两种方法。


直接拷贝


​ 创建容器的命令是:

docker run -it --gpus all --name container1 anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04 /bin/bash
复制代码


​ 在这个命令中,run 是创建容器的指令,-it 是交互式终端,因为创建的容器就相当于一个本机中的 linux 服务器,我们可以通过终端与容器交互。–gpus all 这个就是使用本机的 gpu,–name 是给新建容器取个名字, anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04 就是要使用的镜像,/bin/bash 是指定 bash。


​ 当容器创建好后,将 Windows 的深度学习项目文件直接拷贝到容器中:

# 启动容器,配置或确认文件接收路径docker ps -adocker start 容器ID或容器名docker exec -it 容器ID或容器名 bashmkdir demo
# 关闭容器docker stop 容器ID或容器名
# 执行拷贝docker cp D:\FileNeedUploadToDocker.txt 容器ID或容器名:/opt/demodocker start 容器ID或容器名docker exec -it 容器ID或容器名 bashcd opt/demo/dir
复制代码


资源映射


​ 与直接拷贝不同的是,用资源映射既可以节省存储资源,又更加灵活方便(Windows 或容器中的文件变化会实时反映到另一方,因为二者用的是同一份文件)。



​ 使用资源映射的方法创建容器:

docker run -it -v F:\Desktop\yolov5-master:/app/yolov5 --gpus all --name container1 anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04 /bin/bash
复制代码


进入容器


​ 下面介绍两种进入容器的方法。


​ (1)使用命令行进入:

docker exec -it <container_name_or_id> /bin/bash
复制代码


(2)使用 Docker Desktop 的 GUI 进入:

右键点击你想要进入的容器,选择“Open in PowerShell”
复制代码


配置环境



​ 首先在容器中运行 nvidia-smi 命令,检查容器的显卡是否可用。若出现上图的情况,则表示成功。


​ 创建 conda 环境:

conda create -n yolo python=3.8
复制代码


​ 安装 pytorch:

pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cu118
复制代码


​ 安装其他库:

pip install -r requirements.txt
复制代码



运行代码


​ 运行“准备深度学习项目”中提到的测试代码,也许会遇到下图中的报错:



​ 解决方法如下:

apt updateapt install libgl1-mesa-glxpip uninstall opencv-python -ypip install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码


成功运行截图:



​ 运行结果会保存到 runs/detect/exp2 这个目录下,下面是模型的输出:



导出镜像


​ 下面介绍两种导出镜像的方法。


将容器打包为镜像


​ 运行命令:

docker commit -m "some information" <容器ID> <image_name:version>
复制代码



​ 打包成功后,我们再介绍两种方法分享镜像。


​ (1)将镜像导出为 tar 分享给他人

docker save image_naem:version -o output_name.tar
复制代码


​ (2)将镜像推送到云仓库

docker tag new_image:version username/new_image:versiondocker push username/pt_test_image:0
复制代码



基于 Dockerfile 构建镜像


​ 在 Windows 中的深度学习项目文件夹下运行命令:

docker build -t myapp .
复制代码


 -t 参数用于指定镜像的名称,.表示使用当前文件夹中的 Dockerfile。


​ 下面看一下 yolov5 提供的 Dockerfile 文件:

# Start FROM PyTorch image https://hub.docker.com/r/pytorch/pytorchFROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
# Downloads to user config dirADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/
# Install linux packagesENV DEBIAN_FRONTEND noninteractiveRUN apt updateRUN TZ=Etc/UTC apt install -y tzdataRUN apt install --no-install-recommends -y gcc git zip curl htop libgl1 libglib2.0-0 libpython3-dev gnupg# RUN alias python=python3
# Security updates# https://security.snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-3314796RUN apt upgrade --no-install-recommends -y openssl
# Create working directoryRUN rm -rf /usr/src/app && mkdir -p /usr/src/appWORKDIR /usr/src/app
# Copy contentsCOPY . /usr/src/app
# Install pip packagesCOPY requirements.txt .RUN python3 -m pip install --upgrade pip wheelRUN pip install --no-cache -r requirements.txt albumentations comet gsutil notebook \ coremltools onnx onnx-simplifier onnxruntime 'openvino-dev>=2023.0' # tensorflow tensorflowjs \
# Set environment variablesENV OMP_NUM_THREADS=1
# CleanupENV DEBIAN_FRONTEND teletype
复制代码


文章转载自:ZeroZeroSeven

原文链接:https://www.cnblogs.com/ggyt/p/18232868

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Docker部署深度学习模型_深度学习_快乐非自愿限量之名_InfoQ写作社区