基础概念
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 或容器中的文件变化会实时反映到另一方,因为二者用的是同一份文件)。
使用资源映射的方法创建容器:
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 update
apt install libgl1-mesa-glx
pip uninstall opencv-python -y
pip 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:version
docker push username/pt_test_image:0
复制代码
基于 Dockerfile 构建镜像
在 Windows 中的深度学习项目文件夹下运行命令:
-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
体验地址:http://www.jnpfsoft.com/?from=infoq
评论