

 **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.

# Utilisez le pilote NVIDIA DRA ou le plug-in de périphérique sur Amazon EKS
<a name="device-management-nvidia-dra-device-plugin"></a>

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. *

Nous vous recommandons d'utiliser le pilote NVIDIA DRA pour les nouveaux déploiements avec les versions 1.34 et ultérieures de Kubernetes lorsque vous utilisez le provisionnement de capacité [ statique ](https://karpenter.sh/docs/concepts/nodepools/#static-nodepool) dans Karpenter, des groupes de nœuds gérés par EKS ou des nœuds autogérés. Le pilote NVIDIA DRA n'est actuellement pas pris en charge avec le mode automatique EKS. Utilisez le plug-in de périphérique [ NVIDIA ](#eks-nvidia-device-plugin) avec le mode automatique EKS ou avec Karpenter lorsque vous utilisez le provisionnement dynamique des capacités. 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.

Si vous utilisez des fonctionnalités de partage de GPU telles que les GPU multi-instances (MIG) ou le découpage en temps, nous vous recommandons d'utiliser une configuration statique avec le pilote DRA ou le plug-in de périphérique NVIDIA. Le MIG dynamique et le découpage temporel sont en état alpha dans le pilote NVIDIA DRA. Consultez les versions du pilote [ NVIDIA DRA GitHub pour ](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/releases) les dernières mises à jour.

## Pilote NVIDIA DRA ou plug-in de périphérique NVIDIA
<a name="eks-nvidia-dra-vs-plugin"></a>


| Fonctionnalité | pilote NVIDIA DRA | Plug-in pour appareil NVIDIA | 
| --- | --- | --- | 
| 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 (NVIDIA), Bottlerocket | AL 2023 (NVIDIA), Bottlerocket | 
| Publicité de l'appareil | Attributs riches via `ResourceSlice` des objets, notamment le modèle du GPU, la mémoire, la version du pilote et la topologie | Nombre entier de ressources `nvidia.com/gpu` étendues | 
| Partage GPU | MIG dynamique (Alpha), MPS, découpage temporel | (GA) MIG statique, MPS, découpage temporel | 
| ComputeDomains | Gère Multi-Node NVLink (MNNVL) via `ComputeDomain` des ressources pour une communication GPU multi-nœuds sécurisée | 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 prise en compte de la topologie | Prise en compte automatique de la topologie (AMI EKS-optimized AL2023 uniquement) | 

## Installez le pilote NVIDIA DRA
<a name="eks-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 des GPU. Pour l'utilisation ComputeDomains, voir[À utiliser P6e-GB200 UltraServers avec Amazon EKS](ml-eks-nvidia-ultraserver.md).

### Conditions préalables
<a name="_prerequisites"></a>
+ 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'instances GPU NVIDIA (tels que `P` des `G` instances).
+ 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 en mode utilisateur CUDA et la boîte à outils du 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, consultez [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, ne le déployez pas en même temps que le plug-in de périphérique NVIDIA 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.

**Désactivez le plug-in de périphérique NVIDIA intégré sur Bottlerocket**  
Les variantes NVIDIA de EKS-optimized Bottlerocket incluent le plug-in de périphérique NVIDIA et l'activent par défaut. Le pilote DRA ne peut pas fonctionner en même temps que le plug-in du périphérique sur le même nœud. Avant d'utiliser le pilote DRA, désactivez le plug-in de périphérique intégré sur vos nœuds GPU Bottlerocket. Définissez sur `settings.kubelet-device-plugins.nvidia.enabled` `false` les données utilisateur du nœud Bottlerocket.  

```
[settings.kubelet-device-plugins.nvidia]
enabled = false
```
Le `settings.kubelet-device-plugins.nvidia.enabled` réglage est disponible dans les versions 1.63.0 et ultérieures de Bottlerocket. Sur les versions précédentes, le plug-in intégré à l'appareil NVIDIA ne pouvait pas être désactivé. Pour plus d'informations, consultez [ bottlerocket- os/bottlerocket pull request \#4856 sur. ](https://github.com/bottlerocket-os/bottlerocket/pull/4856) GitHub

1. Installez le pilote NVIDIA DRA directement depuis le registre OCI Kubernetes SIG. Pour connaître les versions disponibles, consultez les versions du pilote [ NVIDIA DRA ](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/releases) sur GitHub.

   ```
   helm install dra-driver-nvidia-gpu \
       oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu \
       --version {{0.4.1}} \
       --create-namespace \
       --namespace nvidia \
       --set resources.computeDomains.enabled=false \
       --set gpuResourcesEnabledOverride=true
   ```

   Pour les options de configuration avancées, consultez les valeurs du graphique Helm du pilote [ NVIDIA DRA ](https://dra-driver-nvidia-gpu.sigs.k8s.io/docs/reference/helm-values/) sur le site Web de Kubernetes SIG. Pour voir les valeurs disponibles pour une version de graphique spécifique, exécutez`helm show values oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu --version 0.4.1`.

1. (Facultatif) Pour utiliser le découpage temporel dans le pilote DRA, ajoutez le `TimeSlicingSettings` Feature Gate à la `helm install` commande de l'étape précédente. Il s'agit d'une fonctionnalité alpha désactivée par défaut. Pour de plus amples informations, veuillez consulter [Utilisez le découpage temporel du GPU avec le pilote NVIDIA DRA](device-management-nvidia-time-slicing.md#eks-time-slicing-dra).

   ```
   --set featureGates.TimeSlicingSettings=true
   ```

1. (Facultatif) Pour utiliser le MIG dynamique via le pilote DRA, ajoutez le `DynamicMIG` Feature Gate à la `helm install` commande de l'étape précédente. Il s'agit d'une fonctionnalité alpha désactivée par défaut. Vous ne pouvez pas combiner la porte `DynamicMIG` caractéristique avec la porte `PassthroughSupport``NVMLDeviceHealthCheck`, ou la porte `MPSSupport` caractéristique. Pour de plus amples informations, veuillez consulter [Utiliser MIG avec le pilote NVIDIA DRA](device-management-nvidia-mig.md#eks-mig-dra-driver).

   ```
   --set featureGates.DynamicMIG=true
   ```

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

   ```
   kubectl get pods -n nvidia
   ```

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 fait référence à celui-ci `gpu.nvidia.com` `DeviceClass` et référencez-le dans les spécifications de votre Pod. L'exemple suivant demande un seul GPU. Consultez les étapes à suivre [Topology-aware EFA et attribution des GPU/Neuron appareils](device-management-efa.md#efa-dra-topology-aware) 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: gpu-demo
       image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
       command: ["/bin/sh", "-c"]
       args: ["nvidia-smi && tail -f /dev/null"]
       resources:
         claims:
         - name: gpu
     resourceClaims:
     - name: gpu
       resourceClaimTemplateName: single-gpu
     tolerations:
     - key: "nvidia.com/gpu"
       operator: "Exists"
       effect: "NoSchedule"
   ```

## Installez le plug-in de périphérique NVIDIA Kubernetes
<a name="eks-nvidia-device-plugin"></a>

Le plug-in pour appareils NVIDIA Kubernetes présente les GPU NVIDIA en tant que ressources étendues. `nvidia.com/gpu` Vous demandez des GPU dans les requêtes et les limites de ressources du conteneur.

### Conditions préalables
<a name="_prerequisites_2"></a>
+ Un cluster Amazon EKS.
+ Nœuds dotés de types d'instances GPU NVIDIA (tels que `P` des `G` instances).
+ Nœuds dotés de types d'instances GPU NVIDIA utilisant l'AMI NVIDIA EKS-optimized AL2023. Les AMI EKS-optimized Bottlerocket incluent le plug-in de périphérique NVIDIA. Il n'est pas nécessaire de l'installer séparément.
+ 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 en mode utilisateur CUDA et la boîte à outils du 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, consultez [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 Helm Chart du plug-in de périphérique NVIDIA.

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

1. Mettez à jour votre référentiel Helm local.

   ```
   helm repo update
   ```

1. Installez le plug-in de périphérique NVIDIA Kubernetes.

   ```
   helm install nvdp nvdp/nvidia-device-plugin \
       --create-namespace \
       --namespace nvidia
   ```
**Facultatif : activez la découverte des fonctionnalités du GPU (GFD)**  
Le plug-in de l'appareil annonce des ressources `nvidia.com/gpu` étendues et planifie lui-même les GPU Pods. Sur l'AMI NVIDIA EKS-optimized AL2023, l'étiquette du `nvidia.com/gpu.present=true` nœud est déjà appliquée au démarrage. La découverte des fonctionnalités du GPU (GFD) n'est donc pas requise pour la planification de base du GPU. `nodeadm`  
Activez GFD avec `--set gfd.enabled=true` si vous souhaitez que le nœud soit étiqueté avec des attributs GPU détaillés`nvidia.com/gpu.product`, tels que,,, `nvidia.com/gpu.memory``nvidia.com/gpu.count`, des étiquettes de profil MIG et des versions. driver/CUDA Grâce à ces étiquettes, vous pouvez cibler des types de GPU spécifiques `nodeSelector` ou une affinité de nœud (par exemple, planifier une charge de travail uniquement sur des GPU A10G ou sur un profil MIG particulier). Les configurations de partage de GPU, telles que le time-slicing et le MIG, utilisent également ces étiquettes. Si vous n'avez pas besoin d'une sélection de nœuds basée sur les attributs ou d'un partage GPU, vous pouvez omettre l'indicateur.  

   ```
   helm install nvdp nvdp/nvidia-device-plugin \
       --create-namespace \
       --namespace nvidia \
       --set gfd.enabled=true
   ```
**Activez GDRCopy si vos charges de travail l'utilisent**  
 `k8s-device-plugin`Les versions 0.19.0 à 0.19.2 activaient les fonctionnalités GDRCopy et MOFED par défaut. Cette activation par défaut a été rétablie dans `k8s-device-plugin` la version 0.19.3. À la suite du retour, GDRCopy (`gdrdrv`) ne peut plus être activé par conteneur avec la variable d'`NVIDIA_GDRCOPY=enabled`environnement dans une spécification de pod, cette variable est désormais ignorée.  
Si vos charges de travail utilisent GDRCopy (copie GPUdirect RDMA), vous devez l'activer sur le plug-in de l'appareil au moment de l'installation en définissant : `gdrcopyEnabled=true`  

   ```
   helm upgrade --install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gdrcopyEnabled=true
   ```
(`--set gfd.enabled=true`Ajoutez-en également si vous souhaitez également des étiquettes GPU Feature Discovery, comme décrit précédemment.)  
Si vous gérez le plug-in du périphérique NVIDIA via l'opérateur GPU [ NVIDIA ](https://github.com/NVIDIA/gpu-operator) activé GitHub, l'opérateur définit dynamiquement le `GDRCOPY_ENABLED=true` moment où le module `gdrdrv` du noyau est chargé sur le nœud.  
Pour plus d'informations, consultez le numéro \#1692 du [ plugin NVIDIA k8s-device-plugin sur. ](https://github.com/NVIDIA/k8s-device-plugin/issues/1692) GitHub
**Note**  
Vous pouvez également installer et gérer le plug-in de périphérique NVIDIA Kubernetes à l'aide de l'opérateur GPU [ NVIDIA ](https://github.com/NVIDIA/gpu-operator) activé GitHub, qui automatise la gestion de tous les composants logiciels NVIDIA nécessaires au provisionnement des GPU.

1. Vérifiez que le plug-in du périphérique 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 l'appareil, spécifiez la `nvidia.com/gpu` ressource dans les demandes et les limites de ressources 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                                                             |
+-----------------------------------------------------------------------------------------+
```