Dokumen ini menjelaskan cara menyiapkan infrastruktur Google Kubernetes Engine (GKE) untuk mendukung alokasi resource dinamis (DRA). Langkah-langkah penyiapan mencakup pembuatan node pool yang menggunakan GPU atau TPU, dan penginstalan driver DRA di cluster Anda. Dokumen ini ditujukan bagi administrator platform yang ingin mengurangi kompleksitas dan overhead penyiapan infrastruktur dengan perangkat hardware khusus.
Batasan
- Penyediaan otomatis node tidak didukung.
- Cluster Autopilot tidak mendukung DRA.
- Penginstalan driver GPU otomatis tidak didukung dengan DRA.
- Anda tidak dapat menggunakan fitur berbagi GPU berikut:
- GPU berbagi waktu
- GPU multi-instance
- Layanan Multi-proses (MPS)
- Untuk TPU, Anda harus mengaktifkan jenis
v1beta1danv1beta2versi DRA API. Batasan ini tidak berlaku untuk GPU, yang dapat menggunakan versi APIv1.
Persyaratan
Untuk menggunakan DRA, cluster GKE Anda harus menjalankan 1.34 atau yang lebih baru.
Anda juga harus memahami persyaratan dan batasan berikut, bergantung pada jenis hardware yang ingin Anda gunakan:
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Memiliki cluster Standard GKE yang menjalankan versi 1.34 atau yang lebih baru. Anda juga dapat membuat cluster regional.
Jika Anda tidak menggunakan Cloud Shell, instal Helm CLI:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shUntuk menggunakan DRA untuk TPU, aktifkan jenis API DRA versi
v1beta1danv1beta2:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices,resource.k8s.io/v1beta2/deviceclasses,resource.k8s.io/v1beta2/resourceclaims,resource.k8s.io/v1beta2/resourceclaimtemplates,resource.k8s.io/v1beta2/resourceslices"
Membuat node pool GKE dengan GPU atau TPU
Di GKE, Anda dapat menggunakan DRA dengan GPU dan TPU. Setelan konfigurasi node pool—seperti jenis mesin, jenis akselerator, jumlah, sistem operasi node, dan lokasi node—bergantung pada persyaratan Anda. Untuk membuat node pool yang mendukung DRA, pilih salah satu opsi berikut:
GPU
Untuk menggunakan DRA untuk GPU, Anda harus melakukan hal berikut saat membuat node pool:
- Nonaktifkan penginstalan driver GPU otomatis dengan menentukan opsi
gpu-driver-version=disableddalam flag--acceleratorsaat Anda mengonfigurasi GPU untuk node pool. - Nonaktifkan plugin perangkat GPU dengan menambahkan
label node
gke-no-default-nvidia-gpu-device-plugin=true. - Biarkan DaemonSet driver DRA berjalan di node dengan menambahkan
label node
nvidia.com/gpu.present=true.
Untuk membuat node pool GPU untuk DRA, ikuti langkah-langkah berikut:
Buat node pool dengan hardware yang diperlukan. Contoh berikut membuat node pool yang memiliki instance
g2-standard-24di Container-Optimized OS dengan dua GPU L4.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --machine-type "g2-standard-24" \ --accelerator "type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes "1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=trueGanti kode berikut:
NODEPOOL_NAME: nama untuk node pool Anda.CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: region atau zona bidang kontrol cluster, sepertius-central1atauus-central1-a.
Instal driver secara manual di node Container-Optimized OS atau Ubuntu. Untuk mengetahui petunjuk mendetail, lihat Menginstal driver GPU NVIDIA secara manual.
TPU
Untuk menggunakan DRA untuk TPU, Anda harus menonaktifkan plugin perangkat TPU dengan menambahkan label node gke-no-default-tpu-device-plugin=true. Contoh berikut
membuat node pool TPU Trillium dengan dukungan DRA:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--location=CONTROL_PLANE_LOCATION \
--node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
--machine-type=ct6e-standard-8t
Ganti kode berikut:
NODEPOOL_NAME: nama untuk node pool Anda.CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: region atau zona bidang kontrol cluster, sepertius-central1atauus-central1-a.
Menginstal driver DRA
GPU
Tarik dan update diagram Helm yang berisi driver NVIDIA DRA:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstal driver NVIDIA DRA dengan versi
25.3.2:helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.3.2" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Untuk node Ubuntu, gunakan jalur direktori
nvidiaDriverRoot="/opt/nvidia".
TPU
Buat clone repositori
ai-on-gkeuntuk mengakses diagram Helm yang berisi driver DRA untuk GPU dan TPU:git clone https://github.com/ai-on-gke/common-infra.gitBuka direktori yang berisi diagram:
cd common-infra/common/chartsInstal driver DRA TPU:
./tpu-dra-driver/install-tpu-dra-driver.sh
Pastikan infrastruktur Anda siap untuk DRA
Untuk memverifikasi bahwa Pod driver DRA Anda sedang berjalan, pilih salah satu opsi berikut:
GPU
kubectl get pods -n nvidia-dra-driver-gpuOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sTPU
kubectl get pods -n tpu-dra-driverOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30sPastikan
ResourceSlicemencantumkan perangkat hardware yang Anda tambahkan:kubectl get resourceslices -o yamlJika Anda menggunakan contoh di bagian sebelumnya, outputnya akan mirip dengan berikut ini, bergantung pada apakah Anda mengonfigurasi GPU atau TPU:
GPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""TPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1beta1 kind: ResourceSlice metadata: # lines omitted for clarity spec: devices: - basic: attributes: index: int: 0 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "0" - basic: attributes: index: int: 1 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "1" - basic: attributes: index: int: 2 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "2" - basic: attributes: index: int: 3 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "3" driver: tpu.google.com nodeName: gke-tpu-b4d4b61b-fwbg pool: generation: 1 name: gke-tpu-b4d4b61b-fwbg resourceSliceCount: 1 kind: List metadata: resourceVersion: ""