|
| 1 | +# A image for building paddle binaries |
| 2 | +# Use cuda devel base image for both cpu and gpu environment |
| 3 | +# When you modify it, please be aware of cudnn-runtime version |
| 4 | +FROM nvidia/cuda:<baseimg> |
| 5 | +MAINTAINER PaddlePaddle Authors < [email protected]> |
| 6 | + |
| 7 | +# ENV variables |
| 8 | +ARG WITH_GPU |
| 9 | +ARG WITH_AVX |
| 10 | + |
| 11 | +ENV WITH_GPU=${WITH_GPU:-ON} |
| 12 | +ENV WITH_AVX=${WITH_AVX:-ON} |
| 13 | + |
| 14 | +ENV HOME /root |
| 15 | +# Add bash enhancements |
| 16 | +COPY paddle/scripts/docker/root/ /root/ |
| 17 | + |
| 18 | +# Prepare packages for Python |
| 19 | +RUN apt-get update && \ |
| 20 | + apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ |
| 21 | + libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ |
| 22 | + xz-utils tk-dev libffi-dev liblzma-dev |
| 23 | + |
| 24 | +RUN apt-get update && \ |
| 25 | + apt-get install -y --allow-downgrades --allow-change-held-packages \ |
| 26 | + patchelf git python-pip python-dev python-opencv openssh-server bison \ |
| 27 | + wget unzip unrar tar xz-utils bzip2 gzip coreutils ntp \ |
| 28 | + curl sed grep graphviz libjpeg-dev zlib1g-dev \ |
| 29 | + python-matplotlib \ |
| 30 | + automake locales clang-format swig \ |
| 31 | + liblapack-dev liblapacke-dev \ |
| 32 | + net-tools libtool module-init-tools && \ |
| 33 | + apt-get clean -y |
| 34 | + |
| 35 | +RUN wget https://github.com/koalaman/shellcheck/releases/download/v0.7.1/shellcheck-v0.7.1.linux.x86_64.tar.xz -O shellcheck-v0.7.1.linux.x86_64.tar.xz && \ |
| 36 | + tar -xf shellcheck-v0.7.1.linux.x86_64.tar.xz && cp shellcheck-v0.7.1/shellcheck /usr/bin/shellcheck && \ |
| 37 | + rm -rf shellcheck-v0.7.1.linux.x86_64.tar.xz shellcheck-v0.7.1 |
| 38 | + |
| 39 | +# Downgrade gcc&&g++ |
| 40 | +<install_gcc> |
| 41 | + |
| 42 | +# install cmake |
| 43 | +WORKDIR /home |
| 44 | +RUN wget -q https://cmake.org/files/v3.16/cmake-3.16.0-Linux-x86_64.tar.gz && tar -zxvf cmake-3.16.0-Linux-x86_64.tar.gz && rm cmake-3.16.0-Linux-x86_64.tar.gz |
| 45 | +ENV PATH=/home/cmake-3.16.0-Linux-x86_64/bin:$PATH |
| 46 | + |
| 47 | + |
| 48 | +# Install Python3.7 |
| 49 | +RUN wget -q https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz && \ |
| 50 | + tar -xzf Python-3.7.0.tgz && cd Python-3.7.0 && \ |
| 51 | + CFLAGS="-Wformat" ./configure --prefix=/usr/local/python3.7.0 --enable-shared > /dev/null && \ |
| 52 | + make -j8 > /dev/null && make altinstall > /dev/null && ldconfig |
| 53 | + |
| 54 | +ENV PATH=/usr/local/python3.7.0/include:${PATH} |
| 55 | +ENV PATH=/usr/local/python3.7.0/bin:${PATH} |
| 56 | +ENV LD_LIBRARY_PATH=/usr/local/python3.7.0/lib:${LD_LIBRARY_PATH} |
| 57 | +ENV CPLUS_INCLUDE_PATH=/usr/local/python3.7.0/include/python3.7:$CPLUS_INCLUDE_PATH |
| 58 | +RUN ln -sf /usr/local/python3.7.0/bin/python3.7 /usr/local/bin/python3 && ln -sf /usr/local/python3.7.0/bin/python3.7 /usr/bin/python3 |
| 59 | +RUN mv /usr/bin/python /usr/bin/python.bak && ln -s /usr/local/python3.7.0/bin/python3.7 /usr/local/bin/python && ln -s /usr/local/python3.7.0/bin/python3.7 /usr/bin/python |
| 60 | + |
| 61 | +RUN rm -r /root/python_build |
| 62 | + |
| 63 | +WORKDIR /home |
| 64 | +RUN python3.7 -m pip uninstall -y pip setuptools |
| 65 | +RUN wget https://files.pythonhosted.org/packages/a7/e0/30642b9c2df516506d40b563b0cbd080c49c6b3f11a70b4c7a670f13a78b/setuptools-50.3.2.zip && apt-get -y install unzip && unzip setuptools-50.3.2.zip |
| 66 | +WORKDIR /home/setuptools-50.3.2 |
| 67 | +RUN python3.7 setup.py build && python3.7 setup.py install |
| 68 | +WORKDIR /home |
| 69 | +RUN wget https://files.pythonhosted.org/packages/28/af/2c76c8aa46ccdf7578b83d97a11a2d1858794d4be4a1610ade0d30182e8b/pip-20.0.1.tar.gz && tar -zxvf pip-20.0.1.tar.gz |
| 70 | +WORKDIR pip-20.0.1 |
| 71 | +RUN python3.7 setup.py install |
| 72 | + |
| 73 | +WORKDIR /home |
| 74 | +RUN rm Python-$version.tgz setuptools-40.6.2.zip setuptools-50.3.2.zip pip-20.0.1.tar.gz && \ |
| 75 | + rm -r Python-$version setuptools-40.6.2 setuptools-50.3.2 pip-20.0.1 |
| 76 | + |
| 77 | +# Install Go and glide |
| 78 | +WORKDIR /home |
| 79 | +RUN wget -qO- https://paddle-ci.cdn.bcebos.com/go1.8.1.linux-amd64.tar.gz | \ |
| 80 | + tar -xz -C /usr/local && \ |
| 81 | + mkdir /root/gopath && \ |
| 82 | + mkdir /root/gopath/bin && \ |
| 83 | + mkdir /root/gopath/src |
| 84 | +ENV GOROOT=/usr/local/go GOPATH=/root/gopath |
| 85 | +# should not be in the same line with GOROOT definition, otherwise docker build could not find GOROOT. |
| 86 | +ENV PATH=${PATH}:${GOROOT}/bin:${GOPATH}/bin |
| 87 | +# install glide |
| 88 | +RUN curl -s -q https://glide.sh/get | sh |
| 89 | + |
| 90 | +# Install TensorRT |
| 91 | +# following TensorRT.tar.gz is not the default official one, we do two miny changes: |
| 92 | +# 1. Remove the unnecessary files to make the library small. TensorRT.tar.gz only contains include and lib now, |
| 93 | +# and its size is only one-third of the official one. |
| 94 | +# 2. Manually add ~IPluginFactory() in IPluginFactory class of NvInfer.h, otherwise, it couldn't work in paddle. |
| 95 | +# See https://github.com/PaddlePaddle/Paddle/issues/10129 for details. |
| 96 | + |
| 97 | +# Downgrade TensorRT |
| 98 | +COPY tools/dockerfile/build_scripts /build_scripts |
| 99 | +RUN bash /build_scripts/install_nccl2.sh |
| 100 | +RUN rm -rf /build_scripts |
| 101 | + |
| 102 | +# git credential to skip password typing |
| 103 | +RUN git config --global credential.helper store |
| 104 | + |
| 105 | +# Fix locales to en_US.UTF-8 |
| 106 | +RUN localedef -i en_US -f UTF-8 en_US.UTF-8 |
| 107 | + |
| 108 | +# specify sphinx version as 1.5.6 and remove -U option for [pip install -U |
| 109 | +# sphinx-rtd-theme] since -U option will cause sphinx being updated to newest |
| 110 | +# version(1.7.1 for now), which causes building documentation failed. |
| 111 | +RUN pip3.7 --no-cache-dir install -U wheel py-cpuinfo==5.0.0 && \ |
| 112 | + pip3.7 --no-cache-dir install -U docopt PyYAML sphinx==1.5.6 && \ |
| 113 | + pip3.7 --no-cache-dir install sphinx-rtd-theme==0.1.9 recommonmark |
| 114 | + |
| 115 | +RUN pip3.7 --no-cache-dir install 'pre-commit==1.10.4' 'ipython==5.3.0' && \ |
| 116 | + pip3.7 --no-cache-dir install 'ipykernel==4.6.0' 'jupyter==1.0.0' |
| 117 | + |
| 118 | +#For docstring checker |
| 119 | +RUN pip3.7 --no-cache-dir install pylint pytest astroid isort |
| 120 | + |
| 121 | +RUN pip3.7 --no-cache-dir install coverage |
| 122 | + |
| 123 | +COPY ./python/requirements.txt /root/ |
| 124 | +RUN pip3.7 --no-cache-dir install -r /root/requirements.txt |
| 125 | + |
| 126 | +# To fix https://github.com/PaddlePaddle/Paddle/issues/1954, we use |
| 127 | +# the solution in https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2 |
| 128 | +RUN apt-get install -y libssl-dev libffi-dev && apt-get clean -y && \ |
| 129 | + pip3.7 install --upgrade pip && \ |
| 130 | + pip3.7 --no-cache-dir install certifi urllib3[secure] |
| 131 | + |
| 132 | +# ar mishandles 4GB files |
| 133 | +# https://sourceware.org/bugzilla/show_bug.cgi?id=14625 |
| 134 | +# remove them when apt-get support 2.27 and higher version |
| 135 | +RUN wget -q https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/binutils/2.27-9ubuntu1/binutils_2.27.orig.tar.gz && \ |
| 136 | + tar -xzf binutils_2.27.orig.tar.gz && \ |
| 137 | + cd binutils-2.27 && \ |
| 138 | + ./configure && make -j && make install && cd .. && rm -rf binutils-2.27 binutils_2.27.orig.tar.gz |
| 139 | + |
| 140 | +RUN apt-get install libprotobuf-dev -y |
| 141 | + |
| 142 | +# Older versions of patchelf limited the size of the files being processed and were fixed in this pr. |
| 143 | +# https://github.com/NixOS/patchelf/commit/ba2695a8110abbc8cc6baf0eea819922ee5007fa |
| 144 | +# So install a newer version here. |
| 145 | +RUN wget -q https://paddle-ci.cdn.bcebos.com/patchelf_0.10-2_amd64.deb && \ |
| 146 | + dpkg -i patchelf_0.10-2_amd64.deb |
| 147 | + |
| 148 | +# Configure OpenSSH server. c.f. https://docs.docker.com/engine/examples/running_ssh_service |
| 149 | +RUN mkdir /var/run/sshd && echo 'root:root' | chpasswd && sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config |
| 150 | +CMD source ~/.bashrc |
| 151 | + |
| 152 | +# ccache 3.7.9 |
| 153 | +RUN wget https://paddle-ci.gz.bcebos.com/ccache-3.7.9.tar.gz && \ |
| 154 | + tar xf ccache-3.7.9.tar.gz && mkdir /usr/local/ccache-3.7.9 && cd ccache-3.7.9 && \ |
| 155 | + ./configure -prefix=/usr/local/ccache-3.7.9 && \ |
| 156 | + make -j8 && make install && \ |
| 157 | + ln -s /usr/local/ccache-3.7.9/bin/ccache /usr/local/bin/ccache |
| 158 | + |
| 159 | + |
| 160 | +EXPOSE 22 |
0 commit comments