Men-deploy beban kerja GPU di Autopilot


Halaman ini menunjukkan cara meminta berbagai jenis dan jumlah akselerator hardware (GPU) untuk beban kerja Autopilot Google Kubernetes Engine (GKE), serta memantau performa.

Tentang memilih akselerator di Pod

Autopilot menggunakan class komputasi Accelerator khusus untuk menjalankan Pod GPU. Dengan class komputasi ini, GKE menempatkan Pod di node GPU, sehingga memberi Pod akses ke kemampuan lanjutan di virtual machine (VM). Untuk menggunakan class ini dalam workload GPU, Anda melakukan salah satu tindakan berikut, bergantung pada versi GKE:

  • Versi 1.29.4-gke.1427000 dan yang lebih baru: Minta GPU dalam manifes workload Anda. Anda juga dapat menggunakan kemampuan berbagi GPU seperti berbagi waktu. GKE tidak mengubah manifes workload Anda untuk menambahkan pemilih node atau anotasi untuk class Accelerator.
  • Versi 1.29 hingga, tetapi tidak termasuk, versi 1.29.4-gke.142700: Tentukan pemilih node cloud.google.com/compute-class: Accelerator dalam manifes Pod dan minta GPU. Jika menentukan pemilih node ini, Anda juga dapat menggunakan kemampuan berbagi GPU seperti berbagi waktu.
  • Versi 1.28.9-gke.1069000 hingga, tetapi tidak termasuk, versi 1.29: Tentukan pemilih node cloud.google.com/compute-class: Accelerator dalam manifes Pod Anda bersama pemilih GPU. Jika menentukan pemilih node ini, Anda juga dapat menggunakan kemampuan berbagi GPU seperti berbagi waktu.

Class komputasi Accelerator tidak didukung dalam versi sebelum 1.28.9-gke.1069000. Sebagai gantinya, Pod GPU pada versi tersebut diperlakukan serupa dengan Pod Autopilot lainnya, dan Anda akan ditagih untuk permintaan resource. Untuk mengetahui detailnya, lihat Harga.

Kompatibilitas dengan kemampuan GKE

Tabel berikut menunjukkan kemampuan GKE yang kompatibel untuk setiap metode pemilihan akselerator di GKE Autopilot:

Accelerator class komputasi dipilih Kompatibilitas dengan kemampuan GKE

Harga

Tabel berikut menjelaskan bagaimana model penagihan yang digunakan GKE bergantung pada versi GKE cluster Anda. Untuk deskripsi model penagihan Autopilot GKE, lihat Harga Autopilot.

Versi GKE Harga
1.29.4-gke.1427000 dan yang lebih baru

Model penagihan berbasis node. Semua Pod GPU menggunakan class komputasi Accelerator. Anda akan ditagih untuk hardware Compute Engine yang menjalankan workload GPU, ditambah Autopilot premium untuk pengelolaan dan skalabilitas node. Untuk mengetahui detailnya, lihat Harga mode Autopilot.

Dari versi 1.29 hingga, tetapi tidak termasuk, versi 1.29.4-gke.1427000

Model penagihan bergantung pada pemilih node yang Anda tentukan, sebagai berikut:

  • cloud.google.com/compute-class: Accelerator: Menggunakan model penagihan berbasis node dan class komputasi Accelerator.
  • Tidak ada pemilih class komputasi: Menggunakan model penagihan berbasis Pod.
  • Anda hanya dapat menggunakan fitur seperti GPU multi-instance atau berbagi waktu jika menentukan pemilih node cloud.google.com/compute-class: Accelerator secara eksplisit.

    Untuk mengetahui detailnya, lihat bagian "Pod yang memiliki persyaratan hardware tertentu" di Harga Kubernetes Engine.

Dari versi 1.28.6-gke.1095000 hingga, tetapi tidak termasuk, versi 1.29

Model penagihan berbasis node, terlepas dari apakah Anda menentukan class komputasi Accelerator dalam manifes Pod atau tidak.

Anda hanya dapat menggunakan fitur seperti GPU multi-instance atau berbagi waktu jika menentukan pemilih node cloud.google.com/compute-class: Accelerator secara eksplisit.

Untuk mengetahui detailnya, lihat bagian "Pod yang memiliki persyaratan hardware tertentu" di Harga Kubernetes Engine.

Versi yang lebih lama dari 1.28.6-gke.1095000

Model penagihan berbasis pod. Anda ditagih berdasarkan permintaan resource Pod GPU. Untuk mengetahui detailnya, lihat bagian "Pod yang memiliki persyaratan hardware tertentu" di Harga Kubernetes Engine.

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.
  • Pastikan Anda memiliki cluster GKE Autopilot yang menjalankan salah satu versi berikut:

    • Kelas komputasi akselerator: Versi patch 1.28 apa pun mulai dari 1.28.6-gke.1095000
      • GPU NVIDIA H100 Mega (80 GB): 1.28.9-gke.1250000 atau yang lebih baru, dan 1.29.4-gke.1542000 atau yang lebih baru
      • 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
  • 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, Pod harus menggunakan semua resource GPU di 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 dalam satu node, jumlah permintaan GPU untuk pod tersebut harus kurang dari atau sama dengan jumlah resource GPU yang terpasang ke node tersebut. Misalnya, node dengan gke-accelerator-count 4 dapat mengakomodasi hingga empat Pod yang masing-masing meminta satu GPU.

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

  • Anda memiliki reservasi kapasitas untuk jenis mesin Accelerator besar dan menjalankan beban kerja satu GPU, sehingga men-deploy satu Pod per node akan membuang GPU lain di mesin tersebut
  • Anda memiliki workload GPU yang harus berjalan di host yang sama

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

Meminta GPU di container Anda

Untuk meminta resource GPU untuk container Anda, tambahkan kolom berikut ke spesifikasi Pod. Bergantung pada persyaratan beban kerja, Anda dapat memilih untuk menghapus pemilih cloud.google.com/gke-accelerator-count.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    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-mega-80gb: NVIDIA H100 Mega (80GB)
    • nvidia-h100-80gb: NVIDIA H100 (80GB)
    • 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 dilampirkan ke node. Harus lebih besar dari atau sama dengan GPU_QUANTITY dan jumlah 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 penampung. Harus kurang dari atau sama dengan GPU_COUNT dan jumlah GPU yang didukung untuk jenis GPU yang Anda pilih.

Untuk mengetahui detail tentang cara Anda ditagih untuk penggunaan akselerator dalam mode Autopilot, lihat bagian Harga.

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 untuk 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 menghapus nodeSelector dalam manifes, ini adalah opsi defaultnya.
  • 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 di satu node, tentukan CPU dan memori. Jika tidak, default-nya adalah 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/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 memberi Pod Anda class QoS Burstable dan memungkinkan Pod Anda menggunakan resource yang tidak digunakan dari jumlah permintaan resource di node. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi bursting Pod di GKE.

Permintaan penyimpanan efemeral 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 efemeral 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.

Untuk menggunakan SSD Lokal untuk penyimpanan efemeral, tambahkan nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" ke manifes workload Anda. Lihat contoh manifes di Menggunakan penyimpanan sementara 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
    ...
...

Memeriksa versi driver GPU

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

kubectl logs --selector=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-mega-80gb: NVIDIA H100 Mega (80GB)
  • nvidia-h100-80gb: NVIDIA H100 (80GB)
  • 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
NVIDIA H100 Mega (80GB)
nvidia-h100-mega-80gb
8

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

Memantau performa workload 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 informasi selengkapnya, lihat Melihat metrik kemampuan observasi. Untuk informasi umum tentang pemantauan cluster dan resource-nya, lihat Observabilitas 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.

Melihat metrik NVIDIA Data Center GPU Manager (DCGM)

Anda dapat mengumpulkan dan memvisualisasikan metrik NVIDIA DCGM menggunakan Google Cloud Managed Service for Prometheus. Untuk cluster Autopilot, GKE menginstal driver. Untuk cluster Standard, Anda harus menginstal driver NVIDIA.

Untuk petunjuk cara men-deploy paket DCGM yang dikelola GKE, lihat Mengumpulkan dan melihat metrik NVIDIA Data Center GPU Manager (DCGM).

Langkah selanjutnya