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 atau H100 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)

Partisi GPU multi-instance

GPU A100 dan GPU H100 terdiri dari tujuh unit komputasi dan delapan unit memori, yang dapat dipartisi menjadi instance GPU dengan berbagai ukuran. Ukuran partisi GPU menggunakan 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 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

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 akan 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 dan GPU H100 dan 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 penggunaan GPU (misalnya, duty_cycle) tidak tersedia untuk GPU multi-instance.
  • Multi-instance membagi GPU fisik menjadi instance terpisah, yang masing-masing 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 maksimal satu instance GPU multi-instance.

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.
  • 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 Standar dengan GPU multi-instance, Anda harus menentukan gpuPartitionSize beserta acceleratorType dan acceleratorCount. acceleratorType harus berupa nvidia-tesla-a100, nvidia-a100-80gb, atau nvidia-h100-80gb.

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  \
    --zone ZONE  \
    --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 project Google Cloud Anda.
  • ZONE: zona komputasi untuk bidang kontrol cluster.
  • 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 yang 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"
  }

  # Set `deletion_protection` to `true` will ensure that one cannot
  # accidentally delete this instance by use of Terraform.
  deletion_protection = false
}

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

          cat &lt&ltEOF | kubectl apply -f -
          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 menetapkan pemilih node cloud.google.com/gke-accelerator-count.

    Standard

          cat &lt&ltEOF | kubectl apply -f -
          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