View a markdown version of this page

Gérer les appareils EFA sur Amazon EKS - Amazon EKS

Aidez à améliorer cette page

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.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page qui se trouve dans le volet droit de chaque page.

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.

Gérer les appareils EFA sur Amazon EKS

Elastic Fabric Adapter (EFA) est un périphérique réseau pour les instances Amazon EC2 qui permet des communications inter-nœuds hautes performances et un accès RDMA (Remote Direct Memory Access) pour les charges de travail liées à l'intelligence artificielle, à l'apprentissage automatique et au calcul haute performance (HPC). Amazon EKS prend en charge deux mécanismes pour gérer les périphériques EFA dans les clusters EKS : le pilote EFA Dynamic Resource Allocation (DRA) (DRANET) et le plug-in de périphérique EFA.

Nous vous recommandons d'utiliser des pilotes DRA pour les nouveaux déploiements avec les versions 1.34 et ultérieures de Kubernetes lorsque vous utilisez le provisionnement de capacité statique dans Karpenter, des groupes de nœuds gérés par EKS ou des nœuds autogérés. Le DRA n'est actuellement pas pris en charge avec le mode automatique EKS. Avec le pilote EFA DRA, vous pouvez configurer une allocation tenant compte de la topologie qui associe les interfaces EFA à leurs GPU topologiquement locaux ou à leurs périphériques Neuron, et partager des périphériques entre les Pods.

Pilote EFA DRA ou plug-in de périphérique EFA

Fonctionnalité pilote EFA DRA Plug-in pour appareil EFA

Version minimale de Kubernetes

1,34

Toutes les versions de EKS-supported Kubernetes

Calcul EKS

Karpenter (capacité statique uniquement), groupes de nœuds gérés, nœuds autogérés

Mode automatique EKS, Karpenter, groupes de nœuds gérés, nœuds autogérés

EKS-optimized AMI

AL 2023, Bottlerocket

AL 2023, Bottlerocket

Publicité de l'appareil

Attributs riches via ResourceSlice des objets, notamment le type de périphérique, la topologie et la localité PCIe

Nombre entier de ressources vpc.amazonaws.com/efa étendues

GPU-EFA affinité

DRA-native prise en compte de la topologie

Prise en compte automatique de la topologie (AMI EKS-optimized AL2023 uniquement)

Neuron-EFA affinité

DRA-native prise en compte de la topologie

Prise en compte automatique de la topologie (AMI EKS-optimized AL2023 uniquement)

Partage d'appareils

Plusieurs Pods peuvent partager le même appareil EFA via des ResourceClaim références partagées

Non pris en charge. Chaque appareil EFA est attribué exclusivement à un Pod.

Création de nœuds EKS avec des interfaces EFA

Lorsque vous créez des nœuds EKS avec des interfaces EFA, les interfaces EFA sont attachées à l'instance lors du provisionnement de l'instance. Vous pouvez personnaliser la configuration EFA par appareil et utiliser des groupes de placement avec EKS Auto Mode, Karpenter, des groupes de nœuds gérés EKS ou des groupes de nœuds autogérés EKS. Avec le mode automatique EKS, vous passez la configuration de chaque interface réseau par le biais du NodeClass dessousadvancedNetworking.networkInterfaces. Avec Karpenter, vous transmettez la configuration de chaque interface réseau via leEC2NodeClass. Avec les groupes de nœuds gérés par EKS ou les nœuds autogérés, vous transmettez la configuration pour chaque interface réseau à l'aide de modèles de lancement.

Lors de l'utilisation eksctl pour le provisionnement de nœuds EKS avec ce efaEnabled paramètre, toutes les interfaces sont configurées avec le type d'interfaceEFA, un groupe de EFA-specific sécurité est créé et le plug-in du périphérique EFA est installé sur le cluster. Si vous devez personnaliser la configuration EFA par appareil lors de l'utilisationeksctl, il est recommandé d'utiliser le support d'eksctl pour les modèles de lancement. https://docs.aws.amazon.com/eks/latest/eksctl/launch-template-support.html

Les exemples suivants montrent comment configurer NodeClass et lancer des modèles avec des interfaces EFA. Ceci est utile pour personnaliser les interfaces utilisées pour le trafic EFA par rapport au IP-based trafic standard. Pour plus d'informations sur le nombre d'interfaces EFA prises en charge par chaque type d'instance et sur la manière de les configurer pour une bande passante réseau maximale, voir Maximiser la bande passante réseau pour les types d' EFA-enabled instance dans le guide de l'utilisateur Amazon EC2.

Mode automatique EKS

En mode EKS Auto, vous configurez les interfaces réseau EFA à l'aide du advancedNetworking.networkInterfaces champ du NodeClass (eks.amazonaws.com/v1). Chaque entrée spécifie un networkCardIndexdeviceIndex, etinterfaceType. Il interfaceType peut s'agir interface d'interfaces réseau standard ou efa-only d'interfaces EFA dédiées au trafic RDMA sans adresse IP attribuée.

Lorsqu'elle networkInterfaces est configurée, les instances lancées par le NodePool référencement NodeClass utilisent cette configuration, que les Pods demandent des vpc.amazonaws.com/efa ressources ou non. Le mode EKS Auto n'associe pas d'adresses IP, de préfixes ou d'ENI supplémentaires après le lancement de l'instance pour les nœuds dotés d'une configuration d'interface réseau statique. Seules les interfaces et les adresses IP configurées au lancement sont disponibles pour les Pods.

Cette fonctionnalité peut être utilisée avec des pools de nœuds à capacité statique afin de maintenir des EFA-ready nœuds préchauffés pour les charges de travail d'entraînement et d'inférence distribuées.

apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: efa-node-class spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "efa-security-group" placementGroupSelector: name: "ml-training-pg" advancedNetworking: networkInterfaces: - deviceIndex: 0 interfaceType: interface networkCardIndex: 0 secondaryIPv4PrefixCount: 1 - networkCardIndex: 0 deviceIndex: 1 interfaceType: efa-only - networkCardIndex: 1 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 2 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 3 deviceIndex: 0 interfaceType: efa-only

Pour obtenir la liste complète des contraintes relatives à la configuration de l'interface réseau statique, consultez Configuration de l'interface réseau statique la NodeClass documentation.

Karpenter

Chaque entrée dans networkInterfaces spécifie un networkCardIndexdeviceIndex, etinterfaceType. Il interfaceType peut s'agir interface d'interfaces réseau standard ou efa-only d'interfaces EFA dédiées au trafic RDMA et auxquelles aucune adresse IP n'est attribuée. Lorsqu'elle networkInterfaces est configurée, les instances lancées par le NodePool référencement NodeClass utilisent cette configuration, que les Pods demandent des vpc.amazonaws.com/efa ressources ou non.

Lorsque vous utilisez Karpenter sans le spécifier networkInterfaces dans votreNodeClass, les instances créées pour les demandes de Pods vpc.amazonaws.com/efa ont toutes les interfaces configurées avec le type EFA d'interface.

La networkInterfaces configuration de EC2NodeClass a été ajoutée dans Karpenter v1.11. L'exemple suivant montre une EC2NodeClass configuration pour une P6-B200 instance avec 1 interface ENA et 8 EFA-only interfaces.

apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: efa-node-class spec: networkInterfaces: - networkCardIndex: 0 deviceIndex: 0 interfaceType: interface - networkCardIndex: 0 deviceIndex: 1 interfaceType: efa-only - networkCardIndex: 1 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 2 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 3 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 4 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 5 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 6 deviceIndex: 0 interfaceType: efa-only - networkCardIndex: 7 deviceIndex: 0 interfaceType: efa-only

Groupes de nœuds gérés par EKS et nœuds autogérés

Avec les groupes de nœuds gérés par EKS ou les nœuds autogérés, vous transmettez la configuration pour chaque interface réseau à l'aide de modèles de lancement.

L'exemple suivant montre un modèle de lancement configuré pour une P6-B200 instance avec 1 interface ENA et 8 EFA-only interfaces. L'interface réseau principale (carte réseau 0, indice de périphérique 0) utilise un interface type standard pour le trafic IP, tandis que les interfaces supplémentaires l'utilisent efa-only pour le trafic RDMA dédié. Ajustez le nombre d'efa-onlyinterfaces en fonction de votre type d'instance. Pour connaître le nombre d'interfaces EFA prises en charge par chaque type d'instance, voir Maximiser la bande passante réseau pour les types d' EFA-enabled instances dans le guide de l'utilisateur Amazon EC2.

security-group-id Remplacez-les par vos valeurs. Le groupe de sécurité doit autoriser tout le trafic entrant et sortant à destination et en provenance de lui-même pour activer la fonctionnalité EFA OS-bypass . Pour plus d'informations, consultez Étape 1 : Préparer un groupe EFA-enabled de sécurité dans le guide de l'utilisateur Amazon EC2.

Important

Ne le spécifiez pas SubnetId dans le modèle de lancement lorsque vous utilisez des groupes de nœuds gérés par EKS. EKS exige que tous les sous-réseaux soient spécifiés via l'CreateNodegroupAPI et rejette les modèles de lancement qui incluent la configuration des sous-réseaux.

{ "LaunchTemplateName": "efa-launch-template", "LaunchTemplateData": { "InstanceType": "p6-b200.48xlarge", "NetworkInterfaces": [ { "NetworkCardIndex": 0, "DeviceIndex": 0, "InterfaceType": "interface", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 0, "DeviceIndex": 1, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 1, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 2, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 3, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 4, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 5, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 6, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] }, { "NetworkCardIndex": 7, "DeviceIndex": 0, "InterfaceType": "efa-only", "Groups": ["security-group-id"] } ] } }

Utilisation d' EKS-optimized AMI avec EFA

Les AMI EKS-optimized AL2023 et toutes les AMI Bottlerocket incluent les composants au niveau de l'hôte requis pour utiliser EFA, en particulier les composants installés par l'installateur aws-efa. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-enable Les AMI EKS AL2023 et Bottlerocket n'incluent pas le pilote EFA DRA ni le plug-in de périphérique EFA, et ceux-ci doivent être installés séparément sur votre cluster avant de déployer des charges de travail.

Conservation de l'allocation d'adresses IP

EFA-enabled instances telles que p5.48xlarge et p6-b200.48xlarge prennent en charge de nombreuses interfaces réseau. Par défaut, Amazon VPC CNI attribue des adresses IP à tous les ENI IP-enabled connectés, ce qui peut consommer un grand nombre d'adresses IP provenant de votre sous-réseau même lorsque ces adresses ne sont pas utilisées activement par les Pods. Sur les instances dotées de dizaines d'interfaces réseau, cela peut rapidement épuiser l'espace IP disponible de votre sous-réseau.

Pour réduire la consommation d'adresses IP sur les EFA-enabled nœuds, configurez vos interfaces réseau afin qu'elles soient utilisées efa-only pour toutes les interfaces, à l'exception de la principale. EFA-only les interfaces sont dédiées au trafic RDMA et n'ont pas d'adresse IP attribuée, elles ne consomment donc pas d'adresses provenant de votre sous-réseau. Pour des exemples de configurations, reportez-vous Karpenter aux sections etGroupes de nœuds gérés par EKS et nœuds autogérés. Pour connaître la disposition d'interface recommandée pour chaque type d'instance, voir Maximiser la bande passante réseau pour les types d' EFA-enabled instances dans le guide de l'utilisateur Amazon EC2.

Outre l'utilisation d'efa-onlyinterfaces, vous pouvez configurer le CNI Amazon VPC pour limiter le nombre d'adresses IP chaudes (pré-allouées) et d'ENI. Par défaut, le VPC CNI préalloue un pool chaud d'ENI et d'adresses IP pour accélérer le démarrage du Pod, mais sur les instances volumineuses, cela peut réserver des centaines d'adresses IP inutilisées. Définissez les variables WARM_IP_TARGET et d'WARM_ENI_TARGETenvironnement sur le aws-node DaemonSet pour contrôler le nombre d'adresses IP et d'ENI disponibles que le CNI gère. Pour plus d'informations sur ces paramètres, consultez les meilleures pratiques CNI d'Amazon VPC.

Note

Les WARM_IP_TARGET paramètres WARM_ENI_TARGET et concernent l'ensemble du cluster et s'appliquent à tous les nœuds gérés par le VPC CNI. Il n'existe actuellement aucun moyen de définir des valeurs différentes pour chaque groupe de nœuds ou type d'instance. Si vous avez besoin d'un contrôle plus précis de ces paramètres, faites-nous part de vos commentaires sur le numéro #1834 de la feuille de route des conteneurs. GitHub

Installez le pilote EFA DRA (DRANET)

Le pilote EFA DRA est intégré au projet DRANET en amont sur GitHub, qui fournit une gestion des périphériques réseau compatible avec le cloud pour Kubernetes DRA. Le pilote EFA DRA et DRANET sont utilisés de manière interchangeable dans cette documentation et font référence au même outil.

Le pilote EFA DRA annonce les périphériques EFA en tant qu'ResourceSliceobjets portant le nom du pilote dra.net et le DeviceClass nomefa.networking.k8s.aws. Le pilote EFA DRA s'exécute DaemonSet sur chaque nœud et découvre automatiquement les périphériques EFA.

Conditions préalables

  • Cluster Amazon EKS exécutant Kubernetes version 1.34 ou ultérieure avec une capacité statique provisionnée par Karpenter, des groupes de nœuds gérés par EKS ou des groupes de nœuds autogérés.

  • Nœuds dotés de types d'instance EFA-enabled Amazon EC2. Pour obtenir la liste des types d'instances pris en charge, consultez la section Types d'instances pris en charge dans le guide de l'utilisateur Amazon EC2.

  • Nœuds avec des composants au niveau de l'hôte installés pour EFA, voir Installation du logiciel EFA pour plus d'informations. Les AMI NVIDIA et Neuron EKS-optimized AL2023 et les AMI Bottlerocket incluent les composants EFA au niveau de l'hôte.

  • Helm installé dans votre environnement de ligne de commande, consultez les instructions de configuration de Helm pour plus d’informations.Déployez des applications avec Helm sur Amazon EKS

  • kubectlconfiguré pour communiquer avec votre cluster, consultez Installer ou mettre à jour kubectl pour plus d'informations.

Procédure

Important

N'installez pas le pilote EFA DRA sur les nœuds sur lesquels le plug-in du périphérique EFA est en cours d'exécution. Les deux mécanismes ne peuvent pas coexister sur le même nœud. Cela peut entraîner un surabonnement silencieux des appareils sous-jacents à plusieurs pods sur le même nœud.

  1. Ajoutez le référentiel de cartes EKS Helm.

    helm repo add eks https://aws.github.io/eks-charts
  2. Mettez à jour votre référentiel Helm local.

    helm repo update
  3. Installez le pilote EFA DRA sur votre cluster à l'aide de Helm. Le pilote EFA DRA détecte automatiquement qu'il s'exécute sur des instances EC2 via le service de métadonnées d'instance (IMDS) et permet la découverte de périphériques EFA. Le pilote EFA DRA est déployé DaemonSet en tant que pilote dans l'kube-systemespace de noms par défaut. Consultez le fichier Helm values.yaml dans le référentiel de graphiques EKS Helm GitHub pour les paramètres configurables.

    helm install aws-dranet eks/aws-dranet --namespace kube-system
  4. Vérifiez que le DRANET DaemonSet fonctionne.

    kubectl get daemonset -n kube-system aws-dranet
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE aws-dranet 2 2 2 2 2 <none> 60s
  5. Vérifiez que le DeviceClass a été créé.

    kubectl get deviceclass
    NAME AGE efa.networking.k8s.aws 60s
  6. Vérifiez que ResourceSlice les objets sont annoncés pour vos nœuds.

    kubectl get resourceslices --field-selector spec.driver=dra.net

    Si vous rencontrez des erreurs lors des étapes ci-dessus, vous pouvez consulter les journaux de DRANET à l'aide de la commande suivante.

    kubectl logs -n kube-system -l app=aws-dranet
  7. Pour demander des périphériques EFA à l'aide du pilote DRA, créez un ResourceClaim ou ResourceClaimTemplate qui fait référence à l'EFA DeviceClass et référencez-le dans les spécifications de votre Pod. L'exemple suivant demande un seul appareil EFA.

    apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-efa-claim spec: spec: devices: requests: - name: efa exactly: deviceClassName: efa.networking.k8s.aws count: 1 --- apiVersion: v1 kind: Pod metadata: name: efa-workload spec: containers: - name: app ... resources: claims: - name: efa-device resourceClaims: - name: efa-device resourceClaimTemplateName: single-efa-claim

Topology-aware EFA et attribution des GPU/Neuron appareils

Le pilote EFA DRA prend en charge l'allocation tenant compte de la topologie qui associe les interfaces EFA à des GPU ou à des périphériques Neuron sur la même racine PCIe. Utilisez la matchAttribute contrainte pour aligner les allocations d'appareils EFA et GPU ou Neuron. Pour utiliser cette fonctionnalité, vous devez également utiliser les pilotes NVIDIA ou Neuron DRA. Pour plus d’informations, consultez Gérer les GPU NVIDIA sur Amazon EKS et Gérer les appareils Neuron sur Amazon EKS.

L'exemple suivant demande 1 interface EFA alignée sur 1 GPU NVIDIA :

apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: aligned-efa-nvidia spec: spec: devices: requests: - name: 1-efa exactly: deviceClassName: efa.networking.k8s.aws count: 1 - name: 1-gpu exactly: deviceClassName: gpu.nvidia.com count: 1 constraints: - requests: ["1-gpu", "1-efa"] matchAttribute: "resource.kubernetes.io/pcieRoot"

L'exemple suivant demande 4 interfaces EFA alignées avec 4 appareils Neuron :

apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: aligned-efa-neuron spec: spec: devices: requests: - name: 4-neurons exactly: deviceClassName: neuron.aws.com count: 4 - name: 4-efas exactly: deviceClassName: efa.networking.k8s.aws count: 4 constraints: - requests: ["4-neurons", "4-efas"] matchAttribute: "resource.aws.com/devicegroup4_id"

Le numéro indiqué dans le nom de devicegroup l'attribut correspond au nombre de périphériques Neuron dans le groupe de topologie connecté. Par exemple, resource.aws.com/devicegroup1_id identifie un seul appareil Neuron, resource.aws.com/devicegroup4_id identifie un groupe de 4 appareils connectés resource.aws.com/devicegroup8_id et resource.aws.com/devicegroup16_id identifie des groupes de 8 et 16 appareils connectés respectivement. Choisissez matchAttribute celui qui correspond au périphérique count de votre demande afin que les appareils Neuron et les interfaces EFA alloués appartiennent au même groupe de topologie connecté. Pour plus d'informations sur ces attributs, consultez la documentation du pilote Neuron DRA.

Vous pouvez l'utiliser allocationMode pour simplifier la façon dont les appareils EFA sont attribués aux accélérateurs GPU ou Neuron alignés. Le allocationMode champ prend en charge deux valeurs : ExactCount (valeur par défaut) demande un nombre spécifique d'appareils spécifié par count et All demande tous les appareils correspondants d'un pool. Par exemple, sur les p5.48xlarge instances, quatre périphériques EFA partagent la même racine PCIe avec un seul GPU. Pour attribuer à ces groupes d'appareils EFA des GPU alignés, même si vous ne connaissez pas le mappage exact des EFA-GPU appareils et le nombre d'appareils EFA alignés, vous pouvez configurer votre option allocationMode: All pour ResourceClaimTemplate les appareils EFA.

apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: aligned-all-efa-one-nvidia spec: spec: devices: requests: - name: all-efas exactly: deviceClassName: efa.networking.k8s.aws allocationMode: All - name: one-gpu exactly: deviceClassName: gpu.nvidia.com allocationMode: ExactCount count: 1 constraints: - requests: ["all-efas", "one-gpu"] matchAttribute: "resource.kubernetes.io/pcieRoot"

Partagez des appareils EFA entre plusieurs Pods

Le pilote EFA DRA prend en charge le partage de périphériques EFA entre plusieurs Pods à l'aide d'unResourceClaim. Contrairement à aResourceClaimTemplate, qui génère une revendication distincte pour chaque Pod, a ResourceClaim est un objet nommé que vous créez indépendamment et que vous faites référence à partir de plusieurs Pods. Tous les Pods qui font référence au même accès ResourceClaim partagent l'accès aux mêmes appareils EFA alloués et sont programmés sur le même nœud que celui où ces appareils sont disponibles.

Pour partager des appareils EFA entre des Pods, créez un ResourceClaim qui demande les appareils EFA, puis faites référence à cette réclamation par son nom dans resourceClaims le champ de chaque Pod en utilisantresourceClaimName. Ils ResourceClaim doivent exister dans le cluster pour que les pods qui le référencent soient créés. Si ResourceClaim aucune référence n'existe, les Pods restent en attente jusqu'à ce que la réclamation soit créée.

L'exemple suivant crée un ResourceClaim qui demande 4 appareils EFA et deux Pods qui partagent l'accès à ces appareils.

  1. Créez la ResourceClaim.

    apiVersion: resource.k8s.io/v1 kind: ResourceClaim metadata: name: shared-efa spec: devices: requests: - name: efa exactly: deviceClassName: efa.networking.k8s.aws count: 4
  2. Faites référence ResourceClaim au nom de chaque Pod qui doit accéder aux appareils EFA. Chaque Pod utilise resourceClaimName pour faire référence à la réclamation existante au lieu deresourceClaimTemplateName.

    apiVersion: v1 kind: Pod metadata: name: training-worker spec: containers: - name: worker image: my-training-image resources: claims: - name: efa-devices resourceClaims: - name: efa-devices resourceClaimName: shared-efa --- apiVersion: v1 kind: Pod metadata: name: training-monitor spec: containers: - name: monitor image: my-monitor-image resources: claims: - name: efa-devices resourceClaims: - name: efa-devices resourceClaimName: shared-efa

Les deux pods font référence à la même chose shared-efa ResourceClaim et sont programmés sur le nœud où ces appareils EFA sont alloués. Le ResourceClaim cycle de vie est indépendant des Pods : il persiste jusqu'à ce que vous le supprimiez, même si tous les Pods qui y font référence sont supprimés.

Installez le plug-in de périphérique EFA Kubernetes

Le plug-in EFA Kubernetes présente les appareils EFA en tant que ressources étendues. vpc.amazonaws.com/efa Vous demandez des appareils EFA dans les demandes et les limites de ressources du conteneur. Pour une présentation complète de la configuration de l'EFA avec des charges de travail de formation, voir. Exécuter un entraînement de machine learning sur Amazon EKS avec Elastic Fabric Adapter

Important

Topology-aligned l'attribution de GPU NVIDIA ou de périphériques Neuron dotés d'interfaces EFA se fait automatiquement lors de l'utilisation des AMI accélérées EKS-optimized AL2023. Cet alignement automatique ne se produit pas lors de l'utilisation d'AMI Bottlerocket ou d' EKS-optimized AMI personnalisées. Si vous avez besoin d'un accélérateur aligné sur la topologie et d'une allocation de périphériques EFA avec Bottlerocket ou des AMI personnalisées, utilisez le pilote EFA DRA et le pilote Neuron DRA correspondant. Pour utiliser le pilote NVIDIA DRA sur Bottlerocket, vous devez d'abord désactiver le plug-in de périphérique NVIDIA fourni avec les variantes NVIDIA de Bottlerocket, qui nécessite la version 1.63.0 ou ultérieure de Bottlerocket. Pour plus d’informations, consultez Topology-aware EFA et attribution des GPU/Neuron appareils et Installez le pilote NVIDIA DRA.

Important

À partir de NVIDIA k8s-device-plugin v0.19.0, l'--mofed-enabledindicateur est défini par défaut surtrue, ce qui oblige le plug-in de périphérique NVIDIA à monter tous les /dev/infiniband/uverbs* périphériques dans des conteneurs demandant des GPU. Cela entre en conflit avec le plug-in de l'appareil EFA, qui devrait être le composant gérant l'allocation des appareils EFA dans/dev/infiniband. Si vous utilisez des groupes de nœuds gérés par EKS ou des nœuds autogérés avec le plug-in de périphérique NVIDIA, vous devez désactiver explicitement MOFED. Pour obtenir des instructions, veuillez consulter Installez le plug-in de périphérique NVIDIA Kubernetes.

Le mode automatique EKS n'active pas MOFED par défaut et n'est pas concerné par ce problème.

Conditions préalables

  • Un cluster Amazon EKS.

  • Nœuds dotés de types d'instances EFA-enabled Amazon EC2. Pour obtenir la liste des types d'instances pris en charge, consultez la section Types d'instances pris en charge dans le guide de l'utilisateur Amazon EC2.

  • Nœuds avec des composants au niveau de l'hôte installés pour EFA, voir Installation du logiciel EFA pour plus d'informations. Les AMI EKS-optimized AL2023 et les AMI Bottlerocket incluent les composants EFA au niveau de l'hôte.

  • Helm installé dans votre environnement de ligne de commande, consultez les instructions de configuration de Helm pour plus d’informations.Déployez des applications avec Helm sur Amazon EKS

  • kubectlconfiguré pour communiquer avec votre cluster, consultez Installer ou mettre à jour kubectl pour plus d'informations.

Procédure

  1. Ajoutez le référentiel de cartes EKS Helm.

    helm repo add eks https://aws.github.io/eks-charts
  2. Mettez à jour votre référentiel Helm local.

    helm repo update
  3. Installez le plug-in de l'appareil EFA.

    helm install efa eks/aws-efa-k8s-device-plugin -n kube-system
  4. Vérifiez que le plug-in de l'appareil EFA DaemonSet est en cours d'exécution.

    kubectl get daemonset -n kube-system efa-aws-efa-k8s-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE efa-aws-efa-k8s-device-plugin 2 2 2 2 2 <none> 60s
  5. Vérifiez que vos nœuds disposent de ressources EFA allouables.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,EFA:.status.allocatable.vpc\.amazonaws\.com/efa"
    NAME EFA ip-192-168-11-225.us-west-2.compute.internal 4 ip-192-168-24-96.us-west-2.compute.internal 4
  6. Pour demander des appareils EFA à l'aide du plug-in de périphérique, spécifiez la vpc.amazonaws.com/efa ressource dans les demandes et les limites de ressources de votre conteneur.

    apiVersion: v1 kind: Pod metadata: name: efa-workload spec: containers: - name: app ... resources: limits: vpc.amazonaws.com/efa: 4 hugepages-2Mi: ... requests: vpc.amazonaws.com/efa: 4 hugepages-2Mi: ...