Menjalankan GPU multi-instance


Halaman ini memberikan petunjuk tentang cara meningkatkan pemanfaatan dan mengurangi biaya dengan menjalankan GPU multi-instance. Dengan konfigurasi ini, Anda mempartisi unit pemrosesan grafis (GPU) NVIDIA A100, H100, H200, atau B200 untuk berbagi satu GPU ke beberapa container di Google Kubernetes Engine (GKE).

Sebelum membaca halaman ini, pastikan Anda sudah memahami konsep Kubernetes seperti Pod, node, deployment, dan namespace, serta memahami konsep GKE seperti node pool, penskalaan otomatis, dan penyediaan otomatis.

Pengantar

Kubernetes mengalokasikan satu GPU penuh per container meskipun container hanya memerlukan sebagian kecil GPU untuk workload-nya, yang dapat menyebabkan pemborosan resource dan biaya yang berlebihan, terutama jika Anda menggunakan generasi terbaru GPU yang canggih. Untuk meningkatkan pemanfaatan GPU, GPU multi-instance memungkinkan Anda mempartisi satu GPU yang didukung hingga tujuh slice. Setiap slice dapat dialokasikan ke satu container pada node secara independen, untuk maksimum tujuh container per GPU. GPU multi-instance memberikan isolasi hardware antara workload, serta QoS yang konsisten dan dapat diprediksi untuk semua container yang berjalan di GPU.

Untuk aplikasi CUDA®, GPU multi-instance sebagian besar bersifat transparan. Setiap partisi GPU muncul sebagai resource GPU reguler, dan model pemrograman tidak berubah.

Untuk informasi selengkapnya tentang GPU multi-instance, lihat panduan pengguna GPU multi-instance NVIDIA.

GPU yang didukung

Jenis GPU berikut mendukung GPU multi-instance:

  • NVIDIA A100 (40GB)
  • NVIDIA A100 (80GB)
  • NVIDIA H100 (80GB)
  • NVIDIA H200 (141GB)
  • NVIDIA B200 (180 GB) (1.32.2-gke.1586000 dan yang lebih baru)

Partisi GPU multi-instance

Setiap GPU A100, H100, H200, dan B200 terdiri dari tujuh unit komputasi dan delapan unit memori, yang dapat Anda partisi menjadi instance GPU dengan berbagai ukuran. Untuk mengonfigurasi ukuran partisi GPU, gunakan sintaksis berikut: [compute]g.[memory]gb. Misalnya, ukuran partisi GPU 1g.5gb mengacu pada instance GPU dengan satu unit komputasi (1/7 multiprosesor streaming di GPU), dan satu unit memori (5 GB). Ukuran partisi untuk GPU dapat ditentukan saat Anda men-deploy workload Autopilot atau saat Anda membuat cluster Standard.

Tabel partisi dalam panduan pengguna GPU multi-instance NVIDIA mencantumkan semua ukuran partisi GPU yang berbeda, beserta jumlah resource memori dan komputasi yang tersedia di setiap partisi GPU. Tabel ini juga menunjukkan jumlah instance GPU untuk setiap ukuran partisi yang dapat dibuat di GPU.

Tabel berikut mencantumkan ukuran partisi yang didukung GKE:

Ukuran partisi Instance GPU
GPU: NVIDIA A100 (40 GB) (nvidia-tesla-a100)
1g.5gb 7
2g.10gb 3
3g.20gb 2
7g.40gb 1
GPU: NVIDIA A100 (80 GB) (nvidia-a100-80gb)
1g.10gb 7
2g.20gb 3
3g.40gb 2
7g.80gb 1
GPU: NVIDIA H100 (80 GB) (nvidia-h100-80gb dan nvidia-h100-mega-80gb)
1g.10gb 7
1g.20gb 4
2g.20gb 3
3g.40gb 2
7g.80gb 1
GPU: NVIDIA H200 (141GB) (nvidia-h200-141gb)
1g.18gb 7
1g.35gb 4
2g.35gb 3
3g.71gb 2
4g.71gb 1
7g.141gb 1
GPU: NVIDIA B200 (nvidia-b200)
1g.23gb 7
1g.45gb 4
2g.45gb 3
3g.90gb 2
4g.90gb 1
7g.180gb 1

Setiap GPU pada setiap node dalam node pool dipartisi dengan cara yang sama. Misalnya, pertimbangkan node pool dengan dua node, empat GPU pada setiap node, dan ukuran partisi 1g.5gb. GKE membuat tujuh partisi ukuran 1g.5gb di setiap GPU. Karena ada empat GPU di setiap node, ada 28 partisi GPU 1g.5gb yang tersedia di setiap node. Karena ada dua node dalam node pool, total 56 partisi GPU 1g.5gb tersedia di seluruh node pool.

Untuk membuat cluster GKE Standard dengan lebih dari satu jenis partisi GPU, Anda harus membuat beberapa node pool. Misalnya, jika Anda ingin node dengan partisi GPU 1g.5gb dan 3g.20gb dalam satu cluster, Anda harus membuat dua node pool: satu dengan ukuran partisi GPU ditetapkan ke 1g.5gb, dan satunya dengan 3g.20gb.

Cluster GKE Autopilot secara otomatis membuat node dengan konfigurasi partisi yang benar saat Anda membuat workload yang memerlukan ukuran partisi yang berbeda.

Setiap node diberi label dengan ukuran partisi GPU yang tersedia pada node. Pelabelan ini memungkinkan workload menargetkan node dengan ukuran partisi GPU yang diperlukan. Misalnya, pada node dengan instance GPU 1g.5gb, node-nya diberi label sebagai:

cloud.google.com/gke-gpu-partition-size=1g.5gb

Cara kerjanya

Untuk menggunakan GPU multi-instance, Anda perlu melakukan tugas-tugas berikut:

  1. Membuat cluster dengan GPU multi-instance diaktifkan.
  2. Menginstal driver secara manual.
  3. Memverifikasi jumlah resource GPU yang ada di node.
  4. Men-deploy container menggunakan GPU multi-instance.

Harga

GPU multi-instance bersifat eksklusif untuk GPU A100, GPU H100, GPU H200, dan GPU B200, serta dikenai harga GPU yang sesuai selain produk lain yang digunakan untuk menjalankan workload Anda. Anda hanya dapat memasang seluruh GPU ke node di cluster untuk pembuatan partisi. Untuk mengetahui informasi harga GPU, lihat halaman harga GPU.

Batasan

  • Penggunaan partisi GPU multi-instance dengan GKE tidak direkomendasikan untuk workload yang tidak tepercaya.
  • Partisi GPU penyediaan otomatis dan penskalaan otomatis didukung sepenuhnya di GKE versi 1.20.7-gke.400 atau yang lebih baru. Pada versi sebelumnya, hanya node pool dengan setidaknya satu node yang dapat diskalakan secara otomatis berdasarkan permintaan untuk ukuran partisi GPU tertentu dari workload.
  • Metrik pemakaian GPU (misalnya, duty_cycle) tidak tersedia untuk GPU multi-instance.
  • Multi-instance membagi GPU fisik menjadi instance terpisah, yang masing-masingnya terisolasi dari yang lain pada tingkat hardware. Container yang menggunakan instance GPU multi-instance hanya dapat mengakses resource CPU dan memori yang tersedia untuk instance tersebut.
  • Pod hanya dapat menggunakan hingga satu instance GPU multi-instance.

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.
  • Di Autopilot, GPU multi-instance didukung di GKE versi 1.29.3-gke.1093000 dan yang lebih baru.
  • Anda harus memiliki kuota GPU NVIDIA A100 yang memadai. Lihat Meminta penambahan kuota.
  • Jika ingin menggunakan GPU multi-instance dengan Autopilot, Anda dapat mempelajari lebih lanjut cara menggunakan GPU dengan Autopilot di Men-deploy workload GPU di Autopilot.
  • GKE menetapkan class komputasi Accelerator ke semua workload GPU multi-instance di cluster Autopilot.

Membuat cluster dengan GPU multi-instance diaktifkan

Jika menggunakan GKE Standard, Anda harus mengaktifkan GPU multi-instance di cluster. Cluster Autopilot yang menjalankan versi 1.29.3-gke.1093000 dan yang lebih baru mengaktifkan GPU multi-instance secara default. Untuk menggunakan GPU multi-instance di Autopilot, lihat bagian Men-deploy container menggunakan GPU multi-instance di halaman ini.

Saat membuat cluster Standard dengan GPU multi-instance, Anda harus menentukan gpuPartitionSize beserta acceleratorType dan acceleratorCount. acceleratorType harus berupa nvidia-tesla-a100, nvidia-a100-80gb, nvidia-h100-80gb, nvidia-h200-141gb, atau nvidia-b200.

Contoh berikut menunjukkan cara membuat cluster GKE dengan satu node, dan tujuh partisi GPU ukuran 1g.5gb pada node. Langkah-langkah lain di halaman ini menggunakan ukuran partisi GPU 1g.5gb, yang membuat tujuh partisi di setiap GPU. Anda juga dapat menggunakan salah satu ukuran partisi GPU yang didukung yang disebutkan sebelumnya.

Anda dapat menggunakan Google Cloud CLI atau Terraform.

gcloud

Buat cluster dengan GPU multi-instance diaktifkan:

gcloud container clusters create CLUSTER_NAME  \
    --project=PROJECT_ID  \
    --location CONTROL_PLANE_LOCATION  \
    --cluster-version=CLUSTER_VERSION  \
    --accelerator type=nvidia-tesla-a100,count=1,gpu-partition-size=1g.5gb,gpu-driver-version=DRIVER_VERSION  \
    --machine-type=a2-highgpu-1g  \
    --num-nodes=1

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • PROJECT_ID: ID Google Cloud project Anda.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  • CLUSTER_VERSION: versi harus 1.19.7-gke.2503 atau yang lebih baru.
  • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Dapat berupa salah satu dari hal berikut:
    • default: Menginstal versi driver default untuk versi GKE Anda.
    • latest: Instal versi driver terbaru yang tersedia untuk versi GKE Anda. Hanya tersedia untuk node yang menggunakan Container-Optimized OS.
    • disabled: Melewati penginstalan driver otomatis. Anda harus menginstal driver secara manual setelah membuat cluster. Jika Anda menghapus gpu-driver-version, ini adalah opsi defaultnya.

Terraform

Untuk membuat cluster dengan GPU multi-instance diaktifkan menggunakan Terraform, lihat contoh berikut:

resource "google_container_cluster" "default" {
  name               = "gke-standard-zonal-gpu"
  location           = "us-central1-a"
  initial_node_count = 1

  node_config {
    guest_accelerator {
      type  = "nvidia-tesla-t4"
      count = 1
      gpu_driver_installation_config {
        gpu_driver_version = "LATEST"
      }
    }
    machine_type = "n1-standard-2"
  }
}

Untuk mempelajari lebih lanjut cara menggunakan Terraform, lihat Dukungan Terraform untuk GKE.

Hubungkan ke cluster

Konfigurasi kubectl untuk terhubung ke cluster yang baru dibuat:

gcloud container clusters get-credentials CLUSTER_NAME

Menginstal driver

Jika memilih untuk menonaktifkan penginstalan driver otomatis saat membuat cluster, atau jika menjalankan versi GKE lebih awal dari 1.27.2-gke.1200, Anda harus menginstal driver NVIDIA yang kompatibel secara manual setelah pembuatan selesai. GPU multi-instance memerlukan driver NVIDIA versi 450.80.02 atau yang lebih baru.

Setelah driver diinstal, mode GPU multi-instance akan diaktifkan. Jika Anda menginstal driver secara otomatis, node akan dimulai ulang saat plugin perangkat GPU mulai membuat partisi GPU. Jika Anda menginstal driver secara manual, node Anda akan dimulai ulang saat penginstalan driver selesai. Mungkin perlu waktu beberapa menit untuk menyelesaikan proses mulai ulang.

Memverifikasi jumlah resource GPU yang ada di node

Jalankan perintah berikut untuk memverifikasi bahwa kapasitas dan jumlah resource nvidia.com/gpu yang dapat dialokasikan adalah 7:

kubectl describe nodes

Berikut adalah output dari perintah tersebut:

...
Capacity:
  ...
  nvidia.com/gpu:             7
Allocatable:
  ...
  nvidia.com/gpu:             7

Men-deploy container menggunakan GPU multi-instance

Anda dapat men-deploy hingga satu container per perangkat GPU multi-instance pada node tersebut. Dalam contoh ini, dengan ukuran partisi 1g.5gb, ada tujuh partisi GPU multi-instance yang tersedia pada node. Akibatnya, Anda dapat men-deploy hingga tujuh container yang meminta GPU pada node ini.

  1. Berikut adalah contoh yang memulai container cuda:11.0.3-base-ubi7 dan menjalankan nvidia-smi untuk mencetak UUID GPU dalam container. Dalam contoh ini, ada tujuh container, dan setiap container menerima satu partisi GPU. Contoh ini juga menetapkan pemilih node cloud.google.com/gke-gpu-partition-size untuk menargetkan node dengan partisi GPU 1g.5gb.

    Autopilot

    kubectl apply -f -  <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cuda-simple
    spec:
      replicas: 7
      selector:
        matchLabels:
          app: cuda-simple
      template:
        metadata:
          labels:
            app: cuda-simple
        spec:
          nodeSelector:
            cloud.google.com/gke-gpu-partition-size: 1g.5gb
            cloud.google.com/gke-accelerator: nvidia-tesla-a100
            cloud.google.com/gke-accelerator-count: "1"
          containers:
          - name: cuda-simple
            image: nvidia/cuda:11.0.3-base-ubi7
            command:
            - bash
            - -c
            - |
              /usr/local/nvidia/bin/nvidia-smi -L; sleep 300
            resources:
              limits:
                nvidia.com/gpu: 1
    EOF
          

    Manifes ini melakukan hal berikut:

    • Meminta jenis GPU nvidia-tesla-a100 dengan menetapkan pemilih node cloud.google.com/gke-accelerator.
    • Membagi GPU menjadi ukuran partisi 1g.5gb.
    • Melampirkan satu GPU ke node dengan menyetel pemilih node cloud.google.com/gke-accelerator-count.

    Standar

    kubectl apply -f -  <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cuda-simple
    spec:
      replicas: 7
      selector:
        matchLabels:
          app: cuda-simple
      template:
        metadata:
          labels:
            app: cuda-simple
        spec:
          nodeSelector:
            cloud.google.com/gke-gpu-partition-size: 1g.5gb
          containers:
          - name: cuda-simple
            image: nvidia/cuda:11.0.3-base-ubi7
            command:
            - bash
            - -c
            - |
              /usr/local/nvidia/bin/nvidia-smi -L; sleep 300
            resources:
              limits:
                nvidia.com/gpu: 1
    EOF
          

    Manifes ini melakukan hal berikut:

    • Meminta satu GPU dengan ukuran partisi 1g.5gb.
  2. Pastikan ketujuh Pod sedang berjalan:

    kubectl get pods
    

    Berikut adalah output dari perintah tersebut:

    NAME                           READY   STATUS    RESTARTS   AGE
    cuda-simple-849c47f6f6-4twr2   1/1     Running   0          7s
    cuda-simple-849c47f6f6-8cjrb   1/1     Running   0          7s
    cuda-simple-849c47f6f6-cfp2s   1/1     Running   0          7s
    cuda-simple-849c47f6f6-dts6g   1/1     Running   0          7s
    cuda-simple-849c47f6f6-fk2bs   1/1     Running   0          7s
    cuda-simple-849c47f6f6-kcv52   1/1     Running   0          7s
    cuda-simple-849c47f6f6-pjljc   1/1     Running   0          7s
    
  3. Lihat log untuk melihat UUID GPU, menggunakan nama Pod dari perintah sebelumnya:

    kubectl logs cuda-simple-849c47f6f6-4twr2
    

    Berikut adalah output dari perintah tersebut:

    GPU 0: A100-SXM4-40GB (UUID: GPU-45eafa61-be49-c331-f8a2-282736687ab1)
      MIG 1g.5gb Device 0: (UUID: MIG-GPU-45eafa61-be49-c331-f8a2-282736687ab1/11/0)
    

Langkah berikutnya