Organisez une formation de machine learning sur Amazon EKS avec Elastic Fabric Adapter - Amazon EKS

Aidez à améliorer cette page

Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tous.

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.

Organisez une formation de machine learning sur Amazon EKS avec Elastic Fabric Adapter

Cette rubrique décrit comment intégrer Elastic Fabric Adapter (EFA) à Pods déployé dans votre EKS cluster Amazon. Elastic Fabric Adapter (EFA) est une interface réseau pour les EC2 instances Amazon qui vous permet d'exécuter des applications nécessitant des niveaux élevés de communications entre nœuds à grande échelle AWS. Son interface matérielle sur mesure de contournement du système d'exploitation améliore les performances des communications entre instances, ce qui est essentiel à la mise à l'échelle de ces applications. AvecEFA, les applications de calcul à haute performance (HPC) utilisant l'interface de passage de message (MPI) et les applications Machine Learning (ML) utilisant la bibliothèque de communications NVIDIA collectives (NCCL) peuvent atteindre des milliers de CPUs ouGPUs. Vous bénéficiez ainsi des performances applicatives des HPC clusters sur site avec l'élasticité et la flexibilité à la demande du AWS cloud. L'intégration EFA aux applications exécutées sur des EKS clusters Amazon peut réduire le temps nécessaire pour effectuer des charges de travail de formation distribuées à grande échelle sans avoir à ajouter d'instances supplémentaires à votre cluster. Pour plus d'informations sur EFA Elastic Fabric Adapter.

Types d'instances avec EFA

Le plug-in pour appareils AWS EFA Kubernetes prend en charge tous les types d'EC2instances Amazon dotés de. EFA Pour consulter la liste de tous les types d'instances qui en ontEFA, consultez la section Types d'instances pris en charge dans le guide de EC2 l'utilisateur Amazon. Toutefois, pour exécuter rapidement des applications ML, nous recommandons qu'une instance dispose de puces d'accélération matérielle telles que nVidia GPUs, AWS Inferentiades chips, ou AWS Trainiumchips, en plus duEFA. Pour consulter la liste des types d'instances dotés de puces d'accélération matérielleEFA, consultez la section Accelerated computing dans le guide de EC2 l'utilisateur Amazon.

Lorsque vous comparez les types d'instance pour choisir entre eux, tenez compte du nombre de cartes EFA réseau disponibles pour ce type d'instance ainsi que du nombre de cartes accélératricesCPU, de la quantité et de la quantité de mémoire. Vous pouvez en attribuer un maximum EFA par carte réseau. Et EFA compte comme une interface réseau. Pour savoir combien EFA sont disponibles pour chaque type d'instance qui en possèdeEFA, consultez la liste des cartes réseau dans le guide de EC2 l'utilisateur Amazon.

Prérequis

  • Un EKS cluster Amazon existant. Si vous n'avez pas de cluster existant, utilisez l'un de nos guides Commencez avec Amazon EKS pour en créer un. Votre cluster doit être déployé dans un VPC sous-réseau privé doté d'au moins un nombre suffisant d'adresses IP disponibles pour y déployer des nœuds. Le sous-réseau privé doit disposer d'un accès Internet sortant fourni par un périphérique externe, tel qu'une NAT passerelle.

    Si vous prévoyez d'utiliser eksctl pour créer votre groupe de nœuds, eksctl peut également créer un cluster pour vous.

  • Version 2.12.3 ou version ultérieure 1.27.160 ou version ou ultérieure du AWS Command Line Interface (AWS CLI) installé et configuré sur votre appareil ou AWS CloudShell. Pour vérifier votre version actuelle, utilisez aws --version | cut -d / -f2 | cut -d ' ' -f1. Des gestionnaires de packages tels que yumapt-get, ou Homebrew for macOS ont souvent plusieurs versions de retard par rapport à la dernière version du AWS CLI. Pour installer la dernière version, voir Installation, mise à jour et désinstallation de AWS CLI et Configuration rapide avec aws configure dans le guide de l'utilisateur AWS Command Line Interface . La AWS CLI version installée AWS CloudShell peut également avoir plusieurs versions de retard par rapport à la dernière version. Pour le mettre à jour, consultez la section Installation AWS CLI dans votre répertoire personnel dans le guide de AWS CloudShell l'utilisateur.

  • L'outil de ligne de commande kubectl est installé sur votre appareil ou AWS CloudShell. La version peut être identique ou supérieure à une version mineure antérieure ou ultérieure à Kubernetes version de votre cluster. Par exemple, si la version de votre cluster est 1.30, vous pouvez utiliser la version kubectl 1.29, 1.30 ou 1.31. Pour installer ou mettre à niveau kubectl, veuillez consulter Configuration kubectl et eksctl.

  • Vous devez avoir Amazon VPC CNI plugin for Kubernetes version 1.7.10 ou ultérieure installée avant le lancement de nœuds de travail prenant en charge plusieurs adaptateurs Elastic Fabric, tels que le p4d oup5. Pour plus d'informations sur la mise à jour de votre Amazon VPC CNI plugin for Kubernetes version, voirAttribuer IPs à Pods avec Amazon VPC CNI.

Important

Une considération importante à prendre en compte pour adopter EFA avec Kubernetes est en train de configurer et de gérer Huge Pages en tant que ressource dans le cluster. Pour plus d'informations, consultez la section Gérer les pages volumineuses dans le Kubernetes . Les EC2 instances Amazon sur lesquelles le EFA pilote est installé préallouent 5 128 pages volumineuses de 2 Mo, que vous pouvez demander en tant que ressources à utiliser dans le cadre de vos spécifications de travail.

Créer un groupe de nœuds

La procédure suivante vous aide à créer un groupe de nœuds avec un groupe de nœuds p4d.24xlarge soutenu doté d'EFAinterfaces et GPUDirect RDMA à exécuter un exemple de test de NCCL performance sur plusieurs nœuds avec la bibliothèque de communications NVIDIA collectives (NCCL). EFAs L'exemple peut être utilisé comme modèle de formation distribuée sur le deep learning sur Amazon EKS en utilisantEFAs.

  1. Déterminez quels types d'EC2instances Amazon compatibles EFA sont disponibles dans l'instance dans Région AWS laquelle vous souhaitez déployer des nœuds. region-codeRemplacez-le par Région AWS celui dans lequel vous souhaitez déployer votre groupe de nœuds.

    aws ec2 describe-instance-types --region region-code \ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output text

    Lorsque vous déployez des nœuds, le type d'instance que vous souhaitez déployer doit être disponible dans l'environnement dans Région AWS lequel se trouve votre cluster.

  2. Déterminez dans quelles zones de disponibilité le type d'instance que vous souhaitez déployer est disponible. Dans ce didacticiel, le type d'p5.48xlargeinstance est utilisé et doit être renvoyé dans la sortie pour Région AWS celui que vous avez spécifié à l'étape précédente. Lorsque vous déployez des nœuds dans un cluster de production, remplacez-les p5.48xlarge par n'importe quel type d'instance renvoyé à l'étape précédente.

    aws ec2 describe-instance-type-offerings --region region-code \ --location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge,p5.48xlarge \ --query 'InstanceTypeOfferings[*].Location' --output text

    L'exemple qui suit illustre un résultat.

    us-west-2a us-west-2c us-west-2b

    Notez les zones de disponibilité renvoyées pour une utilisation ultérieure. Lorsque vous déployez des nœuds sur un cluster, vous VPC devez disposer de sous-réseaux avec des adresses IP disponibles dans l'une des zones de disponibilité renvoyées dans la sortie.

  3. Créez un groupe de nœuds à l'aide deeksctl.

    Prérequis

    Version 0.191.0 ou ultérieure de l'outil de ligne de commande eksctl installée sur votre appareil ou AWS CloudShell. Pour installer ou mettre à jour eksctl, veuillez consulter Installation dans la documentation de eksctl.

    1. Copiez le contenu suivant dans un fichier nommé efa-cluster.yaml. Remplacez les example values par vos propres valeurs. Vous pouvez remplacer p5.48xlarge par une instance différente. Dans ce cas, assurez-vous que les valeurs de availabilityZones sont des zones de disponibilité renvoyées pour le type d'instance à l'étape 1.

      apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-efa-cluster region: region-code version: "1.XX" iam: withOIDC: true availabilityZones: ["us-west-2a", "us-west-2c"] managedNodeGroups: - name: my-efa-ng instanceType: p5.48xlarge minSize: 1 desiredCapacity: 2 maxSize: 3 availabilityZones: ["us-west-2a"] volumeSize: 300 privateNetworking: true efaEnabled: true
    2. Créez un groupe de nœuds gérés dans un cluster existant.

      eksctl create nodegroup -f efa-cluster.yaml

      Si vous n'avez pas de cluster existant, vous pouvez exécuter la commande suivante pour créer un cluster et le groupe de nœuds.

      eksctl create cluster -f efa-cluster.yaml
      Note

      Comme le type d'instance utilisé dans cet exemple l'estGPUs, le plug-in de périphérique NVIDIA Kubernetes est eksctl automatiquement installé pour vous sur chaque instance.

  4. Déployez le EFA plug-in pour appareil Kubernetes.

    Le plug-in pour appareil EFA Kubernetes détecte et annonce les EFA interfaces en tant que ressources allouables à Kubernetes. Une application peut consommer le type de ressource étendu vpc.amazonaws.com/efa dans un Pod spécification de demande, tout comme CPU et mémoire. Pour plus d'informations, consultez la section Consommation de ressources étendues dans le Kubernetes . Une fois demandé, le plugin assigne et monte automatiquement une EFA interface au Pod. L'utilisation du plug-in de l'appareil simplifie la EFA configuration et ne nécessite pas de Pod pour fonctionner en mode privilégié.

    helm repo add eks https://aws.github.io/eks-charts helm install aws-efa-k8s-device-plugin --namespace kube-system eks/aws-efa-k8s-device-plugin

(Facultatif) Testez les performances du EFA

Nous vous recommandons de tester la EFA configuration. Vous pouvez utiliser les NCCLtests du aws-samples/awsome-distributed-training référentiel sur GitHub. NCCLLes tests évaluent les performances du réseau à l'aide de la bibliothèque de communication collective Nvidia. Les étapes suivantes permettent de soumettre NCCL des tests sur AmazonEKS.

  1. Déployer l'opérateur Kubeflow MPI

    Pour les NCCL tests, vous pouvez appliquer l'opérateur KubeflowMPI. L'MPIopérateur facilite l'exécution de formations distribuées de type AllReduce sur Kubernetes. Pour plus d'informations, voir MPIOpérateur sur GitHub.

  2. Exécutez le test de NCCL performance multi-nœuds pour vérifier GPUDirectRDMA/EFA

    Pour vérifier les NCCL performances avec GPUDirectRDMA terminéEFA, exécutez le test de NCCL performance standard. Pour plus d'informations, consultez le dépôt officiel NCCL-Tests sur GitHub.

    Procédez comme suit pour exécuter un nœud à deux nœuds NCCL Performance Test. Dans l'exemple NCCL tâche de test, chaque travailleur demande huitGPUs, 5210 Mo hugepages-2MiEFAs, quatre et 8 000 Mo de mémoire, ce qui signifie que chaque travailleur consomme toutes les ressources d'une instance. p5.48xlarge

    1. Créez le MPIJob manifeste

      Copiez ce qui suit dans un fichier nommé nccl-tests.yaml :

      apiVersion: kubeflow.org/v2beta1 kind: MPIJob metadata: name: nccl-tests spec: runPolicy: cleanPodPolicy: Running backoffLimit: 20 slotsPerWorker: 8 mpiReplicaSpecs: Launcher: replicas: 1 template: spec: restartPolicy: OnFailure containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: test-nccl-launcher env: - name: PATH value: $PATH:/opt/amazon/efa/bin:/usr/bin - name: LD_LIBRARY_PATH value: /opt/amazon/openmpi/lib:/opt/nccl/build/lib:/opt/amazon/efa/lib:/opt/aws-ofi-nccl/install/lib:/usr/local/nvidia/lib:$LD_LIBRARY_PATH - name: NCCL_DEBUG value: INFO - name: NCCL_BUFFSIZE value: '8388608' - name: NCCL_P2P_NET_CHUNKSIZE value: '524288' - name: NCCL_TUNER_PLUGIN value: /opt/aws-ofi-nccl/install/lib/libnccl-ofi-tuner.so command: - /opt/amazon/openmpi/bin/mpirun - --allow-run-as-root - --tag-output - -np - "16" - -N - "8" - --bind-to - none - -x - PATH - -x - LD_LIBRARY_PATH - -x - NCCL_DEBUG=INFO - -x - NCCL_BUFFSIZE - -x - NCCL_P2P_NET_CHUNKSIZE - -x - NCCL_TUNER_PLUGIN - --mca - pml - ^cm,ucx - --mca - btl - tcp,self - --mca - btl_tcp_if_exclude - lo,docker0,veth_def_agent - /opt/nccl-tests/build/all_reduce_perf - -b - "8" - -e - "16G" - -f - "2" - -g - "1" - -c - "1" - -n - "100" Worker: replicas: 2 template: spec: nodeSelector: node.kubernetes.io/instance-type: "p5.48xlarge" containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: nccl-tests-worker volumeMounts: - name: shmem mountPath: /dev/shm resources: limits: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi requests: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi volumes: - name: shmem hostPath: path: /dev/shm
    2. Appliquez le NCCL-tests MPIJob

      MPIJobSoumettez-les en appliquant le manifeste. Cela créera deux EC2 instances p5.48xlarge Amazon.

      kubectl apply -f nccl-tests.yaml

      L'exemple qui suit illustre un résultat.

      mpijob.kubeflow.org/nccl-tests created
    3. Vérifiez que le job a démarré

      Visualisez votre course Pods.

      kubectl get pods

      L'exemple qui suit illustre un résultat.

      NAME READY STATUS RESTARTS AGE nccl-tests-launcher-nbql9 0/1 Init:0/1 0 2m49s nccl-tests-worker-0 1/1 Running 0 2m49s nccl-tests-worker-1 1/1 Running 0 2m49s

      L'MPIopérateur crée un lanceur Pod et 2 travailleurs Pods (un sur chaque nœud).

    4. Vérifiez que la tâche s'exécute correctement avec les journaux

      Consultez le journal du nccl-tests-launcher Pod. Remplacez nbql9 par la valeur de votre sortie.

      kubectl logs -f nccl-tests-launcher-nbql9

Si le test s'est terminé avec succès, vous pouvez déployer vos applications qui utilisent Nvidia Collective Communication Library.