| # Copyright 2019 The TensorFlow Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # ============================================================================ |
| # |
| # THIS IS A GENERATED DOCKERFILE. |
| # |
| # This file was assembled from multiple pieces, whose use is documented |
| # throughout. Please refer to the TensorFlow dockerfiles documentation |
| # for more information. |
| |
| ARG UBUNTU_VERSION=20.04 |
| |
| ARG ARCH= |
| ARG CUDA=11.2 |
| FROM nvidia/cuda${ARCH:+-$ARCH}:${CUDA}.1-base-ubuntu${UBUNTU_VERSION} as base |
| # ARCH and CUDA are specified again because the FROM directive resets ARGs |
| # (but their default value is retained if set previously) |
| ARG ARCH |
| ARG CUDA |
| ARG CUDNN=8.1.0.77-1 |
| ARG CUDNN_MAJOR_VERSION=8 |
| ARG LIB_DIR_PREFIX=x86_64 |
| ARG LIBNVINFER=8.0.0-1 |
| ARG LIBNVINFER_MAJOR_VERSION=8 |
| |
| # Needed for string substitution |
| SHELL ["/bin/bash", "-c"] |
| ENV DEBIAN_FRONTEND=noninteractive |
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| build-essential \ |
| cuda-command-line-tools-${CUDA/./-} \ |
| libcublas-${CUDA/./-} \ |
| libcublas-dev-${CUDA/./-} \ |
| cuda-nvprune-${CUDA/./-} \ |
| cuda-nvrtc-${CUDA/./-} \ |
| cuda-nvrtc-dev-${CUDA/./-} \ |
| cuda-cudart-dev-${CUDA/./-} \ |
| libcufft-dev-${CUDA/./-} \ |
| libcurand-dev-${CUDA/./-} \ |
| libcusolver-dev-${CUDA/./-} \ |
| libcusparse-dev-${CUDA/./-} \ |
| libcudnn8=${CUDNN}+cuda${CUDA} \ |
| libcudnn8-dev=${CUDNN}+cuda${CUDA} \ |
| libcurl3-dev \ |
| libfreetype6-dev \ |
| libhdf5-serial-dev \ |
| libzmq3-dev \ |
| pkg-config \ |
| rsync \ |
| software-properties-common \ |
| unzip \ |
| zip \ |
| zlib1g-dev \ |
| wget \ |
| git \ |
| && \ |
| find /usr/local/cuda-${CUDA}/lib64/ -type f -name 'lib*_static.a' -not -name 'libcudart_static.a' -delete && \ |
| rm /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/libcudnn_static_v8.a |
| |
| # Install TensorRT if not building for PowerPC |
| # NOTE: libnvinfer uses cuda11.1 versions |
| RUN [[ "${ARCH}" = "ppc64le" ]] || { apt-get update && \ |
| apt-get install -y --no-install-recommends libnvinfer${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda11.0 \ |
| libnvinfer-dev=${LIBNVINFER}+cuda11.0 \ |
| libnvinfer-plugin-dev=${LIBNVINFER}+cuda11.0 \ |
| libnvinfer-plugin${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda11.0 \ |
| && apt-get clean \ |
| && rm -rf /var/lib/apt/lists/*; } |
| |
| # Configure the build for our CUDA configuration. |
| ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/include/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH:/usr/local/cuda/lib64/stubs:/usr/local/cuda-11.0/lib64:/usr/local/cuda-11.2/lib64 |
| ENV TF_NEED_CUDA 1 |
| ENV TF_NEED_TENSORRT 1 |
| ENV TF_CUDA_VERSION=${CUDA} |
| ENV TF_CUDNN_VERSION=${CUDNN_MAJOR_VERSION} |
| # CACHE_STOP is used to rerun future commands, otherwise cloning tensorflow will be cached and will not pull the most recent version |
| ARG CACHE_STOP=1 |
| # Check out TensorFlow source code if --build-arg CHECKOUT_TF_SRC=1 |
| ARG CHECKOUT_TF_SRC=0 |
| RUN test "${CHECKOUT_TF_SRC}" -eq 1 && git clone https://github.com/tensorflow/tensorflow.git /tensorflow_src || true |
| |
| # Link the libcuda stub to the location where tensorflow is searching for it and reconfigure |
| # dynamic linker run-time bindings |
| RUN ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/stubs/libcuda.so.1 \ |
| && echo "/usr/local/cuda/lib64/stubs" > /etc/ld.so.conf.d/z-cuda-stubs.conf \ |
| && ldconfig |
| |
| # See http://bugs.python.org/issue19846 |
| ENV LANG C.UTF-8 |
| |
| RUN apt-get update && apt-get install -y \ |
| python3 \ |
| python3-pip |
| |
| RUN python3 -m pip --no-cache-dir install --upgrade \ |
| "pip<20.3" \ |
| setuptools |
| |
| # Some TF tools expect a "python" binary |
| RUN ln -s $(which python3) /usr/local/bin/python |
| |
| RUN apt-get update && apt-get install -y \ |
| build-essential \ |
| curl \ |
| git \ |
| openjdk-8-jdk \ |
| python3-dev \ |
| virtualenv \ |
| swig |
| |
| RUN python3 -m pip --no-cache-dir install \ |
| Pillow \ |
| h5py \ |
| keras_preprocessing \ |
| matplotlib \ |
| mock \ |
| 'numpy<1.19.0' \ |
| scipy \ |
| sklearn \ |
| pandas \ |
| portpicker \ |
| enum34 |
| |
| # Build and install bazel |
| ENV BAZEL_VERSION 4.2.2 |
| WORKDIR / |
| RUN mkdir /bazel && \ |
| cd /bazel && \ |
| curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-dist.zip && \ |
| unzip bazel-$BAZEL_VERSION-dist.zip && \ |
| bash ./compile.sh && \ |
| cp output/bazel /usr/local/bin/ && \ |
| rm -rf /bazel && \ |
| cd - |
| |
| COPY bashrc /etc/bash.bashrc |
| RUN chmod a+rwx /etc/bash.bashrc |