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

Exécution d’un entraînement avec EFA

SageMaker AI 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 AI. 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 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. Pour obtenir la liste de toutes les versions d’EFA disponibles, voir Vérification du programme d’installation EFA à l’aide d’un total 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 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.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, consultez 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 AI de la même manière qu’avec n’importe quelle autre image docker. Pour plus d’informations sur l’enregistrement de votre conteneur et son utilisation pour l’entraînement, consultez Adaptation de votre propre conteneur d’entraînement.