

 **Contribuisci a migliorare questa pagina** 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link **Modifica questa pagina** nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Gestisci i dispositivi GPU NVIDIA su Amazon EKS
<a name="device-management-nvidia"></a>

Le GPU NVIDIA sono ampiamente utilizzate per la formazione sull'apprendimento automatico, l'inferenza e i carichi di lavoro di elaborazione ad alte prestazioni. *Amazon EKS supporta due meccanismi per la gestione dei dispositivi GPU NVIDIA nei cluster EKS: il *driver NVIDIA DRA per GPU e il plug-in per dispositivi NVIDIA Kubernetes*.*

Si consiglia di utilizzare il driver NVIDIA DRA per nuove implementazioni su cluster che eseguono Kubernetes versione 1.34 o successiva con gruppi di nodi gestiti da EKS o gruppi di nodi autogestiti. Il driver NVIDIA DRA consente l'allocazione flessibile della GPU e la condivisione della GPU tra contenitori.

Il driver NVIDIA DRA non è supportato con Karpenter o EKS Auto Mode. Usa il [plug-in per dispositivi NVIDIA](#nvidia-device-plugin) con Karpenter ed EKS Auto Mode. Il plug-in per dispositivi NVIDIA rimane supportato anche per i gruppi di nodi gestiti da EKS e i nodi autogestiti.

## Driver NVIDIA DRA e plug-in per dispositivi NVIDIA
<a name="_nvidia_dra_driver_vs_nvidia_device_plugin"></a>


| Funzionalità | Driver NVIDIA DRA | Plugin per dispositivi NVIDIA | 
| --- | --- | --- | 
| Versione minima di Kubernetes | 1.34 | Tutte le versioni di EKS-supported Kubernetes | 
| EKS Compute | Gruppi di nodi gestiti, nodi autogestiti | EKS Auto Mode, Karpenter, gruppi di nodi gestiti, nodi autogestiti | 
| EKS-optimized AMI | AL2023 (NVIDIA) | AL2023 (NVIDIA), porta bottiglia | 
| Pubblicità sul dispositivo | Attributi avanzati tramite `ResourceSlice` oggetti tra cui modello di GPU, memoria, versione del driver e topologia | Numero intero di risorse estese `nvidia.com/gpu` | 
| Condivisione GPU | Più contenitori nello stesso Pod possono condividere una GPU tramite riferimenti condivisi `ResourceClaim` | Non supportato. Ogni GPU è allocata esclusivamente a un contenitore. | 
| ComputeDomains | Gestisce Multi-Node NVLink (MNNVL) tramite risorse per comunicazioni GPU sicure a più nodi `ComputeDomain` | Non supportata | 
| Attribute-based selezione | Filtra le GPU per modello, memoria o altri attributi utilizzando le espressioni CEL | Non supportata | 
| Topology-aware Allocazione EFA | DRA-native conoscenza della topologia | Riconoscimento automatico della topologia (solo AMI AL2023EKS-optimized ) | 

## Installa il driver NVIDIA DRA
<a name="nvidia-dra-driver"></a>

Il driver NVIDIA DRA per GPU gestisce due tipi di risorse: GPU e. ComputeDomains Esegue due plugin DRA kubelet: e. `gpu-kubelet-plugin` `compute-domain-kubelet-plugin` Ciascuno può essere abilitato o disabilitato separatamente durante l'installazione. Questa guida si concentra sull'allocazione delle GPU. Per l'utilizzo ComputeDomains, vedere. [Utilizzo P6e-GB200 UltraServers con Amazon EKS](ml-eks-nvidia-ultraserver.md)

### Prerequisiti
<a name="_prerequisites"></a>
+ Un cluster Amazon EKS che esegue Kubernetes versione 1.34 o successiva con gruppi di nodi gestiti da EKS o gruppi di nodi autogestiti.
+ Nodi con tipi di istanze GPU NVIDIA (ad esempio istanze or). `P` `G`
+ Nodi con componenti a livello di host installati per GPU NVIDIA. Quando si utilizzano le AMI NVIDIA EKS-optimized AL2023 o Bottlerocket, il driver NVIDIA a livello di host, il driver in modalità utente CUDA e il toolkit container sono preinstallati.
+ Helm è installato nell’ambiente a riga di comando, consulta le [istruzioni di configurazione di Helm](helm.md) per ulteriori informazioni.
+  `kubectl`configurato per comunicare con il cluster, consulta per ulteriori informazioni. [Installazione o aggiornamento di `kubectl`](install-kubectl.md#kubectl-install-update)

### Procedura
<a name="_procedure"></a>

**Importante**  
Quando si utilizza il driver NVIDIA DRA per la gestione dei dispositivi GPU, non può essere distribuito insieme al plug-in del dispositivo NVIDIA sullo stesso nodo. Vedi upstream Kubernetes per gli aggiornamenti. [KEP-5004](https://github.com/kubernetes/enhancements/issues/5004)

**Importante**  
L'utilizzo del driver NVIDIA DRA con Bottlerocket non è attualmente supportato.

1. Aggiungi l'archivio cartografico Helm del driver NVIDIA DRA.

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

1. Aggiorna il tuo repository Helm locale.

   ```
   helm repo update
   ```

1. Scarica l'ultima versione del driver NVIDIA DRA.

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

1. Installa il driver 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'
   ```

   Per opzioni di configurazione avanzate, consulta la tabella Helm del [driver NVIDIA DRA](https://github.com/kubernetes-sigs/nvidia-dra-driver-gpu/blob/main/deployments/helm/nvidia-dra-driver-gpu/values.yaml).

1. Verificare che i driver pod DRA siano in funzione.

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

1. Verificate che gli `DeviceClass` oggetti siano stati creati.

   ```
   kubectl get deviceclass
   ```

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

1. Verifica che `ResourceSlice` gli oggetti siano pubblicati per i tuoi nodi GPU.

   ```
   kubectl get resourceslice
   ```

   Per richiedere le GPU NVIDIA utilizzando il driver DRA, crea un codice `ResourceClaimTemplate` che faccia riferimento a `gpu.nvidia.com` `DeviceClass` e fallo riferimento nelle specifiche del tuo Pod. L'esempio seguente richiede una singola GPU. Vedi i passaggi [Topology-aware EFA e GPU/Neuron allocazione dei dispositivi](device-management-efa.md#efa-dra-topology-aware) per allocare le GPU NVIDIA con interfacce EFA allineate alla topologia.

   ```
   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"
   ```

## Installa il plug-in per dispositivi NVIDIA Kubernetes
<a name="nvidia-device-plugin"></a>

Il plug-in per dispositivi NVIDIA Kubernetes pubblicizza le GPU NVIDIA come risorse estese. `nvidia.com/gpu` Richiedete le GPU nelle richieste e nei limiti delle risorse dei container.

### Prerequisiti
<a name="_prerequisites_2"></a>
+ Un cluster Amazon EKS.
+ Nodi con tipi di istanze GPU NVIDIA che utilizzano l'AMI NVIDIA EKS-optimized AL2023. Le AMI EKS-optimized Bottlerocket includono il plug-in per dispositivi NVIDIA e non è richiesta alcuna installazione separata.
+ Helm è installato nell’ambiente a riga di comando, consulta le [istruzioni di configurazione di Helm](helm.md) per ulteriori informazioni.
+  `kubectl`configurato per comunicare con il cluster, vedi [Installazione o aggiornamento di `kubectl`](install-kubectl.md#kubectl-install-update) per ulteriori informazioni.

### Procedura
<a name="_procedure_2"></a>

1. Aggiungi il repository Helm chart del plug-in per dispositivi NVIDIA.

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

1. Aggiorna il tuo repository Helm locale.

   ```
   helm repo update
   ```

1. Installa il plug-in per dispositivi NVIDIA Kubernetes.

   ```
   helm install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true
   ```
**Disattiva MOFED sui nodi con dispositivi EFA**  
A partire dalla `k8s-device-plugin` v0.19.0, il valore predefinito del flag è. `--mofed-enabled` `true` Ciò fa sì che il plug-in per dispositivi NVIDIA monti tutti i `/dev/infiniband/uverbs*` dispositivi in contenitori che richiedono GPU (). `nvidia.com/gpu` Ciò è in conflitto con il plug-in del dispositivo AWS EFA, che gestisce il montaggio dei dispositivi. `uverbs` I carichi di lavoro che richiedono meno di tutti i dispositivi EFA su un nodo ne risentono perché il plug-in per dispositivi NVIDIA supporta tutti i dispositivi per impostazione predefinita. `uverbs`  
Se i tuoi nodi dispongono di dispositivi EFA, disabilita esplicitamente MOFED durante l'installazione del plug-in per dispositivi NVIDIA:  

   ```
   helm upgrade --install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true \
       --set mofedEnabled=false
   ```
Se gestisci il plug-in del dispositivo NVIDIA tramite [NVIDIA GPU Operator, disabilita](https://github.com/NVIDIA/gpu-operator) MOFED utilizzando il campo: `devicePlugin.env`  

   ```
   helm upgrade --install gpu-operator nvidia/gpu-operator \
       --namespace gpu-operator \
       --set 'devicePlugin.env[0].name=MOFED_ENABLED' \
       --set 'devicePlugin.env[0].value=false'
   ```
Per ulteriori informazioni, consulta [NVIDIA](https://github.com/NVIDIA/k8s-device-plugin/issues/1692) k8s-device-plugin issue \#1692.
**Nota**  
Puoi anche installare e gestire il plug-in per dispositivi NVIDIA Kubernetes utilizzando NVIDIA [GPU Operator, che automatizza la gestione di tutti i componenti software NVIDIA necessari per il provisioning delle GPU](https://github.com/NVIDIA/gpu-operator).

1. Verifica DaemonSet che il plug-in del dispositivo NVIDIA sia in esecuzione.

   ```
   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. Verifica che i tuoi nodi abbiano GPU allocabili.

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

   Di seguito viene riportato un output di esempio.

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

### Richiedi le GPU NVIDIA in un Pod
<a name="_request_nvidia_gpus_in_a_pod"></a>

Per richiedere le GPU NVIDIA utilizzando il plug-in del dispositivo, specifica la `nvidia.com/gpu` risorsa nelle richieste e nei limiti delle risorse del contenitore.

```
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"
```

Per eseguire questo test, applica il manifesto e visualizza i log:

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

Di seguito viene riportato un output di esempio.

```
+-----------------------------------------------------------------------------------------+
| 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                                                             |
+-----------------------------------------------------------------------------------------+
```