# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.


# The latest tag uses gcc 9, which is too high for nvcc.
# The following tag uses gcc 8, which works with nvcc.
FROM quay.io/pypa/manylinux2014_x86_64:2020-05-01-b37d76b

# install dependencies
RUN yum install -y \
    protobuf-devel \
    openblas-devel \
    # git \
    wget \
    openssh-server \
    pcre-devel \
    cmake \
    && yum clean all \
    && rm -rf /var/cache/yum/*

# install glog into /usr/local/include/glog /usr/local/lib
RUN wget https://github.com/google/glog/archive/v0.3.5.tar.gz -P /tmp/\
    && tar zxf /tmp/v0.3.5.tar.gz  -C /tmp/ \
    && cd /tmp/glog-0.3.5 \
    && ./configure && make && make install && cd .. && rm -rf glog-0.3.5

# install dnnl into /usr/local/include  /usr/local/lib
RUN wget https://github.com/intel/mkl-dnn/releases/download/v1.1/dnnl_lnx_1.1.0_cpu_gomp.tgz -P /tmp/ \
    && tar zxf /tmp/dnnl_lnx_1.1.0_cpu_gomp.tgz  -C /tmp/ \
    && cp -r -H /tmp/dnnl_lnx_1.1.0_cpu_gomp/lib/lib* /usr/local/lib/ \
    && cp -r -H /tmp/dnnl_lnx_1.1.0_cpu_gomp/include/* /usr/local/include/  \
    && rm -rf /tmp/dnnl_lnx_1.1.0_cpu_gomp
# ENV DNNL_ROOT /root/dnnl_lnx_1.1.0_cpu_gomp/

# install swig into /usr/local/bin
RUN wget http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz -P /tmp/ \
    && tar zxf /tmp/swig-3.0.12.tar.gz -C /tmp/ \
    && cd /tmp/swig-3.0.12 && ./configure && make && make install && cd .. && rm -rf swig-3.0.12

# numpy and python versions should be matched; 
# twine works for all python versions
RUN /opt/python/cp36-cp36m/bin/pip install numpy twine
RUN /opt/python/cp37-cp37m/bin/pip install numpy 
RUN /opt/python/cp38-cp38/bin/pip install numpy

# install cuda and cudnn
# Refer to https://gitlab.com/nvidia/container-images/cuda/-/tree/master/dist for other cuda and cudnn versions
# 10.2-base-centos7
RUN NVIDIA_GPGKEY_SUM=d1be581509378368edeec8c1eb2958702feedf3bc3d17011adbf24efacce4ab5 && \
    curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub | sed '/^Version/d' > /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA && \
    echo "$NVIDIA_GPGKEY_SUM  /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA" | sha256sum -c --strict  -
COPY cuda.repo /etc/yum.repos.d/cuda.repo
ENV CUDA_VERSION 10.2.89
ENV CUDA_PKG_VERSION 10-2-$CUDA_VERSION-1
# For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a
RUN yum install -y \
    cuda-cudart-$CUDA_PKG_VERSION \
    cuda-compat-10-2 \
    && ln -s cuda-10.2 /usr/local/cuda && \
    rm -rf /var/cache/yum/*

# nvidia-docker 1.0
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \
    echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64:$LD_LIBRARY_PATH

# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
ENV NVIDIA_REQUIRE_CUDA "cuda>=10.2 brand=tesla,driver>=396,driver<397 brand=tesla,driver>=410,driver<411 brand=tesla,driver>=418,driver<419 brand=tesla,driver>=440,driver<441"

# 10.2-runtime-centos7
RUN yum install -y \
    cuda-libraries-$CUDA_PKG_VERSION \
    cuda-nvtx-$CUDA_PKG_VERSION \
    libcublas10-10.2.2.89-1 \
    && rm -rf /var/cache/yum/*


# 10.2-devel-centos7
RUN yum install -y \
    cuda-nvml-dev-$CUDA_PKG_VERSION \
    cuda-command-line-tools-$CUDA_PKG_VERSION \
    cuda-cudart-dev-$CUDA_PKG_VERSION \
    cuda-libraries-dev-$CUDA_PKG_VERSION \
    cuda-minimal-build-$CUDA_PKG_VERSION \
    && rm -rf /var/cache/yum/*
RUN yum install -y xz && NCCL_DOWNLOAD_SUM=a9ee790c3fc64b0ecbb00db92eddc1525552eda10a8656ff4b7380f66d81bda1 && \
    curl -fsSL https://developer.download.nvidia.com/compute/redist/nccl/v2.7/nccl_2.7.3-1+cuda10.2_x86_64.txz -O && \
    echo "$NCCL_DOWNLOAD_SUM  nccl_2.7.3-1+cuda10.2_x86_64.txz" | sha256sum -c - && \
    unxz nccl_2.7.3-1+cuda10.2_x86_64.txz && \
    tar --no-same-owner --keep-old-files --no-overwrite-dir -xvf  nccl_2.7.3-1+cuda10.2_x86_64.tar -C /usr/local/cuda/include/ --strip-components=2 --wildcards '*/include/*' && \
    tar --no-same-owner --keep-old-files --no-overwrite-dir -xvf  nccl_2.7.3-1+cuda10.2_x86_64.tar -C /usr/local/cuda/lib64/ --strip-components=2 --wildcards '*/lib/libnccl.so' && \
    rm -f nccl_2.7.3-1+cuda10.2_x86_64.tar && \
    ldconfig
ENV LIBRARY_PATH /usr/local/cuda/lib64/stubs

# 10.2-cudnn7-devel-centos7
ENV CUDNN_VERSION 7.6.5.32
# cuDNN license: https://developer.nvidia.com/cudnn/license_agreement
RUN CUDNN_DOWNLOAD_SUM=600267f2caaed2fd58eb214ba669d8ea35f396a7d19b94822e6b36f9f7088c20 && \
    curl -fsSL http://developer.download.nvidia.com/compute/redist/cudnn/v7.6.5/cudnn-10.2-linux-x64-v7.6.5.32.tgz -O && \
    echo "$CUDNN_DOWNLOAD_SUM  cudnn-10.2-linux-x64-v7.6.5.32.tgz" | sha256sum -c - && \
    tar --no-same-owner -xzf cudnn-10.2-linux-x64-v7.6.5.32.tgz -C /usr/local && \
    rm cudnn-10.2-linux-x64-v7.6.5.32.tgz && \
    ldconfig

# install nccl for distributed training
RUN git clone https://github.com/NVIDIA/nccl.git $HOME/nccl \
    && cd $HOME/nccl \
    && git checkout v2.4.8-1 \
    && make BUILDDIR=/usr/local/ -j$(nproc) src.build \
    && rm -rf /usr/local/obj \
    && rm -rf $HOME/nccl

# install cnmem to /usr/local/include  /usr/local/lib
RUN git clone https://github.com/NVIDIA/cnmem.git cnmem \
    && cd cnmem && mkdir build && cd build && cmake .. && make && make install && cd ../.. && rm -rf cnmem

# install mpich /usr/local/include   /usr/local/lib
RUN wget http://www.mpich.org/static/downloads/3.3.2/mpich-3.3.2.tar.gz -P $HOME \
    && cd $HOME \
    && tar xfz mpich-3.3.2.tar.gz \
    && cd mpich-3.3.2 \
    && ./configure --prefix=/usr/local --disable-fortran \
    && make && make install  && cd .. && rm -rf mpich-3.3.2