content: # 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=18.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=7.2.2-1
  ARG LIBNVINFER_MAJOR_VERSION=7
  
  # Needed for string substitution
  SHELL ["/bin/bash", "-c"]
  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.1 \
          libnvinfer-dev=${LIBNVINFER}+cuda11.1 \
          libnvinfer-plugin-dev=${LIBNVINFER}+cuda11.1 \
          libnvinfer-plugin${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda11.1 \
          && 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
  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 3.7.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
  