docker镜像制作
Healthy Mind Lv3

docker镜像制作

在学习PaddleNLP的时候,用到了docker但是官网给的版本太低了2.3,所以就基于 12.2.2-cudnn8-runtime-ubuntu20.04做了一个2.6版本的,第一次做遇到不少问题,记录一下

​ 这个是完整的 脚本

Dockerfile python3.8

cuda 12.2

paddlepaddle 2.5.2

paddlenlp 2.6.1

1
2
3
4
5
6
7
8
9
10
11
12
13
ROM nvidia/cuda:12.2.2-runtime-ubuntu20.04
COPY docker_test/sources.list /etc/apt/
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt install -y vim pip
RUN pip install paddlepaddle-gpu==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY PaddleNLP /home/PaddleNLP/
# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install paddlenlp==2.6.1 -i https://mirror.baidu.com/pypi/simple/
RUN apt install --allow-change-held-packages -y libnccl2=2.19.3-1+cuda12.2
RUN apt install -y libnccl-dev=2.19.3-1+cuda12.2
COPY cudnn-linux-x86_64-8.9.5.29_cuda12-archive/lib/ /usr/local/cuda-12.2/lib64/
COPY cudnn-linux-x86_64-8.9.5.29_cuda12-archive/include/ /usr/local/cuda-12.2/include/

代码比较少,但是也折腾了半天,命令比较简单,和普通shell 命令基本一样

docker 镜像制作命令

1
sudo docker build -t paddlenlp:2.6-cuda12.2-ubuntu20 . -f docker_test/Dockerfile

主要是记录一下 镜像制作命令里 “.” 这个表示当前目录,主要是在COPY 的时候会找不到目录,

​ -f 就是dockerfile文件了,

下面这个 是 Ubuntu20.04 python 3.10 版本的,需要在docker中编译python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 FROM nvidia/cuda:12.2.2-runtime-ubuntu20.04                                                                                                                              
COPY docker_test/sources.list /etc/apt/
ENV DEBIAN_FRONTEND=noninteractive
COPY Python-3.10.0 /home/Python-3.10.0/
RUN apt-get update && apt install -y build-essential curl vim && cd /home/Python-3.10.0 && ./configure --enable-optimizations && make -j 3 && make altinstall
RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 2
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
#RUN python3 get-pip.py
RUN pip3.10 install --upgrade pip
RUN pip install paddlepaddle-gpu==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
#RUN pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY PaddleNLP /home/PaddleNLP/
RUN cd /home/PaddleNLP/ && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install paddlenlp==2.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

RUN apt install --allow-change-held-packages -y libnccl2=2.19.3-1+cuda12.2
RUN apt install -y libnccl-dev=2.19.3-1+cuda12.2 && ln -s /usr/local/cuda-12.2/lib64/libcublas.so.12 /usr/local/cuda-12.2/lib64/libcublas.so


COPY cudnn-linux-x86_64-8.9.5.29_cuda12-archive/lib/ /usr/local/cuda-12.2/lib64/
COPY cudnn-linux-x86_64-8.9.5.29_cuda12-archive/include/ /usr/local/cuda-12.2/include/

这个需要下载python 源码 https://bootstrap.pypa.io/get-pip.py 这个还需要访问外网,下载很慢

这里需要设置代理:

​ 需要在宿主机上安装代理软件,然后设置 代理

  1. 当前回话起效
1
2
export http_proxy="http://ip:port"
export https_proxy="https://ip:port"

执行build 命令需要添加 –network=host 把网络指向宿主机

1
2
3
sudo docker build -t paddlenlp:2.6-cuda12.2-ubuntu20 . -f docker_test/Dockerfile --network=host \
--build-arg HTTP_PROXY=http://127.0.0.1:38080 --build-arg HTTPS_PROXY=http://127.0.0.1:38080

这里还有需要设置代理参数,有一个比较迷惑的地方, 在系统环境导出了 的代理 变量,好像docker build 加载不到,需要通过 –build-arg传入