

 **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 sur** 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érez les appareils GPU NVIDIA sur Amazon EKS
<a name="device-management-nvidia"></a>

Les GPU NVIDIA sont largement utilisés pour la formation au machine learning, l'inférence et les charges de travail informatiques hautes performances. Amazon EKS prend en charge deux mécanismes pour gérer les périphériques GPU NVIDIA dans vos clusters EKS : le *pilote NVIDIA DRA pour les GPU* et le plug-in de périphérique *NVIDIA Kubernetes*.

Il est recommandé d'utiliser le pilote NVIDIA DRA pour les nouveaux déploiements sur des clusters exécutant Kubernetes version 1.34 ou ultérieure avec des groupes de nœuds gérés par EKS ou des groupes de nœuds autogérés. Le pilote NVIDIA DRA permet une allocation et un partage de GPU flexibles entre les conteneurs.

Le pilote NVIDIA DRA n'est pas compatible avec le mode automatique Karpenter ou EKS. Utilisez le [plug-in pour appareil NVIDIA](#nvidia-device-plugin) avec Karpenter et le mode automatique EKS. Le plug-in de périphérique NVIDIA reste également pris en charge pour les groupes de nœuds gérés par EKS et les nœuds autogérés.

## Pilote NVIDIA DRA et plug-in de périphérique NVIDIA
<a name="_nvidia_dra_driver_vs_nvidia_device_plugin"></a>


| Capacité | pilote NVIDIA DRA | Plug-in pour appareil NVIDIA | 
| --- | --- | --- | 
| Version minimale de Kubernetes | 1,34 | Toutes les versions de EKS-supported Kubernetes | 
| Calcul EKS | 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 | AL2023 (NVIDIA) | AL2023 (NVIDIA), Bottlerocket | 
| Publicité sur les appareils | Des attributs riches via `ResourceSlice` des objets tels que le modèle de GPU, la mémoire, la version du pilote et la topologie | Nombre entier de ressources `nvidia.com/gpu` étendues | 
| Partage GPU | Plusieurs conteneurs dans le même Pod peuvent partager un GPU via des `ResourceClaim` références partagées | Non pris en charge. Chaque GPU est exclusivement alloué à un conteneur. | 
| ComputeDomains | Gère Multi-Node le NVLink (MNNVL) via `ComputeDomain` des ressources pour une communication GPU sécurisée à nœuds multiples | Non pris en charge | 
| Attribute-based sélection | Filtrez les GPU par modèle, mémoire ou autres attributs à l'aide d'expressions CEL | Non pris en charge | 
| Topology-aware Allocation EFA | DRA-native connaissance de la topologie | Prise en compte automatique de la topologie (AMI AL2023 uniquementEKS-optimized ) | 

## Installez le pilote NVIDIA DRA
<a name="nvidia-dra-driver"></a>

Le pilote NVIDIA DRA pour GPU gère deux types de ressources : les GPU et. ComputeDomains Il exécute deux plugins DRA kubelet : `gpu-kubelet-plugin` et. `compute-domain-kubelet-plugin` Chacun peut être activé ou désactivé séparément lors de l'installation. Ce guide se concentre sur l'allocation du GPU. Pour l'utilisation ComputeDomains, voir[Utilisation P6e-GB200 UltraServers avec Amazon EKS](ml-eks-nvidia-ultraserver.md).

### Conditions préalables
<a name="_prerequisites"></a>
+ Un cluster Amazon EKS exécutant Kubernetes version 1.34 ou ultérieure avec 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'instances GPU NVIDIA (tels que `G` des instances `P` ou).
+ Nœuds dotés de composants au niveau de l'hôte installés pour les GPU NVIDIA. Lorsque vous utilisez les AMI NVIDIA EKS-optimized AL2023 ou Bottlerocket, le pilote NVIDIA au niveau de l'hôte, le pilote du mode utilisateur CUDA et le kit d'outils de conteneur sont préinstallés.
+ 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](helm.md)
+  `kubectl`configuré pour communiquer avec votre cluster, voir [Installer ou mettre à jour `kubectl`](install-kubectl.md#kubectl-install-update) pour plus d'informations.

### Procédure
<a name="_procedure"></a>

**Important**  
Lorsque vous utilisez le pilote NVIDIA DRA pour la gestion des périphériques GPU, il ne peut pas être déployé avec le plug-in de périphérique NVIDIA sur le même nœud. Consultez Kubernetes [KEP-5004](https://github.com/kubernetes/enhancements/issues/5004)en amont pour les mises à jour.

**Important**  
L'utilisation du pilote NVIDIA DRA avec Bottlerocket n'est actuellement pas prise en charge.

1. Ajoutez le référentiel graphique Helm du pilote NVIDIA DRA.

   ```
   helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
   ```

1. Mettez à jour votre dépôt Helm local.

   ```
   helm repo update
   ```

1. Procurez-vous la dernière version du pilote NVIDIA DRA.

   ```
   helm search repo nvidia/nvidia-dra
   ```

1. Installez le pilote NVIDIA DRA.

   ```
   helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \
       --create-namespace \
       --namespace nvidia-dra-driver-gpu \
       --set resources.computeDomains.enabled=false \
       --set 'gpuResourcesEnabledOverride=true'
   ```

   Pour les options de configuration avancées, consultez le [tableau Helm du pilote NVIDIA DRA](https://github.com/kubernetes-sigs/nvidia-dra-driver-gpu/blob/main/deployments/helm/nvidia-dra-driver-gpu/values.yaml).

1. Vérifiez que les modules de pilotes DRA sont en cours d'exécution.

   ```
   kubectl get pods -n nvidia-dra-driver-gpu
   ```

1. Vérifiez que les `DeviceClass` objets ont été créés.

   ```
   kubectl get deviceclass
   ```

   ```
   NAME            AGE
   gpu.nvidia.com  60s
   ```

1. Vérifiez que `ResourceSlice` les objets sont publiés pour vos nœuds GPU.

   ```
   kubectl get resourceslice
   ```

   Pour demander des GPU NVIDIA à l'aide du pilote DRA, créez-en un `ResourceClaimTemplate` qui y fait référence `gpu.nvidia.com` `DeviceClass` et le référencez dans les spécifications de votre Pod. L'exemple suivant demande un seul GPU. Consultez [Topology-aware EFA et allocation GPU/Neuron d'appareils](device-management-efa.md#efa-dra-topology-aware) les étapes à suivre pour allouer des GPU NVIDIA avec des interfaces EFA alignées sur la topologie.

   ```
   apiVersion: resource.k8s.io/v1
   kind: ResourceClaimTemplate
   metadata:
     name: single-gpu
   spec:
     spec:
       devices:
         requests:
         - name: gpu
           exactly:
             deviceClassName: gpu.nvidia.com
             count: 1
   ---
   apiVersion: v1
   kind: Pod
   metadata:
     name: gpu-workload
   spec:
     containers:
     - name: app
       ...
       resources:
         claims:
         - name: gpu
     resourceClaims:
     - name: gpu
       resourceClaimTemplateName: single-gpu
     tolerations:
     - key: "nvidia.com/gpu"
       operator: "Exists"
       effect: "NoSchedule"
   ```

## Installez le plugin pour appareil NVIDIA Kubernetes
<a name="nvidia-device-plugin"></a>

Le plugin pour appareil NVIDIA Kubernetes présente les GPU NVIDIA comme des ressources étendues. `nvidia.com/gpu` Vous demandez des GPU dans les demandes de ressources et les limites des conteneurs.

### Conditions préalables
<a name="_prerequisites_2"></a>
+ Un cluster Amazon EKS.
+ Nœuds dotés de types d'instances de GPU NVIDIA utilisant l'AMI NVIDIA EKS-optimized AL2023. Les AMI EKS-optimized Bottlerocket incluent le plug-in de périphérique NVIDIA et aucune installation séparée n'est requise.
+ 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](helm.md)
+  `kubectl`configuré pour communiquer avec votre cluster, voir [Installer ou mettre à jour `kubectl`](install-kubectl.md#kubectl-install-update) pour plus d'informations.

### Procédure
<a name="_procedure_2"></a>

1. Ajoutez le référentiel de diagrammes Helm du plugin pour appareils NVIDIA.

   ```
   helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
   ```

1. Mettez à jour votre dépôt Helm local.

   ```
   helm repo update
   ```

1. Installez le plug-in pour appareil NVIDIA Kubernetes.

   ```
   helm install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true
   ```
**Désactiver le MOFED sur les nœuds dotés d'appareils EFA**  
À partir de la `k8s-device-plugin` version 0.19.0, le `--mofed-enabled` drapeau est défini par défaut sur. `true` Cela oblige le plug-in de périphérique NVIDIA à monter tous les `/dev/infiniband/uverbs*` appareils dans des conteneurs demandant des GPU (`nvidia.com/gpu`). Cela entre en conflit avec le plug-in AWS EFA, qui gère le montage des `uverbs` appareils. Les charges de travail demandant un nombre inférieur à celui de tous les appareils EFA d'un nœud sont affectées, car le plug-in d'appareil NVIDIA revendique tous les `uverbs` appareils par défaut.  
Si vos nœuds sont équipés d'appareils EFA, désactivez explicitement le MOFED lors de l'installation du plug-in pour appareil NVIDIA :  

   ```
   helm upgrade --install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true \
       --set mofedEnabled=false
   ```
Si vous gérez le plug-in de l'appareil NVIDIA via l'[opérateur GPU NVIDIA](https://github.com/NVIDIA/gpu-operator), désactivez MOFED à l'aide du `devicePlugin.env` champ :  

   ```
   helm upgrade --install gpu-operator nvidia/gpu-operator \
       --namespace gpu-operator \
       --set 'devicePlugin.env[0].name=MOFED_ENABLED' \
       --set 'devicePlugin.env[0].value=false'
   ```
Pour plus d'informations, consultez le numéro \#1692 du [plugin NVIDIA k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin/issues/1692).
**Note**  
Vous pouvez également installer et gérer le plug-in pour appareil NVIDIA Kubernetes à l'aide de l'[opérateur GPU NVIDIA](https://github.com/NVIDIA/gpu-operator), qui automatise la gestion de tous les composants logiciels NVIDIA nécessaires au provisionnement des GPU.

1. Vérifiez que le plug-in de l'appareil NVIDIA DaemonSet est en cours d'exécution.

   ```
   kubectl get ds -n nvidia nvdp-nvidia-device-plugin
   ```

   ```
   NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
   nvdp-nvidia-device-plugin   2         2         2       2            2           <none>          60s
   ```

1. Vérifiez que vos nœuds disposent de GPU allouables.

   ```
   kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
   ```

   L'exemple qui suit illustre un résultat.

   ```
   NAME                                           GPU
   ip-192-168-11-225.us-west-2.compute.internal   1
   ip-192-168-24-96.us-west-2.compute.internal    1
   ```

### Demandez des GPU NVIDIA dans un pod
<a name="_request_nvidia_gpus_in_a_pod"></a>

Pour demander des GPU NVIDIA à l'aide du plug-in de périphérique, spécifiez la `nvidia.com/gpu` ressource dans les demandes de ressources et les limites de votre conteneur.

```
apiVersion: v1
kind: Pod
metadata:
  name: nvidia-smi
spec:
  restartPolicy: OnFailure
  containers:
  - name: gpu-demo
    image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
    command: ["/bin/sh", "-c"]
    args: ["nvidia-smi && tail -f /dev/null"]
    resources:
      limits:
        nvidia.com/gpu: 1
      requests:
        nvidia.com/gpu: 1
  tolerations:
  - key: "nvidia.com/gpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
```

Pour exécuter ce test, appliquez le manifeste et consultez les journaux :

```
kubectl apply -f nvidia-smi.yaml
kubectl logs nvidia-smi
```

L'exemple qui suit illustre un résultat.

```
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI XXX.XXX.XX            Driver Version: XXX.XXX.XX     CUDA Version: XX.X      |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      On  |   00000000:31:00.0 Off |                    0 |
| N/A   27C    P8             11W /   72W |       0MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
```