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/
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 pip3.10 install --upgrade pip RUN pip install paddlepaddle-gpu==2.5.2 -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 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传入