首页 > 其他分享 >Docker部署深度学习模型

Docker部署深度学习模型

时间:2024-06-05 14:01:26浏览次数:13  
标签:容器 模型 pytorch install 深度 镜像 Docker 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

标签:容器,模型,pytorch,install,深度,镜像,Docker,docker
From: https://www.cnblogs.com/ggyt/p/18232868

相关文章

  • 06Docker-操作系统
    本文主要介绍如何使用Docker安装和使用Busybos、Debina/Ubuntu、Centos/Fedora、等操作系统。1、BusyboxBusyBox是一个集成上百个常用Linux命令和工具的软件工具箱,在单一的可执行文件中提供了精简的Unix工具集。包含了一些简单的工具,如cat、echo、grep、find、mount等。......
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.05.25-2024.05.31
    文章目录~1.EmpoweringVisualCreativity:AVision-LanguageAssistanttoImageEditingRecommendations2.Bootstrap3D:Improving3DContentCreationwithSyntheticData3.Video-MME:TheFirst-EverComprehensiveEvaluationBenchmarkofMulti-modalLLMsin......
  • LibDEEP:深度学习库
    介绍LibDEEP是一个用C语言开发的深度学习库,专注于人工智能技术的发展。该库旨在提供一种高效、灵活的工具,用于构建和训练神经网络。LibDEEP支持多种类型的神经网络,包括前馈神经网络(FNN)、卷积神经网络(CNN)和递归神经网络(RNN)。其设计目标是通过简洁的代码和高效的计算,提供强大的......
  • 一切模型皆可联邦化:高斯朴素贝叶斯代码示例
    联邦学习是一种分布式的机器学习方法,其中多个客户端在一个中央服务器的协调下合作训练模型,但不共享他们的本地数据。一般情况下我们对联邦学习的理解都是大模型和深度学习模型才可以进行联邦学习,其实基本上只要包含参数的机器学习方法都可以使用联邦学习的方法保证数据隐私。所以......
  • 【长亭雷池WAF】介绍及“动态防护”功能深度体验
    一、介绍什么是雷池雷池(SafeLine)是长亭科技耗时近10年倾情打造的WAF,核心检测能力由智能语义分析算法驱动。Slogan:不让黑客越雷池半步。什么是WAFWAF是WebApplicationFirewall的缩写,也被称为Web应用防火墙。区别于传统防火墙,WAF工作在应用层,对基于HTTP/HTTPS......
  • Python数据分析案例45——基于融合模型(Stack)的电商用户购买行为预测
    案例背景最近618快到了,上电商购买的人很多,正好我手上还有这个用户购买行为的数据,就做了一个机器学习模型流程,然后也使用的都是常见的机器学习模型,但是加了一点创新吧,使用了stacking融合模型。简单来说就是使用了很多机器学习模型一起融合,这样的好处在于会降低方差,使预测结果更......
  • (三)Redis 线程与IO模型
    1、Redis单线程通常说Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,其他功能,比如持久化、异步删除、集群数据同步等,是由额外的线程执行的,所以严格来说,Redis并不是单线程。多线程开发会不可避免的带来并发控制和资源开销的问题,如果没有良好的系统......
  • Linux上安装Docker
    本安装教程参考Docker官方文档,地址如下:https://docs.docker.com/engine/install/centos/ 1.卸载旧版首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-l......
  • (PDF)图解深度学习 (山下隆义)关机按技术分享电子版
    书:pan.baidu.com/s/1k0aEyPyTpEtwu-5HBOW0SA提取码:axib笔记内容:深度学习基础: 介绍深度学习的基本概念和背景,包括神经网络的基础知识。神经网络的工作原理: 图解了神经网络的基本结构和工作原理,包括神经元、激活函数等。深度学习的历史: 探讨了深度学习的发展历程,介绍了一些......
  • Redis 结合 Docker 搭建集群,并整合SpringBoot
    软件版本Redis7.2.5Docker26.1.3 准备工作由于docker直接拉取运行了,所以需要提前准备配置文件Indexof/releases/(redis.io)下载后,把redis-7.2.5.tar.gz\redis-7.2.5.tar\redis-7.2.5\里的redis.conf复制出来 概览结构如上图所示,准备6个服务器。 配置各节点......