搭建深度学习docker容器(4)- 使用DockerFile和Docker-Compose部署NVIDIA+PyTorch容器

前言

到这里我们基本已经将深度学习的相关环境已经搭建起来了,接下来我们就需要使用Docker容器创建符合我们自己深度学习需求的Docker镜像了。

在开始创建DockerFile文件之前,我会回想为什么要做这件事情,以及最总达成的目标是什么:我们希望有一个容器,能够便于折腾和快速上手,并且内置了主流AI学习框架。

为了能够达成上面的这个目标,在这里我选择使用NVIDIA官方的CUDA镜像作为我的基础镜像,并在上面安装Python以及PyTorch等软件包。

Pytorch

编写DockerFile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 设置基础映像
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

# 定义构建参数
# 例如ARG USER=test为USER变量设置默认值"test"。
ARG USER=test
ARG PASSWORD=${USER}123$

# 处理讨厌的 Python 3 编码问题
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
ENV MPLLOCALFREETYPE 1

# 更新软件包列表并安装软件属性通用包
RUN apt-get update && apt-get install -y software-properties-common

# 添加Python ppa,以便后续安装Python版本
RUN add-apt-repository ppa:deadsnakes/ppa

# 安装Ubuntu的常用软件包,包括wget、vim、curl、zip、unzip等
RUN apt-get update && apt-get install -y \
build-essential \
git \
wget \
vim \
curl \
zip \
zlib1g-dev \
unzip \
pkg-config \
libgl-dev \
libblas-dev \
liblapack-dev \
python3-tk \
python3-wheel \
graphviz \
libhdf5-dev \
python3.9 \
python3.9-dev \
python3.9-distutils \
openssh-server \
swig \
apt-transport-https \
lsb-release \
libpng-dev \
ca-certificates &&\
apt-get clean &&\
ln -s /usr/bin/python3.9 /usr/local/bin/python &&\
ln -s /usr/bin/python3.9 /usr/local/bin/python3 &&\
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py &&\
python3 get-pip.py &&\
rm get-pip.py &&\
# 清理APT缓存以减小Docker镜像大小
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 设置时区
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 为应用程序创建一个用户
RUN useradd --create-home --shell /bin/bash --groups sudo ${USER}
RUN echo ${USER}:${PASSWORD} | chpasswd
USER ${USER}
ENV HOME /home/${USER}
WORKDIR $HOME

# 安装一些Python库,例如numpy、matplotlib、scipy等
RUN python3 -m pip --no-cache-dir install \
blackcellmagic\
pytest \
pytest-cov \
numpy \
matplotlib \
scipy \
pandas \
jupyter \
scikit-learn \
scikit-image \
seaborn \
graphviz \
gpustat \
h5py \
gitpython \
ptvsd \
Pillow==6.1.0 \
opencv-python

# 安装PyTorch和DataJoint等其他库
# 其中torch==1.13.1表示安装版本为1.13.1的PyTorch
RUN python3 -m pip --no-cache-dir install \
torch==1.13.1 \
torchvision==0.14.1 \
torchaudio==0.13.1 \
'jupyterlab>=2'

RUN python3 -m pip --no-cache-dir install datajoint==0.12.9

# 设置环境变量LD_LIBRARY_PATH,以便支持性能分析库
ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:${LD_LIBRARY_PATH}

# 启动ssh服务器,打开22号端口
USER root

RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

编写Docker-Compose文件

1
2
3
4
5
6
7
8
9
10
11
12
version: "3.9"
services:
nvidia:
build: . # 告诉Docker Compose在当前目录中查找Dockerfile并构建镜像
runtime: nvidia # 启用nvidia-container-runtime作为Docker容器的参数,从而实现对GPU的支持
environment:
- NVIDIA_VISIBLE_DEVICES=all # 设置所有可用的GPU设备
ports:
- "22:22" # port for ssh
- "80:80" # port for Web
- "8000:8000" # port for API
tty: true # 创建一个伪终端以保持容器运行状态
如果对您有帮助,请小编喝一杯咖啡吧!