文章目录
配置:
ubuntu系统
docker安装
curl -sSL https://get.daocloud.io/docker | sh
nvidia-container-toolkit安装
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update && sudo apt-get install -y nvidia-container-toolkit
systemctl restart docker
场景一
场景描述
label-studio是一个开源的标注平台,想通过docker使用label-studio并在容器启动时自动启动该标注平台。该标注平台的启动命令是激活包含该第三方库的环境后,在命令行输入label-studio即可。
Dockerfile内容
FROM python:3.9
RUN pip install label-studio -i https://pypi.douban.com/simple
ENTRYPOINT ["label-studio"]
根据Dockerfile生成镜像
sudo docker build -t label-studio:0.1 .
根据镜像生成容器
sudo docker run -itd -p 8080:8080 label-studio:0.1
根据镜像生成容器+数据持久化
$\color{red} {注:要使用绝对路径}
/
h
o
m
e
/
c
t
t
/
d
o
c
k
e
r
/
l
a
b
e
l
S
t
u
d
i
o
是本地路径
\color{red} {/home/ctt/docker/labelStudio 是本地路径}
/home/ctt/docker/labelStudio是本地路径
/
r
o
o
t
/
.
l
o
c
a
l
/
s
h
a
r
e
/
l
a
b
e
l
−
s
t
u
d
i
o
是容器内的路径
\color{red} {/root/.local/share/label-studio 是容器内的路径}
/root/.local/share/label−studio是容器内的路径
sudo docker run -itd -p 8080:8080 -v /home/ctt/docker/labelStudio:/root/.local/share/label-studio label-studio:0.1
场景二
场景描述
实现docker容器调用GPU训练模型,依赖库及版本号都在requirement里面。
CUDA是Nvidia开发的一种并行计算平台和编程模型,用于在其自己的GPU(图形处理单元)上进行常规计算。 CUDA使开发人员能够利用GPU的能力来实现计算的可并行化部分,从而加快计算密集型应用程序的速度。
注:
n
v
i
d
i
a
/
c
u
d
a
:
11.4.0
−
b
a
s
e
−
u
b
u
n
t
u
20.04
是包含
c
u
d
a
11.4
的
u
b
u
n
t
u
镜像
\color{red} 注:nvidia/cuda:11.4.0-base-ubuntu20.04是包含cuda11.4的ubuntu镜像
注:nvidia/cuda:11.4.0−base−ubuntu20.04是包含cuda11.4的ubuntu镜像
目录结构:
run.sh: 主程序后台挂载命令
datasets: 数据集文件夹
model_saved: 模型保存文件夹
pretrain_model: 预训练模型文件夹
nlp: 模型训练代码文件夹
Python-3.9.5.tar.xz: python3.9官网下载的安装包
.
├── app
│ ├── bash
│ │ └── run.sh
│ ├── datasets
│ ├── model_saved
│ ├── pretrain_model
│ └── nlp
├── Dockerfile
├── pack
│ ├── postag.zip
│ └── spacy_ontonotes.zip
└── python3.9
└── Python-3.9.5.tar.xz
Dockerfile内容
FROM nvidia/cuda:11.4.0-base-ubuntu20.04
RUN mkdir /opt/software
COPY pack /root/.pkuseg
COPY app /opt
COPY python3.9 /opt/software/
#更换源
RUN \
sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list \
&& sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list \
&& apt-get clean && apt-get update \
&& apt-get install --assume-yes apt-utils \
&& apt-get install -y build-essential \
&& apt-get install -y unzip \
&& apt-get install -y xz-utils \
&& apt-get install -y curl \
&& apt-get install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev
#更换python及下载依赖
RUN \
cd /opt/software/ \
&& tar -xf Python-3.9.5.tar.xz \
&& cd Python-3.9.5/ \
&& ./configure --enable-optimizations \
&& make -j 4 \
&& make altinstall \
# && rm /usr/bin/python3 \
&& ln -s /opt/software/Python-3.9.5/python /usr/bin/python3 \
&& curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
&& python3 get-pip.py --force-reinstall
RUN \
pip install --upgrade pip -i https://pypi.douban.com/simple --default-timeout=10000 \
&& pip install -r /opt/nlp/requirements.txt -i https://pypi.douban.com/simple --no-cache-dir --default-timeout=10000 \
&& pip install bert4keras==0.10.7 --no-cache-dir --default-timeout=10000 \
&& apt-get remove -y build-essential && apt-get clean \
&& unzip /root/.pkuseg/postag.zip -d /root/.pkuseg/postag \
&& unzip /root/.pkuseg/spacy_ontonotes.zip -d /root/.pkuseg/spacy_ontonotes \
&& chmod +x /opt/bash/run.sh
EXPOSE 7000
WORKDIR '/opt/bash'
CMD ["./run.sh"]
根据Dockerfile生成镜像
docker build -t train:0.4 .
根据镜像生成容器
docker run -itd --gpus all -p 7000:7000 train:0.4
根据镜像生成容器+数据持久化
--gpus
gpu配置,没有该参数使用不了GPU,all 表示使用所有的gpu,如果要使用2个gpu,只需--gpus 2
-p
映射的端口号
-v
本地路径:容器内路径
docker run -itd --gpus all -p 7000:7000 -v /data/lzc/model_saved/:/opt/model_saved/ -v /data/lzc/pretrain_model:/opt/pretrain_model/ -v /data/lzc/datasets/:/opt/datasets train:0.4