2020-07-31 12:23:13 +00:00
# Existing images:
2020-09-17 18:30:39 +00:00
# --build-arg PYTHON_VERSION=3.7 --build-arg PYTORCH_VERSION=1.7 --build-arg PYTORCH_CHANNEL=pytorch-nightly --build-arg CUDA_VERSION=10.1
# --build-arg PYTHON_VERSION=3.7 --build-arg PYTORCH_VERSION=1.6 --build-arg PYTORCH_CHANNEL=pytorch --build-arg CUDA_VERSION=10.1
# --build-arg PYTHON_VERSION=3.7 --build-arg PYTORCH_VERSION=1.5 --build-arg PYTORCH_CHANNEL=pytorch --build-arg CUDA_VERSION=10.1
# --build-arg PYTHON_VERSION=3.7 --build-arg PYTORCH_VERSION=1.4 --build-arg PYTORCH_CHANNEL=pytorch --build-arg CUDA_VERSION=10.1
# --build-arg PYTHON_VERSION=3.7 --build-arg PYTORCH_VERSION=1.3 --build-arg PYTORCH_CHANNEL=pytorch --build-arg CUDA_VERSION=10.1
2020-07-31 12:23:13 +00:00
ARG CUDNN_VERSION = 7
2020-09-17 18:30:39 +00:00
ARG CUDA_VERSION = 10 .1
2020-07-31 12:23:13 +00:00
2020-09-17 18:30:39 +00:00
FROM nvidia/cuda:${CUDA_VERSION}-cudnn${CUDNN_VERSION}-devel
2020-09-22 23:41:35 +00:00
# FROM nvidia/cuda:${CUDA_VERSION}-devel
2020-09-17 18:30:39 +00:00
ARG PYTHON_VERSION = 3 .7
ARG PYTORCH_VERSION = 1 .6
ARG PYTORCH_CHANNEL = pytorch
ARG CONDA_VERSION = 4 .7.12
2020-07-31 12:23:13 +00:00
2020-08-02 12:14:53 +00:00
SHELL [ "/bin/bash" , "-c" ]
2020-07-31 12:23:13 +00:00
ENV PATH = " $PATH :/root/.local/bin "
2020-09-17 18:30:39 +00:00
RUN apt-get update && apt-get install -y --no-install-recommends \
2020-09-22 23:41:35 +00:00
build-essential \
cmake \
git \
curl \
ca-certificates \
2020-08-02 12:14:53 +00:00
&& \
2020-09-30 12:33:22 +00:00
# Install conda and python.
# NOTE new Conda does not forward the exit status... https://github.com/conda/conda/issues/8385
curl -o ~/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-4.7.12-Linux-x86_64.sh && \
chmod +x ~/miniconda.sh && \
~/miniconda.sh -b && \
rm ~/miniconda.sh && \
# Cleaning
2020-08-02 12:14:53 +00:00
apt-get autoremove -y && \
apt-get clean && \
rm -rf /root/.cache && \
2020-09-17 18:30:39 +00:00
rm -rf /var/lib/apt/lists/*
2020-09-30 12:33:22 +00:00
ENV PATH = " /root/miniconda3/bin: $PATH "
ENV LD_LIBRARY_PATH = " /root/miniconda3/lib: $LD_LIBRARY_PATH "
2020-09-17 18:30:39 +00:00
ENV CUDA_TOOLKIT_ROOT_DIR = "/usr/local/cuda"
2020-09-22 23:41:35 +00:00
ENV HOROVOD_GPU_OPERATIONS = NCCL
ENV HOROVOD_WITH_PYTORCH = 1
ENV HOROVOD_WITHOUT_TENSORFLOW = 1
ENV HOROVOD_WITHOUT_MXNET = 1
ENV HOROVOD_WITH_GLOO = 1
ENV HOROVOD_WITHOUT_MPI = 1
2020-09-26 17:30:25 +00:00
2020-09-30 12:33:22 +00:00
ENV CONDA_ENV = lightning
COPY environment.yml environment.yml
2020-09-22 23:41:35 +00:00
2020-09-17 18:30:39 +00:00
# conda init
2020-09-30 12:33:22 +00:00
RUN conda create -y --name $CONDA_ENV " python= $PYTHON_VERSION " " pytorch= $PYTORCH_VERSION " torchvision " cudatoolkit= $CUDA_VERSION " --channel= $PYTORCH_CHANNEL && \
2020-09-17 18:30:39 +00:00
conda init bash && \
# NOTE: this requires that the channel is presented in the yaml before packages
2020-09-30 12:33:22 +00:00
# replace channel to nigtly if neede, fix PT version and remove Horovod as it will be installe later
python -c " import re ; fname = 'environment.yml' ; req = re.sub(r'torch>=[\d\.]+', 'torch= ${ PYTORCH_VERSION } ', open(fname).read().replace('pytorch', ' ${ PYTORCH_CHANNEL } ', 1)) ; open(fname, 'w').writelines([l for l in req if 'horovod' not in l]) " && \
cat environment.yml && \
2020-09-17 18:30:39 +00:00
conda env update --file environment.yml && \
conda clean -ya && \
2020-09-26 17:30:25 +00:00
# conda config --set auto_activate_base true && \
2020-09-22 23:41:35 +00:00
rm environment.yml
2020-09-17 18:30:39 +00:00
2020-09-30 12:33:22 +00:00
ENV PATH /root/miniconda3/envs/${ CONDA_ENV } /bin:$PATH
ENV LD_LIBRARY_PATH = " /root/miniconda3/envs/ ${ CONDA_ENV } /lib: $LD_LIBRARY_PATH "
2020-09-17 18:30:39 +00:00
# if you want this environment to be the default one, uncomment the following line:
2020-09-30 12:33:22 +00:00
ENV CONDA_DEFAULT_ENV = ${ CONDA_ENV }
2020-09-17 18:30:39 +00:00
2020-09-30 12:33:22 +00:00
COPY ./requirements/extra.txt requirements-extra.txt
COPY ./requirements/test.txt requirements-tests.txt
COPY ./requirements/examples.txt requirements-examples.txt
2020-09-17 18:30:39 +00:00
RUN \
2020-09-30 12:33:22 +00:00
# Disable cache
pip config set global.cache-dir false && \
#echo ". ${WORKDIR}/miniconda/etc/profile.d/conda.sh" >> ~/.bashrc && \
#echo "conda activate ${CONDA_ENV}" >> ~/.bashrc && \
#source ~/.bashrc && \
2020-09-22 23:41:35 +00:00
# filter only Horovod
python -c "fname = 'requirements-extra.txt' ; req = open(fname).readlines() ; open(fname, 'w').writelines([l for l in req if 'horovod' in l])" && \
2020-09-17 18:30:39 +00:00
# Install all requirements
2020-09-26 17:30:25 +00:00
MAKEFLAGS = " -j $( nproc) " ; pip install -r requirements-extra.txt && \
2020-09-30 12:33:22 +00:00
pip install -r requirements-tests.txt --upgrade-strategy only-if-needed && \
pip install -r requirements-examples.txt --upgrade-strategy only-if-needed && \
rm requirements*
RUN \
2020-09-17 18:30:39 +00:00
# Show what we have
2020-08-15 19:39:44 +00:00
pip --version && \
2020-09-17 18:30:39 +00:00
conda info && \
conda list && \
2020-09-30 12:33:22 +00:00
pip list && \
python -c "import torch; print(torch.__version__)"