Mengelola workload GPU

Halaman ini menjelaskan cara mengaktifkan dan mengelola workload unit pemrosesan grafis (GPU) di Google Distributed Cloud. Untuk memanfaatkan fungsi ini, Anda harus memiliki konfigurasi hardware Distributed Cloud yang berisi GPU. Dukungan GPU dinonaktifkan secara default. Anda harus mengaktifkan dukungan GPU secara eksplisit di cluster Distributed Cloud.

Untuk merencanakan dan memesan konfigurasi tersebut, pilih konfigurasi 2 dalam dokumen berikut:

Jika rak Distributed Cloud Anda menyertakan GPU, Anda dapat mengonfigurasi workload Distributed Cloud untuk menggunakan resource GPU.

Workload Distributed Cloud dapat berjalan di container dan di virtual machine:

  • Workload GPU yang berjalan di container. Saat Anda mengaktifkan dukungan GPU, semua resource GPU di cluster Distributed Cloud Anda awalnya dialokasikan ke workload yang berjalan di container. Driver GPU untuk menjalankan workload dalam container berbasis GPU disertakan dalam Distributed Cloud. Dalam setiap container, library GPU dipasang di /opt/nvidia.

  • Workload GPU yang berjalan di mesin virtual. Untuk menjalankan workload berbasis GPU di virtual machine, Anda harus mengalokasikan resource GPU di target node Distributed Cloud ke virtual machine, seperti yang dijelaskan di halaman ini. Tindakan ini akan melewati driver GPU bawaan dan meneruskan GPU langsung ke mesin virtual. Anda harus menginstal driver GPU yang kompatibel secara manual di sistem operasi tamu setiap mesin virtual. Anda juga harus mengamankan semua lisensi yang diperlukan untuk menjalankan driver GPU khusus di virtual machine Anda.

Untuk mengonfirmasi bahwa GPU ada di node Distributed Cloud, verifikasi bahwa node memiliki label vm.cluster.gke.io.gpu=true. Jika label tidak ada di node, berarti tidak ada GPU yang diinstal di mesin fisik Distributed Cloud yang sesuai.

Mengaktifkan dukungan GPU

Untuk mengaktifkan dukungan GPU bagi beban kerja, Anda harus membuat atau mengubah resource kustom VMRuntime yang berisi parameter enableGPU dengan nilai yang ditetapkan ke true, lalu menerapkannya ke cluster Distributed Cloud. Contoh:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Enable GPU support
  enableGPU: true

Bergantung pada jenis cluster tempat Anda ingin mengaktifkan subsistem mesin virtual VM Runtime on GDC, lakukan salah satu hal berikut:

  • Untuk cluster bidang kontrol Cloud yang belum mengaktifkan subsistem mesin virtual VM Runtime di GDC, Anda harus membuat resource VMRuntime secara manual.
  • Untuk cluster bidang kontrol Cloud yang telah mengaktifkan subsistem mesin virtual VM Runtime on GDC, Anda harus mengedit resource VMRuntime yang ada
  • Untuk cluster bidang kontrol lokal, Anda harus mengedit resource VMRuntime yang ada.

Resource VMRuntime yang sama ini juga mengonfigurasi dukungan VM Runtime di GDC pada cluster Anda dengan menggunakan parameter enable. Pastikan Anda mengonfigurasi kedua parameter sesuai dengan kebutuhan workload Anda. Anda tidak perlu mengaktifkan dukungan VM Runtime di GDC untuk mengaktifkan dukungan GPU di cluster Distributed Cloud Anda.

Tabel berikut menjelaskan konfigurasi yang tersedia.

Nilai enable Nilai enableGPU Konfigurasi yang dihasilkan
false false Workload hanya berjalan di container dan tidak dapat menggunakan resource GPU.
false true Workload hanya berjalan di container dan dapat menggunakan resource GPU.
true true

Beban kerja dapat berjalan di virtual machine dan di container.

Kedua jenis workload dapat menggunakan resource GPU.

true false

Beban kerja dapat berjalan di virtual machine dan di container.

Kedua jenis workload tidak dapat menggunakan resource GPU.

Pastikan dukungan GPU telah diaktifkan

Untuk memverifikasi bahwa dukungan GPU telah diaktifkan di cluster Anda, gunakan perintah berikut:

kubectl get pods --namespace vm-system

Perintah ini menampilkan output yang mirip dengan contoh berikut:

NAME                                         READY   STATUS     RESTARTS  AGE
...
gpu-controller-controller-manager-vbv4w      2/2     Running    0         31h
kubevirt-gpu-dp-daemonset-gxj7g              1/1     Running    0         31h
nvidia-gpu-dp-daemonset-bq2vj                1/1     Running    0         31h
...

Dalam output, Anda dapat memverifikasi bahwa Pod pengontrol GPU telah di-deploy dan berjalan di namespace vm-system.

Mengalokasikan resource GPU

Secara default, saat Anda mengaktifkan dukungan GPU di cluster Distributed Cloud, semua resource GPU di setiap node dalam cluster dialokasikan ke workload dalam container. Untuk menyesuaikan alokasi resource GPU di setiap node, selesaikan langkah-langkah di bagian ini.

Mengonfigurasi alokasi resource GPU

  1. Untuk mengalokasikan resource GPU di node Distributed Cloud, gunakan perintah berikut untuk mengedit resource kustom GPUAllocation di node target:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    Ganti NODE_NAME dengan nama target node Distributed Cloud.

    Pada contoh berikut, output perintah menunjukkan alokasi resource GPU default pabrik. Secara default, semua resource GPU dialokasikan ke workload (pod) dalam container, dan tidak ada resource GPU yang dialokasikan ke workload (vm) virtual machine:

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. Tetapkan alokasi resource GPU Anda sebagai berikut:

    • Untuk mengalokasikan resource GPU ke workload yang di-container, naikkan nilai kolom pod dan turunkan nilai kolom vm dengan jumlah yang sama.
    • Untuk mengalokasikan resource GPU ke workload virtual machine, tingkatkan nilai kolom vm dan kurangi nilai kolom pod dengan jumlah yang sama.

    Jumlah total resource GPU yang dialokasikan tidak boleh melebihi jumlah GPU yang diinstal pada mesin Distributed Cloud fisik tempat node berjalan; jika tidak, node akan menolak alokasi yang tidak valid.

    Dalam contoh berikut, dua resource GPU telah dialokasikan ulang dari beban kerja yang di-container (pod) ke beban kerja virtual machine (vm):

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    Setelah selesai, terapkan resource GPUAllocation yang telah diubah ke cluster Anda dan tunggu hingga statusnya berubah menjadi AllocationFulfilled.

Memeriksa alokasi resource GPU

  • Untuk memeriksa alokasi resource GPU, gunakan perintah berikut:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    Ganti NODE_NAME dengan nama target node Distributed Cloud.

    Perintah ini menampilkan output yang mirip dengan contoh berikut:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  Tesla T4
     Events:          <none>
    

Mengonfigurasi container untuk menggunakan resource GPU

Untuk mengonfigurasi container yang berjalan di Distributed Cloud agar menggunakan resource GPU, konfigurasi spesifikasinya seperti yang ditunjukkan dalam contoh berikut, lalu terapkan ke cluster Anda:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        nvidia.com/gpu-pod-TESLA_T4: 2
        limits:
        nvidia.com/gpu-pod-TESLA_T4: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

Ganti kode berikut:

  • CUDA_TOOLKIT_IMAGE: jalur lengkap dan nama image toolkit NVIDIA CUDA. Versi toolkit CUDA harus cocok dengan versi driver NVIDIA yang berjalan di cluster Distributed Cloud Anda. Untuk menentukan versi driver NVIDIA Anda, lihat Catatan rilis Distributed Cloud. Untuk menemukan versi toolkit CUDA yang cocok, lihat Kompatibilitas CUDA.
  • NODE_NAME: nama target node Distributed Cloud.

Mengonfigurasi virtual machine untuk menggunakan resource GPU

Untuk mengonfigurasi virtual machine yang berjalan di Distributed Cloud agar menggunakan resource GPU, konfigurasikan spesifikasi resource VirtualMachine seperti yang ditunjukkan dalam contoh berikut, lalu terapkan ke cluster Anda:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: nvidia.com/gpu-vm-TESLA_T4
    quantity: 2

Langkah berikutnya