Exécution d'un entraînement avec EFA - 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.

Exécution d'un entraînement avec EFA

SageMaker fournit une intégration avec les appareils EFA pour accélérer les applications de calcul haute performance (HPC) et d'apprentissage automatique. 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 y apportez 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é.

Prérequis

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

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. Pour obtenir la liste de toutes les versions d'EFA disponibles, voir Vérifier le programme d'installation d'EFA à l'aide d'une somme de contrôle. 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 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.30.0 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

Une fois que vous avez créé un conteneur compatible EFA, vous pouvez exécuter une tâche de formation avec EFA à l'aide d'un SageMaker estimateur de la même manière que vous le feriez 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).