Menyiapkan infrastruktur GKE untuk workload DRA

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 v1beta1 dan v1beta2 versi DRA API. Batasan ini tidak berlaku untuk GPU, yang dapat menggunakan versi API v1.

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.sh
    
  • Untuk menggunakan DRA untuk TPU, aktifkan jenis API DRA versi v1beta1 dan v1beta2:

    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=disabled dalam flag --accelerator saat 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:

  1. 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 \
        --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=true
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama untuk node pool Anda.
    • CLUSTER_NAME: nama cluster Anda.
    • CONTROL_PLANE_LOCATION: region atau zona bidang kontrol cluster, seperti us-central1 atau us-central1-a.
  2. 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, seperti us-central1 atau us-central1-a.

Menginstal driver DRA

GPU

  1. Tarik dan update diagram Helm yang berisi driver NVIDIA DRA:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. Instal 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

  1. Buat 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
    
  2. Buka direktori yang berisi diagram:

    cd common-infra/common/charts
    
  3. Instal driver DRA TPU:

    ./tpu-dra-driver/install-tpu-dra-driver.sh
    

Pastikan infrastruktur Anda siap untuk DRA

  1. Untuk memverifikasi bahwa Pod driver DRA Anda sedang berjalan, pilih salah satu opsi berikut:

    GPU

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

    Outputnya mirip dengan hal berikut ini:

    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
    
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                         READY   STATUS    RESTARTS   AGE
    tpu-dra-driver-kubeletplugin-h6m57           1/1     Running   0          30s
    
  2. Pastikan ResourceSlice mencantumkan perangkat hardware yang Anda tambahkan:

    kubectl get resourceslices -o yaml
    

    Jika 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: ""
    

Langkah berikutnya