Docker部署深度学习模型

docker · 浏览次数 : 0

小编点评

本文介绍了如何使用Docker部署深度学习模型的基本概念、镜像、容器和相关操作。通过Docker,用户可以将深度学习项目及其依赖环境打包,从而简化项目分享过程。 1. Docker的基本概念和应用场景 Docker是一个开源的容器化平台,可以将应用程序及其依赖环境打包在一起,便于部署和管理。本文中将介绍如何使用Docker部署深度学习模型。 2. 镜像(Image) 镜像是包含了应用程序及其依赖环境的文件,可以在没有硬件设备的情况下运行。本文中将演示如何拉取PyTorch镜像,并将其导入容器。 3. 容器(Container) 容器是基于镜像创建的一个运行实例,与主机及其他容器相互隔离。本文将介绍如何创建容器,并将项目文件拷贝到容器中进行配置。 4. 资源映射(Resource Mapping) 资源映射是一种将本地文件系统与容器中的文件系统关联起来的方式,可以在不复制文件的情况下共享文件。本文将展示如何在创建容器时使用资源映射。 5. 进入容器(Enter Container) 本文将介绍两种进入容器的常用方法,一种是使用命令行,另一种是使用Docker Desktop的图形界面。 6. 配置环境(Configure Environment) 在容器中配置环境,例如安装依赖库、设置环境变量等。本文将以运行 yolov5 项目为例,介绍如何在容器中安装依赖库并运行测试代码。 7. 导出镜像(Export Image) 导出镜像是将当前的容器状态保存为一个新的镜像文件,以便于分享和部署。本文将讲解如何将容器打包成镜像,并分享给他人。 8. 基于Dockerfile构建镜像(Build Image from Dockerfile) 本文将以yolov5项目为例,介绍如何从Dockerfile构建镜像,以便在其他计算机上进行部署。 通过以上内容的学习,读者可以更好地理解和使用Docker平台来部署和管理深度学习模型。

正文

Docker部署深度学习模型

基础概念

  • 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

# Model
model = torch.hub.load('.', 'custom', path='yolov5l.pt',source='local')

# Images
img = "./pic/gyt.jpg"  # or file, Path, PIL, OpenCV, numpy, list

# Inference
results = model(img)

# Results
results.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 -a
docker start 容器ID或容器名
docker exec -it 容器ID或容器名 bashmkdir demo

# 关闭容器
docker stop 容器ID或容器名

# 执行拷贝
docker cp D:\FileNeedUploadToDocker.txt 容器ID或容器名:/opt/demo
docker start 容器ID或容器名
docker exec -it 容器ID或容器名 bash
cd opt/demo/dir

资源映射

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

image

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

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”

配置环境

image

​ 首先在容器中运行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

image

运行代码

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

image

​ 解决方法如下:

apt update
apt install libgl1-mesa-glx
pip uninstall opencv-python -y
pip install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple

​ 成功运行截图:

image

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

image

image

导出镜像

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

将容器打包为镜像

​ 运行命令:

docker commit -m "some information" <容器ID> <image_name:version>

image

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

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

docker save image_naem:version -o output_name.tar

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

docker tag new_image:version username/new_image:version
docker push username/pt_test_image:0

image

基于Dockerfile构建镜像

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

docker build -t myapp .

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

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

# Start FROM PyTorch image https://hub.docker.com/r/pytorch/pytorch
FROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime

# Downloads to user config dir
ADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/

# Install linux packages
ENV DEBIAN_FRONTEND noninteractive
RUN apt update
RUN TZ=Etc/UTC apt install -y tzdata
RUN 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-3314796
RUN apt upgrade --no-install-recommends -y openssl

# Create working directory
RUN rm -rf /usr/src/app && mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Copy contents
COPY . /usr/src/app

# Install pip packages
COPY requirements.txt .
RUN python3 -m pip install --upgrade pip wheel
RUN pip install --no-cache -r requirements.txt albumentations comet gsutil notebook \
    coremltools onnx onnx-simplifier onnxruntime 'openvino-dev>=2023.0'
    # tensorflow tensorflowjs \

# Set environment variables
ENV OMP_NUM_THREADS=1

# Cleanup
ENV DEBIAN_FRONTEND teletype

与Docker部署深度学习模型相似的内容:

Docker部署深度学习模型

Docker部署深度学习模型 基础概念 Docker Docker是一个打包、分发和运行应用程序的平台,允许将你的应用程序和应用程序所依赖的整个环境打包在一起。比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安装各

金仓数据库全攻略:简化部署,优化管理的全流程指南

通过本篇文章的学习和实践,我们深入了解了如何利用Docker技术快速部署KingbaseES数据库。从下载镜像到编写Docker Compose模板,再到容器的启动和管理,每一步都体现了现代化部署方式的便捷和高效。此外,我们还掌握了KSQL命令行工具的使用,这将极大地提升开发人员与数据库交互的效率。

无需依赖Docker环境制作镜像

随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢?推荐一款谷歌的开源工具Jib,github地址,它是一个无需Docker守护进程——也无需深入掌握D

windows下使用dockerdesktop进行部署

Docker部署springboot项目 环境准备 要在windows上使用docker需要确认系统的需求 需要启用虚拟化支持的CPU 启用适用于windows的Linux子系统功能 保证足够的内存 下载dockerdesktop 下载后会提示安装对应的环境 坑点 安装过程中需要安装wsl环境,会遇

docker 部署环境基本流程

博客地址:https://www.cnblogs.com/zylyehuo/ 环境部署的问题,非常棘手,因此引入了容器技术 解决环境迁移的难题 1.利用虚拟机的模板克隆功能,将整个机器的环境复制一份,再丢给第二个机器去使用 2.最好是使用docker去部署环境 docker的生命周期概念 镜像,是一

Docker 安装 OpenResty教程

## Docker 部署 ### 1.拉取镜像 ``` powershell PS C:\Users\Administrator> docker pull openresty/openresty ``` ### 2.启动openresty ``` powershell PS C:\Users\Adm

安装docker并部署java项目

docker部署springboot项目(详细教程)_使用docker部署springboot项目_流星007的博客-CSDN博客 ps:以下是部署到linux 服务器中的 案例(与chatgpt的对话内容) 确保Dockerfile文件名正确: 您在命令中提到了创建名为"dockerfile"的文

docker部署java项目

1、首先你需要提前准备好jar包或者war包,并想办法放入Linux环境(或虚拟机)中; 2、java项目的部署需要用到Tomcat或者Jetty,docker可以直接拉取他俩的镜像,这里以Tomcat为例: # : 后面需要加上war或者jar对应的Tomcat版本,最好加上, # 否则默认最新的

Nginx使用

docker部署Nginx服务 Nginx服务docker部署时,可以使用一下compose文件进行简单部署: version: '3.7' services: nginx: image: nginx:1.23.3-alpine volumes: - ./default.conf:/etc/ngin

Docker部署Jekyll

1. 起因 前两天终于下单买了个域名,10年的使用期限。既然有了域名,那自己的博客就可以搞起来了。 现在博客的记录用的是Jekyll+Github Pages,所以决定之后自己的博客网站也采用Jekyll来部署实现,为了之后的维护、升级,决定采用docker来部署Jekyll。 2. 部署 dock