Spaces:
Configuration error
Configuration error
# | |
# Copyright (c) 2023 Intel Corporation | |
# | |
# 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. | |
# | |
# SPDX-License-Identifier: Apache-2.0 | |
ARG IMAGE_NAME=ubuntu | |
ARG IMAGE_TAG=22.04 | |
FROM ${IMAGE_NAME}:${IMAGE_TAG} as base | |
# TLT base target | |
FROM base as tlt-base | |
ARG PYTHON=python3 | |
ENV DEBIAN_FRONTEND=noninteractive | |
RUN apt-get update && apt-get install -y --no-install-recommends --fix-missing \ | |
libgl1 \ | |
libglib2.0-0 \ | |
${PYTHON} \ | |
python3-pip && \ | |
apt-get clean autoclean && \ | |
apt-get autoremove -y && \ | |
rm -rf /var/lib/apt/lists/* | |
RUN ln -sf "$(which ${PYTHON})" /usr/bin/python | |
# TLT target for GitHub actions | |
FROM tlt-base as tlt-ci | |
ENV DEBIAN_FRONTEND=noninteractive | |
ENV LANG C.UTF-8 | |
ARG PYTHON=python3 | |
RUN apt-get update && apt-get install -y --no-install-recommends --fix-missing \ | |
${PYTHON}-dev \ | |
${PYTHON}-distutils \ | |
build-essential \ | |
ca-certificates \ | |
make \ | |
pandoc && \ | |
apt-get clean autoclean && \ | |
apt-get autoremove -y && \ | |
rm -rf /var/lib/apt/lists/* | |
RUN ${PYTHON} -m pip install virtualenv | |
# TLT target for development | |
FROM tlt-ci as tlt-devel | |
COPY . /tmp/intel-transfer-learning | |
WORKDIR /tmp/intel-transfer-learning | |
RUN ${PYTHON} setup.py bdist_wheel && \ | |
pip install --no-cache-dir -f https://download.pytorch.org/whl/cpu/torch_stable.html dist/*.whl | |
# TLT target for deployment | |
FROM tlt-base as tlt-prod | |
COPY --from=tlt-devel /usr/local/lib/python3.10/dist-packages /usr/local/lib/python3.10/dist-packages | |
COPY --from=tlt-devel /usr/local/bin /usr/local/bin | |
ENV DATASET_DIR=/tmp/data | |
ENV OUTPUT_DIR=/tmp/output | |
# TLT target for running with MPI | |
FROM tlt-prod as tlt-mpi | |
RUN apt-get update && apt-get install -y --no-install-recommends --fix-missing \ | |
libopenmpi-dev \ | |
openmpi-bin \ | |
openmpi-common \ | |
openssh-client \ | |
openssh-server && \ | |
apt-get clean autoclean && \ | |
apt-get autoremove -y && \ | |
rm -rf /var/lib/apt/lists/* | |
# Create a wrapper for OpenMPI to allow running as root by default | |
RUN mv /usr/bin/mpirun /usr/bin/mpirun.real && \ | |
echo '#!/bin/bash' > /usr/bin/mpirun && \ | |
echo 'mpirun.real --allow-run-as-root "$@"' >> /usr/bin/mpirun && \ | |
chmod a+x /usr/bin/mpirun | |
# Configure OpenMPI to run good defaults: | |
RUN echo "btl_tcp_if_exclude = lo,docker0" >> /etc/openmpi/openmpi-mca-params.conf | |
# Install OpenSSH for MPI to communicate between containers and allow OpenSSH to | |
# talk to containers without asking for confirmation | |
RUN mkdir -p /var/run/sshd && \ | |
cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \ | |
echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \ | |
mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config | |
# TLT target for with MPI, Horovod and all development tools | |
FROM tlt-mpi as tlt-dist-devel | |
ARG HOROVOD_WITH_PYTORCH=1 | |
ARG HOROVOD_WITHOUT_MXNET=1 | |
ARG HOROVOD_WITH_TENSORFLOW=1 | |
ARG HOROVOD_VERSION | |
ARG PYTHON=python3 | |
RUN apt-get update && apt-get install -y --no-install-recommends --fix-missing \ | |
build-essential \ | |
cmake \ | |
g++ \ | |
gcc \ | |
git \ | |
${PYTHON}-dev && \ | |
apt-get clean && \ | |
rm -rf /var/lib/apt/lists/* | |
RUN python -m pip install --no-cache-dir horovod==${HOROVOD_VERSION} | |
ARG ONECCL_VERSION | |
ARG ONECCL_URL=https://developer.intel.com/ipex-whl-stable-cpu | |
RUN python -m pip install --no-cache-dir oneccl_bind_pt==${ONECCL_VERSION} -f ${ONECCL_URL} | |
COPY . /tmp/intel-transfer-learning | |
WORKDIR /tmp/intel-transfer-learning | |
FROM tlt-mpi as tlt-dist-prod | |
COPY --from=tlt-dist-devel /usr/local/lib/${PYTHON}/dist-packages /usr/local/lib/python3.10/dist-packages | |
COPY --from=tlt-dist-devel /usr/local/bin /usr/local/bin | |