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 Inferentia
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érieure1.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
. Des gestionnaires de packages tels queaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
apt-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 est1.30
, vous pouvez utiliser la versionkubectl
1.29
,1.30
ou1.31
. Pour installer ou mettre à niveaukubectl
, 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 lep4d
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
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.
-
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.
Remplacez-le par Région AWS celui dans lequel vous souhaitez déployer votre groupe de nœuds.region-code
aws ec2 describe-instance-types --region
region-code
\ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output textLorsque 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.
-
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.48xlarge
instance 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
par n'importe quel type d'instance renvoyé à l'étape précédente.p5.48xlarge
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 textL'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.
-
Créez un groupe de nœuds à l'aide de
eksctl
.Prérequis
Version
0.191.0
ou ultérieure de l'outil de ligne de commandeeksctl
installée sur votre appareil ou AWS CloudShell. Pour installer ou mettre à joureksctl
, veuillez consulter Installationdans la documentation de eksctl
.-
Copiez le contenu suivant dans un fichier nommé
. Remplacez lesefa-cluster.yaml
par vos propres valeurs. Vous pouvez remplacerexample values
par une instance différente. Dans ce cas, assurez-vous que les valeurs dep5.48xlarge
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 -
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.
-
-
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 étenduesdans 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 NCCLtestsaws-samples/awsome-distributed-training
référentiel sur GitHub. NCCLLes tests
-
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. -
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-2Mi
EFAs, quatre et 8 000 Mo de mémoire, ce qui signifie que chaque travailleur consomme toutes les ressources d'une instance.p5.48xlarge
-
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
-
Appliquez le NCCL-tests MPIJob
MPIJob
Soumettez-les en appliquant le manifeste. Cela créera deux EC2 instancesp5.48xlarge
Amazon.kubectl apply -f nccl-tests.yaml
L'exemple qui suit illustre un résultat.
mpijob.kubeflow.org/nccl-tests created
-
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 2m49sL'MPIopérateur crée un lanceur Pod et 2 travailleurs Pods (un sur chaque nœud).
-
Vérifiez que la tâche s'exécute correctement avec les journaux
Consultez le journal du
nccl-tests-launcher
Pod. Remplacez
par la valeur de votre sortie.nbql9
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.