Menyiapkan infrastruktur GKE untuk workload DRA


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:

  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 \
        --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.
  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.

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

  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.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:

  1. 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

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

Langkah berikutnya