

 **Bantu tingkatkan halaman ini** 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih **Edit halaman ini pada GitHub** tautan yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kelola perangkat GPU NVIDIA di Amazon EKS
<a name="device-management-nvidia"></a>

GPU NVIDIA banyak digunakan untuk pelatihan pembelajaran mesin, inferensi, dan beban kerja komputasi kinerja tinggi. Amazon EKS mendukung dua mekanisme untuk mengelola perangkat GPU NVIDIA di kluster EKS Anda: *driver NVIDIA DRA untuk GPU* dan plugin perangkat *NVIDIA Kubernetes*.

Disarankan untuk menggunakan driver NVIDIA DRA untuk penerapan baru pada cluster yang menjalankan Kubernetes versi 1.34 atau yang lebih baru dengan grup node terkelola EKS atau grup node yang dikelola sendiri. Driver NVIDIA DRA memungkinkan alokasi GPU yang fleksibel dan berbagi GPU antar kontainer.

Driver NVIDIA DRA tidak didukung dengan Karpenter atau Mode Otomatis EKS. Gunakan [plugin perangkat NVIDIA](#nvidia-device-plugin) dengan Karpenter dan Mode Otomatis EKS. Plugin perangkat NVIDIA juga tetap didukung untuk grup node terkelola EKS dan node yang dikelola sendiri.

## Driver NVIDIA DRA vs plugin perangkat NVIDIA
<a name="_nvidia_dra_driver_vs_nvidia_device_plugin"></a>


| Kemampuan | Pengemudi NVIDIA DRA | Plugin perangkat NVIDIA | 
| --- | --- | --- | 
| Versi Kubernetes minimum | 1,34 | Semua versi EKS-supported Kubernetes | 
| EKS Komputasi | Grup node terkelola, node yang dikelola sendiri | Mode Otomatis EKS, Karpenter, grup simpul terkelola, node yang dikelola sendiri | 
| EKS-optimized AMI | AL2023 (NVIDIA) | AL2023 (NVIDIA), Bottlerocket | 
| Iklan perangkat | Atribut kaya melalui `ResourceSlice` objek termasuk model GPU, memori, versi driver, dan topologi | Jumlah bilangan bulat dari sumber daya yang `nvidia.com/gpu` diperluas | 
| Berbagi GPU | Beberapa kontainer dalam Pod yang sama dapat berbagi GPU melalui referensi bersama `ResourceClaim` | Tidak didukung. Setiap GPU secara eksklusif dialokasikan ke satu kontainer. | 
| ComputeDomains | Mengelola Multi-Node NVLink (MNNVL) melalui `ComputeDomain` sumber daya untuk komunikasi GPU multi-node yang aman | Tidak didukung | 
| Attribute-based seleksi | Filter GPU berdasarkan model, memori, atau atribut lainnya menggunakan ekspresi CEL | Tidak didukung | 
| Topology-aware Alokasi EFA | DRA-native kesadaran topologi | Kesadaran topologi otomatis (hanya AMI EKS-optimized AL2023) | 

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

Driver NVIDIA DRA untuk GPU mengelola dua jenis sumber daya: GPU dan. ComputeDomains Ini menjalankan dua plugin DRA kubelet: dan. `gpu-kubelet-plugin` `compute-domain-kubelet-plugin` Masing-masing dapat diaktifkan atau dinonaktifkan secara terpisah selama instalasi. Panduan ini berfokus pada alokasi GPU. Untuk menggunakan ComputeDomains, lihat[Gunakan P6e-GB200 UltraServers dengan Amazon EKS](ml-eks-nvidia-ultraserver.md).

### Prasyarat
<a name="_prerequisites"></a>
+ Cluster Amazon EKS yang menjalankan Kubernetes versi 1.34 atau yang lebih baru dengan grup node terkelola EKS atau grup node yang dikelola sendiri.
+ Node dengan jenis instans GPU NVIDIA (seperti `P` atau `G` instance).
+ Node dengan komponen tingkat host diinstal untuk GPU NVIDIA. Saat menggunakan EKS-optimized AL2023 atau Bottlerocket NVIDIA AMI, driver NVIDIA tingkat host, driver mode pengguna CUDA, dan toolkit kontainer sudah diinstal sebelumnya.
+ Helm diinstal di lingkungan baris perintah Anda, lihat [petunjuk Setup Helm](helm.md) untuk informasi selengkapnya.
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda, lihat [Instal atau perbarui `kubectl`](install-kubectl.md#kubectl-install-update) untuk informasi selengkapnya.

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

**penting**  
Saat menggunakan driver NVIDIA DRA untuk manajemen perangkat GPU, itu tidak dapat digunakan bersama plugin perangkat NVIDIA pada node yang sama. Lihat Kubernetes [KEP-5004](https://github.com/kubernetes/enhancements/issues/5004)upstream untuk pembaruan.

**penting**  
Menggunakan driver NVIDIA DRA dengan Bottlerocket saat ini tidak didukung.

1. Tambahkan repositori bagan Helm driver NVIDIA DRA.

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

1. Perbarui repositori Helm lokal Anda.

   ```
   helm repo update
   ```

1. Dapatkan versi terbaru dari driver NVIDIA DRA.

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

1. Instal 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'
   ```

   Untuk opsi konfigurasi lanjutan, lihat [bagan Helm driver NVIDIA DRA](https://github.com/kubernetes-sigs/nvidia-dra-driver-gpu/blob/main/deployments/helm/nvidia-dra-driver-gpu/values.yaml).

1. Verifikasi bahwa pod driver DRA sedang berjalan.

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

1. Verifikasi bahwa `DeviceClass` objek telah dibuat.

   ```
   kubectl get deviceclass
   ```

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

1. Verifikasi bahwa `ResourceSlice` objek dipublikasikan untuk node GPU Anda.

   ```
   kubectl get resourceslice
   ```

   Untuk meminta GPU NVIDIA menggunakan driver DRA, buat referensi `ResourceClaimTemplate` yang mereferensikan `gpu.nvidia.com` `DeviceClass` dan mereferensikannya dalam spesifikasi Pod Anda. Contoh berikut meminta GPU tunggal. Lihat langkah-langkah [Topology-aware EFA dan alokasi GPU/Neuron perangkat](device-management-efa.md#efa-dra-topology-aware) untuk mengalokasikan GPU NVIDIA dengan antarmuka EFA yang selaras dengan topologi.

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

## Instal plugin perangkat NVIDIA Kubernetes
<a name="nvidia-device-plugin"></a>

Plugin perangkat NVIDIA Kubernetes mengiklankan GPU NVIDIA sebagai sumber daya yang diperluas. `nvidia.com/gpu` Anda meminta GPU dalam permintaan dan batasan sumber daya kontainer.

### Prasyarat
<a name="_prerequisites_2"></a>
+ Cluster Amazon EKS.
+ Node dengan tipe instans GPU NVIDIA menggunakan EKS-optimized AL2023 NVIDIA AMI. AMI EKS-optimized Bottlerocket menyertakan plugin perangkat NVIDIA dan tidak diperlukan instalasi terpisah.
+ Helm diinstal di lingkungan baris perintah Anda, lihat [petunjuk Setup Helm](helm.md) untuk informasi selengkapnya.
+  `kubectl`dikonfigurasi untuk berkomunikasi dengan cluster Anda, lihat [Instal atau perbarui `kubectl`](install-kubectl.md#kubectl-install-update) untuk informasi selengkapnya.

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

1. Tambahkan plugin perangkat NVIDIA Repositori bagan helm.

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

1. Perbarui repositori Helm lokal Anda.

   ```
   helm repo update
   ```

1. Instal plugin perangkat NVIDIA Kubernetes.

   ```
   helm install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true
   ```
**Nonaktifkan MOFED pada node dengan perangkat EFA**  
Dimulai dengan `k8s-device-plugin` v0.19.0, `--mofed-enabled` flag default ke. `true` Hal ini menyebabkan plugin perangkat NVIDIA memasang semua `/dev/infiniband/uverbs*` perangkat ke dalam wadah yang meminta GPU ()`nvidia.com/gpu`. Ini bertentangan dengan plugin perangkat AWS EFA, yang mengelola pemasangan `uverbs` perangkat. Beban kerja yang meminta lebih sedikit dari semua perangkat EFA pada node terpengaruh karena plugin perangkat NVIDIA mengklaim semua `uverbs` perangkat secara default.  
Jika node Anda memiliki perangkat EFA, nonaktifkan MOFED secara eksplisit saat menginstal plugin perangkat NVIDIA:  

   ```
   helm upgrade --install nvdp nvdp/nvidia-device-plugin \
       --namespace nvidia \
       --create-namespace \
       --set gfd.enabled=true \
       --set mofedEnabled=false
   ```
Jika Anda mengelola plugin perangkat NVIDIA melalui [operator GPU NVIDIA](https://github.com/NVIDIA/gpu-operator), nonaktifkan MOFED menggunakan bidang: `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'
   ```
Untuk informasi selengkapnya, lihat [NVIDIA k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin/issues/1692) issue \#1692.
**catatan**  
Anda juga dapat menginstal dan mengelola plugin perangkat NVIDIA Kubernetes menggunakan [Operator GPU NVIDIA](https://github.com/NVIDIA/gpu-operator), yang mengotomatiskan pengelolaan semua komponen perangkat lunak NVIDIA yang diperlukan untuk menyediakan GPU.

1. Verifikasi plugin perangkat NVIDIA DaemonSet sedang berjalan.

   ```
   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. Verifikasi bahwa node Anda memiliki GPU yang dapat dialokasikan.

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

   Contoh output adalah sebagai berikut.

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

### Minta GPU NVIDIA di Pod
<a name="_request_nvidia_gpus_in_a_pod"></a>

Untuk meminta GPU NVIDIA menggunakan plugin perangkat, tentukan `nvidia.com/gpu` sumber daya dalam permintaan dan batasan sumber daya penampung Anda.

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

Untuk menjalankan pengujian ini, terapkan manifes dan lihat log:

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

Contoh output adalah sebagai berikut.

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