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
- Class komputasi akselerator: Semua versi patch 1.28 yang dimulai dengan
1.28.6-gke.1095000
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 L4nvidia-tesla-t4
: NVIDIA T4
GPU_COUNT
: jumlah total GPU yang tersedia untuk dipasang ke node. Harus lebih besar dari atau sama denganGPU_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 denganGPU_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:
- 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.
- 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 L4nvidia-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 L4nvidia-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:
Buka halaman Workload di Konsol Google Cloud.
Buka Workload- Pilih beban kerja
Dasbor Workload menampilkan diagram untuk penggunaan dan kapasitas memori GPU, serta siklus tugas GPU.
Langkah selanjutnya
- Pelajari lebih lanjut dukungan GPU di GKE.
- Baca cara kelas komputasi Autopilot dioptimalkan untuk kasus penggunaan khusus.