Docker部署深度学习模型

news2024/11/22 23:20:16

基础概念

  • 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

导出镜像

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

将容器打包为镜像

​ 运行命令:

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

文章转载自:ZeroZeroSeven

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

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NC56 入库失败提示负库存解决方法

前言 公司的 NC ERP 接入了第三方系统进行出入库单据管理。用户反馈提交入库单据时、NC ERP 报错【负库存或辅数量方向不一致】。于是进行排查和解决。 操作环境 NC ERP V56 。操作系统 Windows 11 &#xff0c;数据库 Oracle DB 。 操作步骤 1、查询 NC “收发存汇总表”…

前端 | 燃尽图绘制

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 &#x1f4da;模块实现解析 &#x1f407;html 搭框架<div id"LINE2"><div id"cloudtitle">TED…

抖音电商课程(持续更新...)

01 客户成交方式 1 直播间载体 冲动消费&#xff08;感性&#xff09; 团队配合好&#xff0c;主攻直播间。 客单价越高&#xff0c;对直播间的依赖性越强。进直播间建立强依赖关系。 2 短视频 / 图文载体 用户处于理性和感性之间。 擅长拍摄、擅长内容输出&#xff0c;…

搭建电商项目||购物商城||APP|小程序|电商独立站系统如何接入JD商品

京东商品采集的步骤和应用场景可以归纳如下&#xff1a; 一、采集步骤 注册账号&#xff1a;首先&#xff0c;需要在京东开放平台注册一个开发者账号。创建应用&#xff1a;登录开放平台后&#xff0c;创建一个应用以获取API密钥和应用凭据。获取权限&#xff1a;根据所需的服…

如何实现网站HTTPS访问

在当今网络安全至关重要的时代&#xff0c;HTTPS已经成为网站安全的基本标准。HTTPS&#xff08;超文本传输安全协议&#xff09;通过在HTTP协议基础上加入SSL加密层&#xff0c;确保了数据在用户浏览器和服务器之间的传输是加密的&#xff0c;有效防止数据被窃取或篡改&#x…

【画板案例-线宽 Objective-C语言】

一、接下来,我们来说这个,线宽, 1.示例程序里边,这个slider,是改变线宽的,在最左边的时候,我画一下, 是这种线宽,还是有一定宽度的啊,跟我们这个默认的,不是1像素, 然后,最右边呢,也是有一个宽度的, 然后呢,这个线宽,我就给它,最小值设置成5,最大值设置成3…

面试题react03

React事件机制&#xff1a; React的事件机制可以分为两个部分&#xff1a;事件的触发和事件的处理。事件的触发&#xff1a;在React中&#xff0c;事件可以通过用户与组件进行交互而触发&#xff0c;如点击、鼠标移动、键盘输入等。当用户与组件进行交互时&#xff0c;浏览器会…

服务器数据恢复—强制上线raid5阵列离线硬盘导致raid不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌2850服务器中有一组由6块SCSI硬盘组建的raid5磁盘阵列&#xff0c;linux操作系统ext3文件系统。 服务器故障&#xff1a; 服务器运行过程中突然瘫痪。服务器管理员检查阵列后发现raid5阵列中有两块硬盘离线&#xff0c;将其中一块硬盘进行…

底层穿透海银财富爆雷

吃瓜&#xff01;海银财富爆雷了&#xff0c;底层资产绝大多数子虚乌有&#xff0c;开设了N个影子公司&#xff0c;搞了规模超700亿元的“嵌套资金池”……让我们在“图”中穿透里面的故事和事故。 海银财富共计发行了465只产品&#xff0c;募集规模超过700亿元&#xff0c;我…

记录项目使用ts时引入js文件后导致项目运行空白问题

主要原因&#xff1a; 使用ts后开启了eslint检测&#xff0c;而js压缩文件引入的位置在eslint检测的文件内。导致eslint检测认为该文件为很大的文件&#xff0c;或eslint认为此文件内存在无法处理的语法结构等问题。 解决方法&#xff1a; 1、把文件移到eslint检测外的文件引入…

牛啊后续:如何一行C#代码实现解析类型的Summary注释(可用于数据字典快速生成)...

前言&#xff1a;下午有小伙伴要求&#xff0c;让我继续做个解析实体类注释信息的内容。所以我也顺便加入进来。以下开始正文实战操作&#xff1a; 项目需要勾选输出api文档文件。这样就可以让所有实体类的summary信息被写入到输出目录下。如果有多个xml文件也没关系&#xff0…

大厂AI团战高考作文,华师一附中特级教师这样打分

在人工智能的浪潮中&#xff0c; 人们不禁疑问&#xff1a; AI真的能超越人类吗&#xff1f; 这究竟是现实还是幻想&#xff1f; 我们将目睹一场前所未有的较量&#xff1a; 百度文心一言、阿里通义千问、 腾讯混元、字节豆包 四家国内顶尖互联网企业 精心打造的AI大模…

AI大模型:引领产业变革的新引擎

前言 随着ChatGPT的火爆出圈&#xff0c;AI人工智能的时代浪潮似乎真的已经来临。人们开始感受到AI技术的实际影响&#xff0c;并纷纷思考这一技术将如何重塑我们的世界。在国内&#xff0c;各大科技巨头已经纷纷布局AI大模型领域&#xff0c;意图在这一轮技术变革中抢占先机。…

【画板案例-画线 Objective-C语言】

一、接下来,我们来做这个画线的功能, 1.我们要在这个灰色的View上,去画线, 首先,我要用到的东西,一定是touchesBegan:touchesMoved: 这是一定要有的, 然后呢,我还要去画线,所以,也要用到drawRect: 这三个方法,是我一定要有的,我要去写代码,所以,要给它绑定…

生成纳秒级别的时间戳

问题 同步influxdb有些数据没有&#xff0c;不知道啥原因&#xff0c;后来百度发现时间需要唯一&#xff0c;毫秒还会重复&#xff0c;只能采用纳秒处理了 java实现 TimeStampUtils.java package com.wujialiang;/*** 获取纳秒值的工具类*/ public class TimeStampUtils {/…

使Obsidian 导出pdf含书签的解决方案

使用Better Export PDF第三方插件 GitHub - l1xnan/obsidian-better-export-pdf: Obsidian PDF export enhancement plugin 正确安装并开启后&#xff0c;在右侧栏中选择Better Export PDF导出 最后效果如下。 值得注意的是Better Export PDF插件与floating toc插件不兼容。

Python opencv读取深度图,网格化显示深度

效果图&#xff1a; 代码&#xff1a; import cv2 import osimg_path "./outdir/180m_norm_depth.png" depth_img cv2.imread(img_path, cv2.IMREAD_ANYDEPTH) filename os.path.basename(img_path) img_hig, img_wid depth_img.shape # (1080, 1920) print(de…

HQL面试题练习 —— 占据好友封面个数

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;腾讯。 1 题目 有两个表&#xff0c;朋友关系表user_friend&#xff0c;用户步数表user_steps。朋友关系表包含两个字段&#xff0c;用户id&#xff0c;用户好友的id&#xff1b;用户步数表包含两个字段&#xff0c;用户id&am…

Windows 系统安装 VisualSVN Server

一.下载 VisualSVN Server VisualSVN-Server 是 SVN 版本控制中服务器端要使用的软件,就是我们提交代码存在安装这个软件的电脑上,它将很多配置和服务直接帮你完成,简单好用容易上手。VisualSVN Server有三个版本,社区版免费但限15个用户,另有一般和‘企业’两个收费版本…

打包idea代码至集群上运行

执行前记得在对应的节点上启动hdfs&#xff08;start-dfs.sh &#xff09;、yarn&#xff08;start-yarn.sh&#xff09;和任务历史服务&#xff08;mapred --daemon start historyserver&#xff09; 一、打包操作 1、在pom.xml中下载打包插件 直接将pom.xml里面的build删掉…