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.
- 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 menjalankan 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 \
--quiet \
--enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
--release-channel=rapid \
--enable-autoupgrade \
--location CONTROL_PLANE_LOCATION \
--num-nodes "1" \
--cluster-version GKE_VERSION \
--workload-pool="PROJECT_ID.svc.id.goog"
Ganti kode berikut:
CLUSTER_NAME
: nama untuk cluster Anda.CONTROL_PLANE_LOCATION
: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.GKE_VERSION
: versi GKE yang akan digunakan untuk cluster dan node. Harus 1.32.1-gke.1489001 atau yang lebih baru.PROJECT_ID
: project ID Anda.
Menyiapkan lingkungan GKE untuk mendukung DRA
Di GKE, Anda dapat menggunakan DRA dengan GPU dan TPU. Saat membuat node pool, Anda harus menggunakan setelan berikut yang kompatibel dengan DRA selama Pratinjau:
- Untuk GPU, nonaktifkan penginstalan driver GPU otomatis.
- Tambahkan cakupan akses yang diperlukan untuk node.
- Tambahkan label node untuk menjalankan hanya beban kerja DRA di node.
- Aktifkan penskalaan otomatis cluster.
Semua setelan konfigurasi node pool lainnya, seperti jenis mesin, jenis akselerator, jumlah, sistem operasi node, dan lokasi node bergantung pada persyaratan Anda.
Menyiapkan lingkungan Anda untuk GPU
Buat node pool dengan hardware yang diperlukan:
gcloud beta container node-pools create "gpu-pool" \ --quiet \ --project PROJECT_ID \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION \ --node-version KUBERNETES_VERSION \ --machine-type "n1-standard-8" \ --accelerator "type=nvidia-tesla-t4,count=2,gpu-driver-version=disabled" \ --image-type "UBUNTU_CONTAINERD" \ --disk-type "pd-standard" \ --disk-size "100" \ --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \ --num-nodes "1" \ --enable-autoscaling \ --min-nodes "1" \ --max-nodes "6" \ --location-policy "ANY" \ --max-surge-upgrade 1 \ --max-unavailable-upgrade 0 \ --node-locations ZONE \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.CONTROL_PLANE_LOCATION
: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona. Pastikan lokasi yang dipilih berada di region yang sama dengan tempat GPU yang Anda tentukan tersedia.ZONE
: zona tempat GPU yang Anda tentukan tersedia.
Instal driver secara manual di node Container-Optimized OS atau Ubuntu. Untuk mengetahui petunjuk mendetail, lihat Menginstal driver GPU NVIDIA secara manual.
Jika menggunakan COS, jalankan perintah berikut untuk men-deploy DaemonSet penginstalan dan menginstal versi driver GPU default:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
Jika menggunakan Ubuntu, DaemonSet penginstalan yang Anda deploy bergantung pada jenis GPU dan versi node GKE seperti yang dijelaskan di bagian petunjuk Ubuntu.
Tarik dan perbarui diagram Helm yang berisi operator GPU:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
Buat namespace untuk operator GPU:
kubectl create namespace gpu-operator
Buat ResourceQuota di namespace
gpu-operator
. ResourceQuota memungkinkan operator GPU men-deploy Pod yang memiliki prioritas yang sama dengan Pod sistem Kubernetes.kubectl apply -n gpu-operator -f - << EOF apiVersion: v1 kind: ResourceQuota metadata: name: gpu-operator-quota spec: hard: pods: 100 scopeSelector: matchExpressions: - operator: In scopeName: PriorityClass values: - system-node-critical - system-cluster-critical EOF
Instal operator GPU dengan skrip Helm:
helm install --wait --generate-name -n gpu-operator nvidia/gpu-operator \ --set driver.enabled=false \ --set operator.repository=ghcr.io/nvidia \ --set operator.version=6171a52d \ --set validator.repository=ghcr.io/nvidia/gpu-operator \ --set validator.version=6171a52d \ --set toolkit.repository=ghcr.io/nvidia \ --set toolkit.version=5d9b27f1-ubuntu20.04 \ --set gfd.repository=ghcr.io/nvidia \ --set gfd.version=f171c926-ubi9 \ --set cdi.enabled=true \ --set hostPaths.driverInstallDir=/home/kubernetes/bin/nvidia \ --set toolkit.installDir=/home/kubernetes/bin/nvidia
Menyiapkan lingkungan untuk TPU
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 \
--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 \
--enable-autoupgrade
Ganti kode berikut:
* NODEPOOL_NAME
: nama untuk node pool Anda.
* CLUSTER_NAME
: nama cluster Anda.
* CONTROL_PLANE_LOCATION
: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
Mengakses dan menginstal driver DRA
Bagian berikut menunjukkan cara menginstal driver DRA untuk GPU dan TPU. Driver DRA memungkinkan Kubernetes mengalokasikan perangkat terlampir secara dinamis ke workload. Anda dapat menginstal driver DRA untuk GPU dan 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/GoogleCloudPlatform/ai-on-gke/common-infra.git
Buka direktori yang berisi diagram:
cd common-infra/common/charts
Menginstal driver DRA di GPU
Setelah Anda memiliki akses ke diagram Helm yang berisi driver DRA, instal driver DRA untuk GPU dengan menyelesaikan langkah berikut:
COS
helm upgrade -i --create-namespace --namespace nvidia nvidia-dra-driver-gpu nvidia-dra-driver-gpu/ \
--set image.repository=ghcr.io/nvidia/k8s-dra-driver-gpu \
--set image.tag=d1fad7ed-ubi9 \
--set image.pullPolicy=Always \
--set controller.priorityClassName="" \
--set kubeletPlugin.priorityClassName="" \
--set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \
--set nvidiaCtkPath=/home/kubernetes/bin/nvidia/toolkit/nvidia-ctk \
--set deviceClasses="{gpu}" \
--set gpuResourcesEnabledOverride=true \
--set resources.computeDomains.enabled=false \
--set kubeletPlugin.tolerations[0].key=nvidia.com/gpu \
--set kubeletPlugin.tolerations[0].operator=Exists \
--set kubeletPlugin.tolerations[0].effect=NoSchedule \
--set kubeletPlugin.tolerations[1].key=cloud.google.com/compute-class \
--set kubeletPlugin.tolerations[1].operator=Exists \
--set kubeletPlugin.tolerations[1].effect=NoSchedule
Ubuntu
helm upgrade -i --create-namespace --namespace nvidia nvidia-dra-driver-gpu nvidia-dra-driver-gpu/ \
--set image.repository=ghcr.io/nvidia/k8s-dra-driver-gpu \
--set image.tag=d1fad7ed-ubi9 \
--set image.pullPolicy=Always \
--set controller.priorityClassName="" \
--set kubeletPlugin.priorityClassName="" \
--set nvidiaDriverRoot="/opt/nvidia" \
--set nvidiaCtkPath=/home/kubernetes/bin/nvidia/toolkit/nvidia-ctk \
--set deviceClasses="{gpu}" \
--set gpuResourcesEnabledOverride=true \
--set resources.computeDomains.enabled=false \
--set kubeletPlugin.tolerations[0].key=nvidia.com/gpu \
--set kubeletPlugin.tolerations[0].operator=Exists \
--set kubeletPlugin.tolerations[0].effect=NoSchedule \
--set kubeletPlugin.tolerations[1].key=cloud.google.com/compute-class \
--set kubeletPlugin.tolerations[1].operator=Exists \
--set kubeletPlugin.tolerations[1].effect=NoSchedule
Menginstal driver DRA di TPU
Setelah Anda memiliki akses ke diagram Helm yang berisi driver, instal driver TPU dengan menyelesaikan langkah berikut:
./tpu-dra-driver/install-tpu-dra-driver.sh
Pastikan infrastruktur Anda siap untuk DRA
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
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
architecture:
string: Turing
brand:
string: Nvidia
cudaComputeCapability:
version: 7.5.0
cudaDriverVersion:
version: 12.2.0
driverVersion:
version: 535.230.2
index:
int: 0
minor:
int: 0
productName:
string: Tesla T4
type:
string: gpu
uuid:
string: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef
capacity:
memory:
value: 15Gi
name: gpu-0
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: ""