Étape 2 : Lancer une tâche de formation distribuée à l'aide du SDK SageMaker Python - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Étape 2 : Lancer une tâche de formation distribuée à l'aide du SDK SageMaker Python

Pour exécuter une tâche de formation distribuée avec votre script adapté depuisÉtape 1 : Adaptez votre script d'entraînement pour utiliser les opérations collectives SMDDP, utilisez le framework du SDK SageMaker Python ou des estimateurs génériques en spécifiant le script d'entraînement préparé comme script de point d'entrée et la configuration d'entraînement distribuée.

Cette page explique comment utiliser le SDK SageMaker Python de deux manières.

  • Si vous souhaitez adopter rapidement votre tâche de formation distribuée dans SageMaker, configurez une classe d' SageMaker PyTorchestimateurs ou un TensorFlowframework. L'estimateur du framework sélectionne votre script d'entraînement et fait automatiquement correspondre l'URI d'image correcte des Deep Learning Containers (DLC) prédéfinis PyTorch ou des TensorFlow Deep Learning Containers (DLC), en fonction de la valeur spécifiée pour le paramètre. framework_version

  • Si vous souhaitez étendre l'un des conteneurs prédéfinis ou créer un conteneur personnalisé pour créer votre propre environnement ML SageMaker, utilisez la Estimator classe SageMaker générique et spécifiez l'URI de l'image du conteneur Docker personnalisé hébergé dans votre Amazon Elastic Container Registry (Amazon ECR).

Vos ensembles de données de formation doivent être stockés dans Amazon S3 ou Amazon FSx for Lustre dans Région AWS lequel vous lancez votre formation. Si vous utilisez des blocs-notes Jupyter, vous devez disposer d'une instance de SageMaker bloc-notes ou d'une application SageMaker Studio Classic exécutée dans le même bloc-notes. Région AWS Pour plus d'informations sur le stockage de vos données d'entraînement, consultez la documentation sur les entrées de données du SDK SageMaker Python.

Astuce

Nous vous recommandons d'utiliser Amazon FSx for Lustre au lieu d'Amazon S3 afin d'améliorer les performances de formation. Le débit de Amazon FSx est plus élevé et sa latence inférieure à celle de Amazon S3.

Astuce

Pour exécuter correctement la formation distribuée sur les types d'instances compatibles EFA, vous devez activer le trafic entre les instances en configurant le groupe de sécurité de votre VPC afin d'autoriser tout le trafic entrant et sortant à destination et en provenance du groupe de sécurité lui-même. Pour savoir comment configurer les règles du groupe de sécurité, consultez Étape 1 : Préparation d'un groupe de sécurité compatible EFA dans le guide de l'utilisateur Amazon EC2.

Choisissez l'une des rubriques suivantes pour obtenir des instructions sur la façon d'exécuter une tâche de formation distribuée à partir de votre script de formation. Après avoir lancé une tâche de formation, vous pouvez surveiller l'utilisation du système et les performances des modèles à l'aide Utiliser Amazon SageMaker Debugger pour déboguer et améliorer les performances du modèle d'Amazon CloudWatch.

En plus de suivre les instructions des rubriques suivantes pour en savoir plus sur les détails techniques, nous vous recommandons de consulter les Exemples de bibliothèques SageMaker de parallélisme de données Amazon pour démarrer.

Utilisation d'estimateurs de framework dans le SDK Python SageMaker

Vous pouvez lancer une formation distribuée en ajoutant l'distributionargument aux estimateurs du SageMaker framework, PyTorchou. TensorFlow Pour plus de détails, choisissez l'un des frameworks pris en charge par la bibliothèque de parallélisme de données SageMaker distribué (SMDDP) parmi les sélections suivantes.

PyTorch

Les options de lancement suivantes sont disponibles pour lancer une formation PyTorch distribuée.

  • pytorchddp— Cette option exécute mpirun et définit les variables d'environnement nécessaires à l'exécution de la formation PyTorch distribuée sur SageMaker. Pour utiliser cette option, transmettez le dictionnaire suivant au distribution paramètre.

    { "pytorchddp": { "enabled": True } }
  • torch_distributed— Cette option exécute torchrun et définit les variables d'environnement nécessaires à l'exécution de la formation PyTorch distribuée sur SageMaker. Pour utiliser cette option, transmettez le dictionnaire suivant au distribution paramètre.

    { "torch_distributed": { "enabled": True } }
  • smdistributed— Cette option s'exécute égalementmpirun, mais elle permet de configurer les variables d'environnement nécessaires à l'exécution de la formation PyTorch distribuée SageMaker. smddprun

    { "smdistributed": { "dataparallel": { "enabled": True } } }

Si vous avez choisi de remplacer NCCL AllGather par SMDDPAllGather, vous pouvez utiliser les trois options. Choisissez une option qui correspond à votre cas d'utilisation.

Si vous avez choisi de remplacer NCCL AllReduce par SMDDPAllReduce, vous devez choisir l'une des options suivantes : oumpirun. smdistributed pytorchddp Vous pouvez également ajouter des options MPI supplémentaires comme suit.

{ "pytorchddp": { "enabled": True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION" } }
{ "smdistributed": { "dataparallel": { "enabled": True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION" } } }

L'exemple de code suivant montre la structure de base d'un PyTorch estimateur avec des options d'entraînement distribuées.

from sagemaker.pytorch import PyTorch pt_estimator = PyTorch( base_job_name="training_job_name_prefix", source_dir="subdirectory-to-your-code", entry_point="adapted-training-script.py", role="SageMakerRole", py_version="py310", framework_version="2.0.1",     # For running a multi-node distributed training job, specify a value greater than 1     # Example: 2,3,4,..8 instance_count=2,     # Instance types supported by the SageMaker data parallel library: # ml.p4d.24xlarge, ml.p4de.24xlarge instance_type="ml.p4d.24xlarge", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather ) pt_estimator.fit("s3://bucket/path/to/training/data")
Note

PyTorch Lightning et ses bibliothèques d'utilitaires, telles que Lightning Bolts, ne sont pas préinstallés dans les SageMaker PyTorch DLC. Créez le fichier requirements.txt suivant et enregistrez-le dans le répertoire source où vous enregistrez le script d'entraînement.

# requirements.txt pytorch-lightning lightning-bolts

Par exemple, le répertoire de type arborescence doit être similaire à ce qui suit.

├── pytorch_training_launcher_jupyter_notebook.ipynb └── sub-folder-for-your-code ├── adapted-training-script.py └── requirements.txt

Pour plus d'informations sur la spécification du répertoire source dans lequel placer le requirements.txt fichier avec votre script d'entraînement et la soumission d'une tâche, consultez la section Utilisation de bibliothèques tierces dans la documentation du SDK Amazon SageMaker Python.

Considérations relatives à l'activation des opérations collectives SMDDP et à l'utilisation des bonnes options de lancement d'entraînement distribué
  • Le SMDDP AllReduce et le SMDDP ne AllGather sont pas compatibles entre eux à l'heure actuelle.

  • Le SMDDP AllReduce est activé par défaut lors de l'utilisation de lanceurs mpirun basés sur smdistributed oupytorchddp, qui sont des lanceurs, et le AllGather NCCL est utilisé.

  • Le SMDDP AllGather est activé par défaut lors de l'utilisation du torch_distributed lanceur et AllReduce revient à NCCL.

  • Le SMDDP AllGather peut également être activé lors de l'utilisation des lanceurs mpirun basés avec une variable d'environnement supplémentaire définie comme suit.

    export SMDATAPARALLEL_OPTIMIZE_SDP=true
TensorFlow
Important

La bibliothèque SMDDP a cessé de prendre en charge les DLC TensorFlow et n'est plus disponible dans les DLC pour les TensorFlow versions ultérieures à la version 2.11.0. Pour rechercher les TensorFlow DLC précédents sur lesquels la bibliothèque SMDDP est installée, consultez. TensorFlow (obsolète)

from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow( base_job_name = "training_job_name_prefix", entry_point="adapted-training-script.py", role="SageMakerRole", framework_version="2.11.0", py_version="py38",     # For running a multi-node distributed training job, specify a value greater than 1 # Example: 2,3,4,..8 instance_count=2,     # Instance types supported by the SageMaker data parallel library: # ml.p4d.24xlargeml.p3dn.24xlarge, and ml.p3.16xlarge instance_type="ml.p3.16xlarge",     # Training using the SageMaker data parallel distributed training strategy distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } ) tf_estimator.fit("s3://bucket/path/to/training/data")

Utilisation de l'estimateur SageMaker générique pour étendre les conteneurs préfabriqués

Vous pouvez personnaliser les conteneurs SageMaker prédéfinis ou les étendre pour répondre aux exigences fonctionnelles supplémentaires de votre algorithme ou de votre modèle que l'image SageMaker Docker prédéfinie ne prend pas en charge. Pour apprendre comment étendre un conteneur précréé, consultez Étendre un conteneur précréé.

Pour étendre un conteneur prédéfini ou adapter votre propre conteneur à l'utilisation de la bibliothèque, vous devez utiliser l'une des images répertoriées dans Frameworks pris en charge.

Note

À partir des TensorFlow versions 2.4.1 et PyTorch 1.8.1, les DLC du SageMaker framework prennent en charge les types d'instances compatibles EFA. Nous vous recommandons d'utiliser les images du DLC contenant la TensorFlow version 2.4.1 ou ultérieure et la version PyTorch 1.8.1 ou ultérieure.

Par exemple, si vous utilisez PyTorch, votre Dockerfile doit contenir une FROM instruction similaire à la suivante :

# SageMaker PyTorch image FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/pytorch-training:<image-tag> ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker PyTorch container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code. COPY train.py /opt/ml/code/train.py # Defines cifar10.py as script entrypoint ENV SAGEMAKER_PROGRAM train.py

Vous pouvez personnaliser davantage votre propre conteneur Docker pour qu'il fonctionne à SageMaker l'aide de la boîte à outils de SageMaker formation et du fichier binaire de la bibliothèque de données parallèles SageMaker distribuées. Pour plus d'informations, consultez les instructions à la section suivante.

Créez votre propre conteneur Docker avec la bibliothèque de données parallèles SageMaker distribuées

Pour créer votre propre conteneur Docker à des fins d'entraînement et utiliser la bibliothèque SageMaker data parallel, vous devez inclure les dépendances correctes et les fichiers binaires des bibliothèques parallèles SageMaker distribuées dans votre Dockerfile. Cette section fournit des instructions sur la façon de créer un Dockerfile complet avec le minimum de dépendances pour un entraînement distribué à SageMaker l'utilisation de la bibliothèque data parallel.

Note

Cette option Docker personnalisée avec la bibliothèque SageMaker data parallel sous forme binaire n'est disponible que pour PyTorch.

Pour créer un Dockerfile avec le kit de SageMaker formation et la bibliothèque Data Parallel
  1. Commencez par une image Docker à partir de NVIDIA CUDA. Utilisez les versions pour développeurs de cuDNN qui contiennent les outils d'exécution et de développement CUDA (en-têtes et bibliothèques) pour créer à partir du code source. PyTorch

    FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
    Astuce

    Les images officielles du AWS Deep Learning Container (DLC) sont créées à partir des images de base NVIDIA CUDA. Si vous souhaitez utiliser les images DLC prédéfinies comme références tout en suivant le reste des instructions, consultez les AWS Deep Learning Containers for PyTorch Dockerfiles.

  2. Ajoutez les arguments suivants pour spécifier les versions de PyTorch et d'autres packages. Indiquez également les chemins des compartiments Amazon S3 menant à la bibliothèque SageMaker Data Parallel et aux autres logiciels utilisés pour utiliser les AWS ressources, tels que le plug-in Amazon S3.

    Pour utiliser des versions de bibliothèques tierces autres que celles fournies dans l'exemple de code suivant, nous vous recommandons de consulter les Dockerfiles officiels de AWS Deep Learning Container PyTorch pour trouver les versions testées, compatibles et adaptées à votre application.

    Pour trouver les URL de l'SMDATAPARALLEL_BINARYargument, consultez les tables de recherche à Frameworks pris en charge l'adresse.

    ARG PYTORCH_VERSION=1.10.2 ARG PYTHON_SHORT_VERSION=3.8 ARG EFA_VERSION=1.14.1 ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl ARG CONDA_PREFIX="/opt/conda" ARG BRANCH_OFI=1.1.3-aws
  3. Définissez les variables d'environnement suivantes pour créer correctement les composants d' SageMaker apprentissage et exécuter la bibliothèque Data Parallel. Vous utilisez ces variables pour les composants dans les étapes suivantes.

    # Set ENV variables required to build PyTorch ENV TORCH_CUDA_ARCH_LIST="7.0+PTX 8.0" ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" ENV NCCL_VERSION=2.10.3 # Add OpenMPI to the path. ENV PATH /opt/amazon/openmpi/bin:$PATH # Add Conda to path ENV PATH $CONDA_PREFIX/bin:$PATH # Set this enviroment variable for SageMaker to launch SMDDP correctly. ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main # Add enviroment variable for processes to be able to call fork() ENV RDMAV_FORK_SAFE=1 # Indicate the container type ENV DLC_CONTAINER_TYPE=training # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH
  4. Installez ou mettez à jour curl, wget et git pour télécharger et créer des packages dans les étapes suivantes.

    RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ curl \ wget \ git \ && rm -rf /var/lib/apt/lists/*
  5. Installez le logiciel Elastic Fabric Adapter (EFA) pour la communication réseau Amazon EC2.

    RUN DEBIAN_FRONTEND=noninteractive apt-get update RUN mkdir /tmp/efa \ && cd /tmp/efa \ && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \ && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \ && cd aws-efa-installer \ && ./efa_installer.sh -y --skip-kmod -g \ && rm -rf /tmp/efa
  6. Installez Conda pour traiter la gestion des paquets.

    RUN curl -fsSL -v -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ chmod +x ~/miniconda.sh && \ ~/miniconda.sh -b -p $CONDA_PREFIX && \ rm ~/miniconda.sh && \ $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \ $CONDA_PREFIX/bin/conda clean -ya
  7. Obtenez, compilez, installez PyTorch et ses dépendances. Nous construisons PyTorch à partir du code source car nous devons contrôler la version NCCL pour garantir la compatibilité avec le plug-in AWS OFI NCCL.

    1. En suivant les étapes du dockerfile PyTorch officiel, installez les dépendances de construction et configurez ccache pour accélérer la recompilation.

      RUN DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ cmake \ git \ libjpeg-dev \ libpng-dev \ && rm -rf /var/lib/apt/lists/* # Setup ccache RUN /usr/sbin/update-ccache-symlinks RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache
    2. Dépendances communes et dépendances Linux de l'installationPyTorch.

      # Common dependencies for PyTorch RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses # Linux specific dependency for PyTorch RUN conda install -c pytorch magma-cuda113
    3. Clonez le PyTorch GitHubdépôt.

      RUN --mount=type=cache,target=/opt/ccache \ cd / \ && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
    4. Installez et créez une version spécifique de NCCL. Pour ce faire, remplacez le contenu du dossier NCCL par défaut (/pytorch/third_party/nccl) par la version NCCL spécifique du référentiel NVIDIA. PyTorch La version NCCL a été définie à l'étape 3 de ce guide.

      RUN cd /pytorch/third_party/nccl \ && rm -rf nccl \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \ && make pkg.txz.build \ && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1
    5. Construisez et installez PyTorch. Ce processus prend généralement un peu plus d'une heure. Il est créé en utilisant la version NCCL téléchargée à l'étape précédente.

      RUN cd /pytorch \ && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \ python setup.py install \ && rm -rf /pytorch
  8. Créez et installez le Plugin NCCL OFI AWS. Cela active le support de libfabric pour la bibliothèque SageMaker data parallel.

    RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get install -y --no-install-recommends \ autoconf \ automake \ libtool RUN mkdir /tmp/efa-ofi-nccl \ && cd /tmp/efa-ofi-nccl \ && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \ && cd aws-ofi-nccl \ && ./autogen.sh \ && ./configure --with-libfabric=/opt/amazon/efa \ --with-mpi=/opt/amazon/openmpi \ --with-cuda=/usr/local/cuda \ --with-nccl=$CONDA_PREFIX \ && make \ && make install \ && rm -rf /tmp/efa-ofi-nccl
  9. Construisez et installez TorchVision.

    RUN pip install --no-cache-dir -U \ packaging \ mpi4py==3.0.3 RUN cd /tmp \ && git clone https://github.com/pytorch/vision.git -b v0.9.1 \ && cd vision \ && BUILD_VERSION="0.9.1+cu111" python setup.py install \ && cd /tmp \ && rm -rf vision
  10. Installez et configurer OpenSSH. OpenSSH est requis pour que MPI communique entre les conteneurs. Autorisez OpenSSH à parler aux conteneurs sans demander de confirmation.

    RUN apt-get update \ && apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends \ && apt-get install -y --no-install-recommends openssh-client openssh-server \ && 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 \ && rm -rf /var/lib/apt/lists/* # Configure OpenSSH so that nodes can communicate with each other RUN mkdir -p /var/run/sshd && \ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd RUN rm -rf /root/.ssh/ && \ mkdir -p /root/.ssh/ && \ ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \ cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \ && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config
  11. Installez le plug-in PT S3 pour accéder efficacement aux jeux de données dans Amazon S3.

    RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU} RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
  12. Installez la bibliothèque libboost. Ce package est nécessaire pour mettre en réseau la fonctionnalité d'E/S asynchrone de la bibliothèque data SageMaker parallel.

    WORKDIR / RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \ && tar -xzf boost_1_73_0.tar.gz \ && cd boost_1_73_0 \ && ./bootstrap.sh \ && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \ && cd .. \ && rm -rf boost_1_73_0.tar.gz \ && rm -rf boost_1_73_0 \ && cd ${CONDA_PREFIX}/include/boost
  13. Installez les SageMaker outils suivants pour la PyTorch formation.

    WORKDIR /root RUN pip install --no-cache-dir -U \ smclarify \ "sagemaker>=2,<3" \ sagemaker-experiments==0.* \ sagemaker-pytorch-training
  14. Enfin, installez le binaire SageMaker data parallel et les dépendances restantes.

    RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ jq \ libhwloc-dev \ libnuma1 \ libnuma-dev \ libssl1.1 \ libtool \ hwloc \ && rm -rf /var/lib/apt/lists/* RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  15. Après avoir créé le Dockerfile, consultez Adapting Your Own Training Container pour savoir comment créer le conteneur Docker, l'héberger dans Amazon ECR et exécuter une tâche de formation à l'aide du SDK Python. SageMaker

L'exemple de code suivant montre un Dockerfile complet après avoir combiné tous les blocs de code précédents.

# This file creates a docker image with minimum dependencies to run SageMaker data parallel training FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 # Set appropiate versions and location for components ARG PYTORCH_VERSION=1.10.2 ARG PYTHON_SHORT_VERSION=3.8 ARG EFA_VERSION=1.14.1 ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl ARG CONDA_PREFIX="/opt/conda" ARG BRANCH_OFI=1.1.3-aws # Set ENV variables required to build PyTorch ENV TORCH_CUDA_ARCH_LIST="3.7 5.0 7.0+PTX 8.0" ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" ENV NCCL_VERSION=2.10.3 # Add OpenMPI to the path. ENV PATH /opt/amazon/openmpi/bin:$PATH # Add Conda to path ENV PATH $CONDA_PREFIX/bin:$PATH # Set this enviroment variable for SageMaker to launch SMDDP correctly. ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main # Add enviroment variable for processes to be able to call fork() ENV RDMAV_FORK_SAFE=1 # Indicate the container type ENV DLC_CONTAINER_TYPE=training # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH # Install basic dependencies to download and build other dependencies RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ curl \ wget \ git \ && rm -rf /var/lib/apt/lists/* # Install EFA. # This is required for SMDDP backend communication RUN DEBIAN_FRONTEND=noninteractive apt-get update RUN mkdir /tmp/efa \ && cd /tmp/efa \ && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \ && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \ && cd aws-efa-installer \ && ./efa_installer.sh -y --skip-kmod -g \ && rm -rf /tmp/efa # Install Conda RUN curl -fsSL -v -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ chmod +x ~/miniconda.sh && \ ~/miniconda.sh -b -p $CONDA_PREFIX && \ rm ~/miniconda.sh && \ $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \ $CONDA_PREFIX/bin/conda clean -ya # Install PyTorch. # Start with dependencies listed in official PyTorch dockerfile # https://github.com/pytorch/pytorch/blob/master/Dockerfile RUN DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ cmake \ git \ libjpeg-dev \ libpng-dev && \ rm -rf /var/lib/apt/lists/* # Setup ccache RUN /usr/sbin/update-ccache-symlinks RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache # Common dependencies for PyTorch RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses # Linux specific dependency for PyTorch RUN conda install -c pytorch magma-cuda113 # Clone PyTorch RUN --mount=type=cache,target=/opt/ccache \ cd / \ && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION} # Note that we need to use the same NCCL version for PyTorch and OFI plugin. # To enforce that, install NCCL from source before building PT and OFI plugin. # Install NCCL. # Required for building OFI plugin (OFI requires NCCL's header files and library) RUN cd /pytorch/third_party/nccl \ && rm -rf nccl \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \ && make pkg.txz.build \ && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1 # Build and install PyTorch. RUN cd /pytorch \ && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \ python setup.py install \ && rm -rf /pytorch RUN ccache -C # Build and install OFI plugin. \ # It is required to use libfabric. RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get install -y --no-install-recommends \ autoconf \ automake \ libtool RUN mkdir /tmp/efa-ofi-nccl \ && cd /tmp/efa-ofi-nccl \ && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \ && cd aws-ofi-nccl \ && ./autogen.sh \ && ./configure --with-libfabric=/opt/amazon/efa \ --with-mpi=/opt/amazon/openmpi \ --with-cuda=/usr/local/cuda \ --with-nccl=$CONDA_PREFIX \ && make \ && make install \ && rm -rf /tmp/efa-ofi-nccl # Build and install Torchvision RUN pip install --no-cache-dir -U \ packaging \ mpi4py==3.0.3 RUN cd /tmp \ && git clone https://github.com/pytorch/vision.git -b v0.9.1 \ && cd vision \ && BUILD_VERSION="0.9.1+cu111" python setup.py install \ && cd /tmp \ && rm -rf vision # Install OpenSSH. # Required for MPI to communicate between containers, allow OpenSSH to talk to containers without asking for confirmation RUN apt-get update \ && apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends \ && apt-get install -y --no-install-recommends openssh-client openssh-server \ && 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 \ && rm -rf /var/lib/apt/lists/* # Configure OpenSSH so that nodes can communicate with each other RUN mkdir -p /var/run/sshd && \ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd RUN rm -rf /root/.ssh/ && \ mkdir -p /root/.ssh/ && \ ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \ cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \ && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config # Install PT S3 plugin. # Required to efficiently access datasets in Amazon S3 RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU} RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt # Install libboost from source. # This package is needed for smdataparallel functionality (for networking asynchronous IO). WORKDIR / RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \ && tar -xzf boost_1_73_0.tar.gz \ && cd boost_1_73_0 \ && ./bootstrap.sh \ && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \ && cd .. \ && rm -rf boost_1_73_0.tar.gz \ && rm -rf boost_1_73_0 \ && cd ${CONDA_PREFIX}/include/boost # Install SageMaker PyTorch training. WORKDIR /root RUN pip install --no-cache-dir -U \ smclarify \ "sagemaker>=2,<3" \ sagemaker-experiments==0.* \ sagemaker-pytorch-training # Install SageMaker data parallel binary (SMDDP) # Start with dependencies RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ jq \ libhwloc-dev \ libnuma1 \ libnuma-dev \ libssl1.1 \ libtool \ hwloc \ && rm -rf /var/lib/apt/lists/* # Install SMDDP RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
Astuce

Pour des informations plus générales sur la création d'un Dockerfile personnalisé pour l'entraînement SageMaker, voir Utiliser vos propres algorithmes d'entraînement.

Astuce

Si vous souhaitez étendre le Dockerfile personnalisé pour intégrer la bibliothèque model SageMaker parallel, consultez. Créez votre propre conteneur Docker avec la bibliothèque parallèle de modèles SageMaker distribués