Halaman ini menjelaskan cara menyiapkan infrastruktur Google Kubernetes Engine (GKE) untuk mendukung alokasi resource dinamis (DRA). Di halaman ini, Anda akan membuat cluster yang dapat men-deploy workload GPU atau TPU, dan menginstal driver yang diperlukan secara manual untuk mengaktifkan DRA.
Halaman ini ditujukan untuk administrator platform yang ingin mengurangi kompleksitas dan overhead penyiapan infrastruktur dengan perangkat hardware khusus.
Tentang DRA
DRA adalah fitur Kubernetes bawaan yang memungkinkan Anda secara fleksibel meminta, mengalokasikan, dan membagikan hardware di cluster Anda di antara Pod dan container. Untuk mengetahui informasi selengkapnya, lihat Tentang alokasi resource dinamis.
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)
Persyaratan
Untuk menggunakan DRA, versi GKE Anda harus versi 1.32.1-gke.1489001 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
gcloud components update
.
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.sh
Membuat cluster Standar GKE
Buat cluster mode Standard yang mengaktifkan API beta Kubernetes untuk DRA:
gcloud container clusters create CLUSTER_NAME \
--enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
--cluster-version=GKE_VERSION
Ganti kode berikut:
CLUSTER_NAME
: nama untuk cluster Anda.GKE_VERSION
: versi GKE yang akan digunakan untuk cluster dan node. Harus 1.32.1-gke.1489001 atau yang lebih baru.
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.
GPU
Untuk menggunakan DRA untuk GPU, Anda harus melakukan hal berikut saat membuat node pool:
- Nonaktifkan penginstalan driver GPU otomatis dengan
gpu-driver-version=disabled
. - 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-24 di Container-Optimized OS dengan dua GPU L4.
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --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=true
Ganti kode berikut:
NODEPOOL_NAME
: nama untuk node pool Anda.CLUSTER_NAME
: nama cluster Anda.
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
.
Buat node pool yang menggunakan TPU. Contoh berikut membuat node pool TPU Trillium:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--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.
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 update
Instal driver NVIDIA DRA dengan versi 25.3.0-rc.4:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.0-rc.4" --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
Anda dapat menginstal driver DRA untuk TPU dengan diagram Helm yang disediakan. Untuk mendapatkan akses ke Helm chart, selesaikan langkah-langkah berikut:
Clone repositori
ai-on-gke
untuk mengakses diagram Helm yang berisi driver DRA untuk GPU dan TPU:git clone https://github.com/ai-on-gke/common-infra.git
Buka direktori yang berisi diagram:
cd common-infra/common/charts
Instal driver DRA TPU:
./tpu-dra-driver/install-tpu-dra-driver.sh
Pastikan infrastruktur Anda siap untuk DRA
Pastikan bahwa Pod driver DRA sedang berjalan.
GPU
kubectl get pods -n nvidia-dra-driver-gpu
NAME READY STATUS RESTARTS AGE
nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46s
TPU
kubectl get pods -n tpu-dra-driver
NAME READY STATUS RESTARTS AGE
tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30s
Pastikan ResourceSlice
mencantumkan perangkat hardware yang Anda tambahkan:
kubectl get resourceslices -o yaml
Jika Anda menggunakan contoh di bagian sebelumnya, ResourceSlice
akan menyerupai berikut, bergantung pada jenis hardware yang Anda gunakan:
GPU
Contoh berikut membuat mesin g2-standard-24 dengan dua GPU L4.
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 0
minor:
int: 0
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-4d403095-4294-6ddd-66fd-cfe5778ef56e
capacity:
memory:
value: 23034Mi
name: gpu-0
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 1
minor:
int: 1
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-cc326645-f91d-d013-1c2f-486827c58e50
capacity:
memory:
value: 23034Mi
name: gpu-1
driver: gpu.nvidia.com
nodeName: gke-cluster-gpu-pool-9b10ff37-mf70
pool:
generation: 1
name: gke-cluster-gpu-pool-9b10ff37-mf70
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: ""