Exécution d'un entraînement avec EFA - Amazon SageMaker

Exécution d'un entraînement avec EFA

SageMaker propose l'intégration avec des périphériques EFA pour accélérer les applications de calcul haute performance (HPC) et de machine learning. Cette intégration vous permet de tirer parti d'un périphérique EFA lors de l'exécution de vos tâches d'entraînement distribué. Vous pouvez ajouter l'intégration EFA à un conteneur Docker existant que vous importez dans SageMaker. Les informations suivantes expliquent comment configurer votre propre conteneur pour qu'il utilise un périphérique EFA pour vos tâches d'entraînement distribué.

Conditions préalables

Votre conteneur doit satisfaire aux spécifications du conteneur entraînement SageMaker

Installation d'EFA et des packages requis

Votre conteneur doit télécharger et installer le logiciel EFA. Cela permet à votre conteneur de reconnaître le périphérique EFA, et fournit des versions compatibles de Libfabric et Open MPI.

Tous les outils tels que MPI et NCCL doivent être installés et gérés à l'intérieur du conteneur pour être utilisés dans le cadre de votre tâche d'entraînement compatible EFA. L'exemple suivant montre comment modifier le fichier Dockerfile de votre conteneur compatible EFA pour installer EFA, MPI, OFI, NCCL et NCCL-TEST.

Note

Lorsque vous utilisez PyTorch avec EFA sur votre conteneur, la version NCCL de votre conteneur doit correspondre à la version NCCL de votre installation PyTorch. Pour vérifier la version PyTorch NCCL, utilisez la commande suivante :

torch.cuda.nccl.version()
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/ ENV NCCL_VERSION=2.7.8 ENV EFA_VERSION=1.11.2 ENV BRANCH_OFI=1.1.1 ################################################# ## EFA and MPI SETUP RUN cd $HOME \ && curl -O https://s3-us-west-2.amazonaws.com/aws-efa-installer/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 \ ENV PATH="$OPEN_MPI_PATH/bin:$PATH" ENV LD_LIBRARY_PATH="$OPEN_MPI_PATH/lib/:$LD_LIBRARY_PATH" ################################################# ## NCCL, OFI, NCCL-TEST SETUP RUN cd $HOME \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build BUILDDIR=/usr/local RUN apt-get update && apt-get install -y autoconf RUN cd $HOME \ && 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=/usr/local --prefix=/usr/local \ && make && make install RUN cd $HOME \ && git clone https://github.com/NVIDIA/nccl-tests \ && cd nccl-tests \ && make MPI=1 MPI_HOME=/opt/amazon/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local

Considérations lors de la création de votre conteneur

Le périphérique EFA est monté sur le conteneur en tant que /dev/infiniband/uverbs0 dans la liste des périphériques accessibles au conteneur. Sur les instances P4d, le conteneur a accès à 4 périphériques EFA. Les périphériques EFA peuvent être trouvés dans la liste des périphériques accessibles au conteneur de la façon suivante :

  • /dev/infiniband/uverbs0

  • /dev/infiniband/uverbs1

  • /dev/infiniband/uverbs2

  • /dev/infiniband/uverbs3

Pour obtenir des informations sur le nom d'hôte, les noms d'hôte homologues et l'interface réseau (pour MPI) à partir du fichier resourceconfig.json fourni à chaque instance de conteneur, veuillez consulter Distributed Training Configuration (Configuration d'entraînement distribué). Votre conteneur gère le trafic TCP régulier entre homologues via les interfaces réseau Elastic (ENI) par défaut, tout en gérant le trafic OFI (contournement du noyau) via le périphérique EFA.

Vérifier que votre périphérique EFA est reconnu

 Pour vérifier que le périphérique EFA est reconnu, exécutez la commande suivante à partir de votre conteneur.

/opt/amazon/efa/bin/fi_info -p efa

Votre sortie doit ressembler à ce qui suit :

provider: efa fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-dgrm version: 2.0 type: FI_EP_DGRAM protocol: FI_PROTO_EFA provider: efa;ofi_rxd fabric: EFA-fe80::e5:56ff:fe34:56a8 domain: efa_0-dgrm version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD

Exécution d'une tâche d'entraînement avec EFA

Après avoir créé un conteneur compatible EFA, vous pouvez exécuter une tâche d'entraînement avec EFA à l'aide d'un estimateur SageMaker de la même manière qu'avec n'importe quelle autre image docker. Pour de plus amples informations sur l'enregistrement de votre conteneur et son utilisation pour l'entraînement, veuillez consulter Adapting Your Own Training Container (Adaptation de votre propre conteneur d'entraînement).