

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

NVIDIA GPUs è ampiamente utilizzata 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 GPUs 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. Il driver NVIDIA DRA consente l'allocazione flessibile della GPU e la condivisione della GPU tra contenitori. Il plug-in per dispositivi NVIDIA rimane supportato.

## 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 Kubernetes supportate da EKS  | 
|  Karpenter ed EKS Auto Mode  |  Non supportata  |  Supportata  | 
|  Ottimizzato per EKS AMIs  |  AL2023  |  AL2023, Portabottiglie  | 
|  Pubblicità del 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 `ComputeDomain` risorse per comunicazioni sicure con GPU multinodo  |  Non supportata  | 
|  Selezione basata sugli attributi  |  Filtra GPUs per modello, memoria o altri attributi utilizzando le espressioni CEL  |  Non supportata  | 

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

Il driver NVIDIA DRA per la GPUs gestione di due tipi di risorse: e. GPUs 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. [Usa P6e- con GB200 UltraServers Amazon EKS](ml-eks-nvidia-ultraserver.md)

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

### Prerequisiti
<a name="_prerequisites"></a>
+ Un cluster Amazon EKS che esegue Kubernetes versione 1.34 o successiva.
+ Nodi con tipi di istanze GPU NVIDIA (ad esempio istanze or). `P` `G`
+ Nodi con componenti a livello di host installati per NVIDIA. GPUs Quando si utilizza NVIDIA ottimizzato per EKS AL2023 o Bottlerocket, il driver NVIDIA a livello di host AMIs, il driver in modalità utente CUDA e il toolkit contenitore 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 KEP-5004 per gli aggiornamenti.](https://github.com/kubernetes/enhancements/issues/5004)

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/NVIDIA/k8s-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
   ```

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

Per richiedere a NVIDIA di GPUs utilizzare il driver DRA, creane uno `ResourceClaimTemplate` che faccia riferimento a `gpu.nvidia.com` `DeviceClass` e fallo riferimento nelle specifiche del tuo Pod.

L'esempio seguente richiede una singola GPU:

```
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 NVIDIA come risorse estese. GPUs `nvidia.com/gpu` Richiedete GPUs nel container le richieste e i limiti delle risorse.

### Prerequisiti
<a name="_prerequisites_2"></a>
+ Un cluster Amazon EKS.
+ Nodi con tipi di istanze GPU NVIDIA che utilizzano l'AMI NVIDIA ottimizzata per AL2023 EKS. Il Bottlerocket ottimizzato per EKS AMIs include 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 per ulteriori informazioni. [Installazione o aggiornamento di `kubectl`](install-kubectl.md#kubectl-install-update)

### 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
   ```
**Nota**  
Puoi anche installare e gestire il plug-in del dispositivo NVIDIA Kubernetes utilizzando NVIDIA [GPU Operator, che automatizza la gestione di tutti i componenti software NVIDIA](https://github.com/NVIDIA/gpu-operator) necessari per il provisioning. GPUs

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

   ```
   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 nodi siano GPUs 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 NVIDIA GPUs in un Pod
<a name="_request_nvidia_gpus_in_a_pod_2"></a>

Per richiedere NVIDIA GPUs utilizzando il plug-in del dispositivo, specifica la `nvidia.com/gpu` risorsa 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
  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                                                             |
+-----------------------------------------------------------------------------------------+
```