Men-deploy beban kerja GPU di Autopilot


Halaman ini menunjukkan cara meminta akselerator hardware (GPU) di beban kerja Autopilot Google Kubernetes Engine (GKE).

Autopilot menyediakan class komputasi Accelerator khusus untuk menjalankan Pod GPU. Dengan class komputasi ini, GKE menempatkan Pod pada node GPU, sehingga Pod memiliki akses ke kemampuan lanjutan di virtual machine (VM). Anda juga dapat menjalankan Pod GPU secara opsional tanpa memilih class komputasi Accelerator. Untuk mempelajari manfaat class komputasi Accelerator lebih lanjut, lihat Kapan harus menggunakan class komputasi tertentu.

Harga

Autopilot menagih Anda secara berbeda, bergantung apakah Anda meminta class komputasi Accelerator untuk menjalankan beban kerja GPU.

Gunakan class komputasi Accelerator? Harga Kompatibilitas dengan kapabilitas GKE
Anda akan dikenai biaya untuk hardware Compute Engine yang menjalankan workload GPU, ditambah Autopilot premium untuk pengelolaan dan skalabilitas node otomatis. Untuk mengetahui detailnya, lihat Harga mode Autopilot.

Kompatibel dengan:

Anda akan ditagih berdasarkan permintaan resource Pod GPU. Untuk mengetahui detailnya, lihat bagian "Pod GPU" dalam harga Kubernetes Engine.

Kompatibel dengan:

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 initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Pastikan Anda memiliki cluster GKE Autopilot yang menjalankan salah satu versi berikut:

    • Class komputasi akselerator: Semua versi patch 1.28 yang dimulai dengan 1.28.6-gke.1095000
      • GPU NVIDIA H100 (80 GB): 1.28.6-gke.1369000 atau yang lebih baru, dan 1.29.1-gke.1575000 atau yang lebih baru
      • Beberapa Pod GPU per VM: 1.29.2-gke.1355000 atau yang lebih baru
    • Tidak ada pilihan class komputasi:

      • GPU NVIDIA L4: 1.28.3-gke.1203000 atau yang lebih baru
      • GPU NVIDIA A100 (80 GB): 1.27 atau yang lebih baru
      • Semua GPU lainnya: 1.24.2-gke.1800 atau yang lebih baru
  • Pastikan Anda memiliki kuota GPU yang cukup yang tersedia di project Anda. Anda harus memiliki kuota GPU Compute Engine yang cukup untuk model GPU yang ingin Anda buat di setiap region. Jika Anda memerlukan kuota GPU tambahan, minta kuota GPU.

Batasan

  • GPU berbagi waktu dan GPU multi-instance tersedia dengan Autopilot di GKE versi 1.29.3-gke.1093000 dan yang lebih baru.
  • Ketersediaan GPU bergantung pada region Google Cloud dari cluster Autopilot dan kuota GPU Anda. Untuk menemukan model GPU berdasarkan region atau zona, lihat Ketersediaan region dan zona GPU.
  • Untuk GPU NVIDIA A100 (80 GB), Anda akan dikenai harga tetap untuk SSD Lokal yang terpasang ke node, terlepas dari apakah Pod Anda menggunakan kapasitas tersebut atau tidak.
  • Untuk versi GKE sebelum 1.29.2-gke.1355000, jika Anda secara eksplisit meminta node GPU tertentu yang sudah ada untuk Pod Anda, Pod harus menggunakan semua resource GPU pada node tersebut. Misalnya, jika node yang ada memiliki 8 GPU dan container Pod Anda meminta total 4 GPU, Autopilot akan menolak Pod.
  • Untuk GKE versi 1.29.2-gke.1355000 atau yang lebih baru, jika Anda ingin beberapa pod GPU muat ke dalam satu node, jumlah permintaan GPU untuk pod tersebut harus kurang dari atau sama dengan jumlah resource GPU yang terpasang pada node tersebut. Misalnya, node dengan gke-accelerator-count berisi 4 dapat mengakomodasi hingga empat Pod yang masing-masing meminta satu GPU.

Menempatkan beberapa Pod pada satu node GPU akan berguna dalam situasi seperti berikut:

  • Anda memiliki reservasi kapasitas untuk jenis mesin Akselerator yang besar dan menjalankan beban kerja GPU tunggal. Jadi, men-deploy satu Pod per node akan memboroskan GPU lain pada mesin tersebut
  • Anda memiliki beban kerja GPU yang harus dijalankan di host yang sama

Dalam situasi ini, sebaiknya Anda menggunakan semua GPU pada node dengan memastikan bahwa jumlah permintaan resource GPU Pod di node sama dengan jumlah GPU yang terpasang pada node.

Meminta GPU di container Anda

Guna meminta resource GPU untuk container Anda, tambahkan kolom berikut ke spesifikasi Pod. Bergantung pada persyaratan beban kerja, Anda dapat menghapus kolom cloud.google.com/compute-class: "Accelerator" dan cloud.google.com/gke-accelerator-count secara opsional.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/compute-class: "Accelerator"
    cloud.google.com/gke-accelerator: GPU_TYPE
    cloud.google.com/gke-accelerator-count: GPU_COUNT
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: GPU_QUANTITY

Ganti kode berikut:

  • GPU_TYPE: jenis hardware GPU. Nilai yang diperbolehkan adalah sebagai berikut:
    • nvidia-h100-80gb: NVIDIA H100 (80 GB) (hanya tersedia dengan kelas komputasi Akselerator)
    • nvidia-a100-80gb: NVIDIA A100 (80GB)
    • nvidia-tesla-a100: NVIDIA A100 (40GB)
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4
  • GPU_COUNT: jumlah total GPU yang tersedia untuk dipasang ke node. Harus lebih besar dari atau sama dengan GPU_QUANTITY dan kuantitas GPU yang didukung untuk jenis GPU yang Anda pilih. Jika Anda menghapus nodeSelector ini, Autopilot akan menempatkan satu Pod di setiap node GPU.
  • GPU_QUANTITY: jumlah GPU yang akan dialokasikan ke container. Harus kurang dari atau sama dengan GPU_COUNT dan kuantitas GPU yang didukung untuk jenis GPU yang Anda pilih.

Anda harus menentukan jenis GPU dan jumlah GPU di spesifikasi Pod. Jika Anda menghapus salah satu nilai ini, Autopilot akan menolak Pod Anda.

Saat Anda men-deploy manifes ini, Autopilot akan otomatis menginstal driver NVIDIA default untuk versi GKE node. Pada versi 1.29.2-gke.1108000 dan yang lebih baru, Anda dapat memilih menginstal versi driver terbaru untuk versi GKE tersebut dengan menambahkan pemilih node berikut ke manifes Anda:

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

Ganti DRIVER_VERSION dengan salah satu nilai berikut:

  • default - driver default yang stabil untuk versi GKE node Anda. Jika Anda menghilangkan nodeSelector dalam manifes, ini adalah opsi default.
  • latest - versi driver terbaru yang tersedia untuk versi GKE node Anda.

Permintaan CPU dan memori untuk Pod GPU Autopilot

Saat menentukan Pod GPU, Anda juga harus meminta resource CPU dan memori agar container Anda berperforma seperti yang diharapkan. Autopilot menerapkan jumlah minimum, maksimum, dan default CPU dan memori tertentu berdasarkan jenis dan jumlah GPU. Jika Anda menjalankan beberapa Pod GPU pada satu node, tentukan CPU dan memorinya. Jika tidak, Pod GPU akan ditetapkan secara default ke seluruh kapasitas node. Untuk mengetahui detailnya, lihat Permintaan resource di Autopilot.

Spesifikasi Pod Anda akan terlihat seperti contoh berikut, yang meminta empat GPU T4:

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  nodeSelector:
    cloud.google.com/compute-class: "Accelerator"
    cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
  containers:
  - name: t4-container-1
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 3
        cpu: "54"
        memory: "54Gi"
      requests:
        cpu: "54"
        memory: "54Gi"
  - name: t4-container-2
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 1
        cpu: "18"
        memory: "18Gi"
      requests:
        cpu: "18"
        memory: "18Gi"

Manifes ini menentukan limits untuk resource CPU dan memori. Jika Anda menghapus limits untuk CPU atau memori di GKE versi 1.29.2-gke.1060000 dan yang lebih baru, GKE akan memberikan class QoS Burstable ke Pod Anda dan memungkinkan Pod Anda meledak ke resource yang tidak digunakan dari jumlah permintaan resource pada node. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi burst Pod di GKE.

Permintaan penyimpanan ephemeral untuk Pod GPU Autopilot

Anda juga dapat meminta penyimpanan sementara di Pod yang memerlukan penyimpanan jangka pendek. Penyimpanan sementara maksimum yang tersedia dan jenis hardware penyimpanan yang digunakan bergantung pada jenis dan jumlah GPU yang diminta Pod. Anda dapat menggunakan SSD Lokal untuk penyimpanan sementara jika menggunakan GPU NVIDIA L4, class komputasi Accelerator, dan menjalankan patch GKE versi 1.28.6-gke.1369000 dan yang lebih baru atau 1.29.1-gke.1575000 dan yang lebih baru.

Agar dapat menggunakan SSD Lokal untuk penyimpanan efemeral, tambahkan nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" ke manifes workload Anda. Lihat contoh manifes dalam Menggunakan penyimpanan efemeral yang didukung SSD Lokal dengan cluster Autopilot. GPU NVIDIA H100 (80 GB) dan GPU NVIDIA A100 (80 GB) selalu menggunakan SSD Lokal untuk penyimpanan sementara, dan Anda tidak dapat menentukan pemilih node ini untuk GPU tersebut.

Memverifikasi alokasi GPU

Untuk memeriksa apakah beban kerja GPU yang di-deploy memiliki GPU yang diminta, jalankan perintah berikut:

kubectl describe node NODE_NAME

Ganti NODE_NAME dengan nama node tempat Pod dijadwalkan.

Outputnya mirip dengan hal berikut ini:


apiVersion: v1
kind: Node
metadata:
...
  labels:
    ...
    cloud.google.com/gke-accelerator: nvidia-tesla-t4
    cloud.google.com/gke-accelerator-count: "1"
    cloud.google.com/machine-family: custom-48
    ...
...

Periksa versi driver GPU

Di cluster Autopilot, GKE otomatis menginstal driver perangkat NVIDIA di semua node GPU. Untuk menemukan versi driver yang terinstal GKE di cluster Anda, jalankan perintah berikut:

kubectl logs --label=k8s-app=nvidia-gpu-device-plugin \
    --container="nvidia-gpu-device-plugin" \
    --tail=-1 \
    --namespace=kube-system | grep Driver

Outputnya mirip dengan hal berikut ini:

I1206 18:37:08.251742    5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12

Cara kerja alokasi GPU di Autopilot

Setelah Anda meminta jenis GPU dan jumlah untuk container di dalam Pod dan men-deploy Pod, hal berikut akan terjadi:

  1. Jika tidak ada node GPU yang dapat dialokasikan, Autopilot akan menyediakan node GPU baru untuk menjadwalkan Pod. Autopilot menginstal driver NVIDIA untuk memfasilitasi hardware secara otomatis.
  2. Autopilot menambahkan taint node ke node GPU dan menambahkan toleransi yang sesuai ke Pod. Hal ini mencegah GKE menjadwalkan Pod lain pada node GPU.

Autopilot menempatkan tepat satu Pod GPU di setiap node GPU, serta beban kerja yang dikelola GKE yang berjalan di semua node, dan DaemonSet yang dikonfigurasi untuk menoleransi semua taint node.

Menjalankan DaemonSets pada setiap node

Anda mungkin ingin menjalankan DaemonSets pada setiap node, bahkan node dengan taint yang diterapkan. Misalnya, beberapa agen logging dan pemantauan harus berjalan di setiap node dalam cluster. Anda dapat mengonfigurasi DaemonSets tersebut untuk mengabaikan taint node sehingga GKE menempatkan beban kerja tersebut di setiap node.

Untuk menjalankan DaemonSets pada setiap node dalam cluster, termasuk node GPU, tambahkan toleransi berikut ke spesifikasi Anda:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Untuk menjalankan DaemonSets pada node GPU tertentu di cluster Anda, tambahkan hal berikut ini ke spesifikasi Anda:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "GPU_TYPE"
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Ganti GPU_TYPE dengan jenis GPU di node target Anda. Dapat berupa salah satu dari hal berikut:

  • nvidia-h100-80gb: NVIDIA H100 (80 GB) (hanya tersedia dengan kelas komputasi Akselerator)
  • nvidia-a100-80gb: NVIDIA A100 (80GB)
  • nvidia-tesla-a100: NVIDIA A100 (40GB)
  • nvidia-l4: NVIDIA L4
  • nvidia-tesla-t4: NVIDIA T4

Kasus penggunaan GPU di Autopilot

Anda dapat mengalokasikan GPU ke container di Pod Autopilot untuk memfasilitasi beban kerja seperti berikut:

  • Inferensi machine learning (ML)
  • Pelatihan ML
  • Rendering

Jumlah GPU yang didukung

Saat meminta GPU dalam spesifikasi Pod, Anda harus menggunakan jumlah berikut berdasarkan jenis GPU:

Kuantitas GPU
NVIDIA L4
nvidia-l4
1, 2, 4, 8
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100 (40GB)
nvidia-tesla-a100
1, 2, 4, 8, 16
NVIDIA A100 (80GB)
nvidia-a100-80gb
1, 2, 4, 8
NVIDIA H100 (80GB)
nvidia-h100-80gb
8

Jika Anda meminta jumlah GPU yang tidak didukung untuk jenis tersebut, Autopilot akan menolak Pod Anda.

Memantau node GPU

Jika cluster GKE Anda telah mengaktifkan metrik sistem, metrik berikut akan tersedia di Cloud Monitoring untuk memantau performa workload GPU Anda:

  • Siklus Tugas (container/accelerator/duty_cycle): Persentase waktu selama periode sampel terakhir (10 detik) di mana akselerator secara aktif berproses. Antara 1 dan 100.
  • Penggunaan Memori (container/accelerator/memory_used): Jumlah memori akselerator yang dialokasikan dalam byte.
  • Kapasitas Memori (container/accelerator/memory_total): Total memori akselerator dalam byte.

Anda dapat menggunakan dasbor standar untuk memantau cluster dengan node GPU. Untuk mengetahui informasi selengkapnya, baca Melihat metrik kemampuan observasi. Untuk informasi umum tentang pemantauan cluster Anda dan resource-nya, lihat Kemampuan observasi untuk GKE.

Melihat metrik penggunaan untuk workload

Anda dapat melihat metrik penggunaan GPU workload dari dasbor Beban kerja di Konsol Google Cloud.

Untuk melihat penggunaan GPU workload Anda, lakukan langkah-langkah berikut:

  1. Buka halaman Workload di Konsol Google Cloud.

    Buka Workload
  2. Pilih beban kerja

Dasbor Workload menampilkan diagram untuk penggunaan dan kapasitas memori GPU, serta siklus tugas GPU.

Langkah selanjutnya