Halaman ini menjelaskan karakteristik dan jenis workload terbaik untuk setiap strategi berbagi GPU yang tersedia di Google Kubernetes Engine (GKE), seperti GPU multi-instance, berbagi waktu GPU, dan NVIDIA MPS.
Sebelum membaca halaman ini, pastikan Anda memahami:
- Konsep Kubernetes seperti Pod, node, deployment, dan namespace.
- Konsep GKE seperti node pool, penskalaan otomatis, dan penyediaan otomatis node.
Cara kerja permintaan GPU di Kubernetes
Kubernetes memungkinkan workload meminta jumlah resource yang diperlukan agar dapat berfungsi dengan tepat. Meskipun dapat meminta unit CPU pecahan untuk beban kerja, Anda tidak dapat meminta unit GPU pecahan. Manifes pod harus meminta resource GPU dalam bilangan bulat, yang berarti bahwa seluruh GPU fisik dialokasikan ke satu container meskipun container tersebut hanya memerlukan sebagian kecil resource untuk berfungsi dengan benar. Cara ini tidak efisien dan bisa mahal, terutama jika Anda menjalankan beberapa workload dengan persyaratan GPU rendah yang serupa.
Gunakan strategi berbagi GPU untuk meningkatkan penggunaan GPU saat workload Anda tidak memerlukan semua resource GPU.
Apa yang dimaksud dengan strategi berbagi GPU?
Strategi berbagi GPU memungkinkan beberapa penampung menggunakan GPU yang terpasang secara efisien dan menghemat biaya pengoperasian. GKE menyediakan strategi berbagi GPU berikut:
- GPU multi-instance: GKE membagi satu GPU yang didukung menjadi hingga tujuh bagian. 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 Kualitas Layanan (QoS) yang konsisten dan dapat diprediksi untuk semua container yang berjalan di GPU.
- Berbagi waktu GPU: GKE menggunakan kemampuan berbagi waktu bawaan yang disediakan oleh GPU NVIDIA dan stack software. Mulai dari arsitektur Pascal, GPU NVIDIA mendukung preemption level petunjuk. Saat melakukan pengalihan konteks di antara proses yang berjalan di GPU, preemptif tingkat petunjuk memastikan setiap proses mendapatkan timeslice yang adil. Pembagian waktu GPU memberikan isolasi tingkat software di antara beban kerja dalam hal isolasi ruang alamat, isolasi performa, dan isolasi error.
- NVIDIA MPS: GKE menggunakan Multi-Process Service (MPS) NVIDIA. NVIDIA MPS adalah implementasi alternatif yang kompatibel dengan biner dari CUDA API yang dirancang untuk mengaktifkan beban kerja CUDA multiproses kooperatif secara transparan agar berjalan secara serentak di satu perangkat GPU. GPU dengan NVIDIA MPS memberikan isolasi tingkat software dalam hal batas resource (persentase thread aktif dan memori perangkat yang disematkan).
Strategi berbagi GPU yang akan digunakan
Tabel berikut merangkum dan membandingkan karakteristik strategi berbagi GPU yang tersedia:
GPU multi-instance | Berbagi waktu GPU | NVIDIA MPS | |
---|---|---|---|
Umum | Berbagi GPU paralel di antara container | Peralihan konteks yang cepat | Berbagi GPU paralel di antara container |
Isolasi | Satu GPU dibagi menjadi hingga tujuh bagian dan setiap penampung di GPU fisik yang sama memiliki komputasi, memori, dan bandwidth khusus. Oleh karena itu, penampung dalam partisi memiliki throughput dan latensi yang dapat diprediksi meskipun penampung lain memenuhi partisi lain. |
Setiap penampung mengakses kapasitas penuh GPU fisik yang mendasarinya dengan melakukan pengalihan konteks antar-proses yang berjalan di GPU. Namun, pembagian waktu tidak memberikan penegakan batas memori antara Tugas bersama dan peralihan konteks yang cepat untuk akses bersama dapat menyebabkan overhead. |
NVIDIA MPS memiliki isolasi resource terbatas, tetapi mendapatkan lebih banyak fleksibilitas dalam dimensi lain, misalnya jenis GPU dan unit bersama maksimum, yang menyederhanakan alokasi resource. |
Cocok untuk workload ini | Direkomendasikan untuk workload yang berjalan secara paralel dan memerlukan ketahanan dan QoS tertentu. Misalnya, saat menjalankan beban kerja inferensi AI, GPU multi-instance memungkinkan beberapa kueri inferensi berjalan secara bersamaan untuk respons yang cepat, tanpa memperlambat satu sama lain. |
Direkomendasikan untuk beban kerja burst dan interaktif yang memiliki periode tidak ada aktivitas. Workload ini tidak hemat biaya dengan GPU yang sepenuhnya didedikasikan. Dengan menggunakan berbagi waktu, workload mendapatkan akses cepat ke GPU saat berada dalam fase aktif. Berbagi waktu GPU optimal untuk skenario guna menghindari GPU yang tidak ada aktivitasnya dan mahal, jika isolasi penuh dan akses GPU berkelanjutan mungkin tidak diperlukan, misalnya, saat beberapa pengguna menguji atau membuat prototipe workload. Beban kerja yang menggunakan pembagian waktu harus mentolerir kompromi latensi dan kinerja tertentu. |
Direkomendasikan untuk pemrosesan batch untuk tugas kecil karena MPS memaksimalkan throughput dan penggunaan serentak GPU. MPS memungkinkan tugas batch diproses secara paralel secara efisien untuk beban kerja berukuran kecil hingga sedang. NVIDIA MPS optimal untuk proses kooperatif yang bertindak sebagai satu aplikasi. Misalnya, tugas MPI dengan paralelisme peringkat inter-MPI. Dengan tugas ini, setiap proses CUDA kecil (biasanya peringkat MPI) dapat berjalan secara serentak di GPU untuk memenuhi seluruh GPU sepenuhnya. Workload yang menggunakan CUDA MPS harus mentolerir batasan perlindungan memori dan pembatasan error. |
Pemantauan | Metrik penggunaan GPU tidak tersedia untuk GPU multi-instance. | Gunakan Cloud Monitoring untuk memantau performa berbagi waktu GPU Anda. Untuk mempelajari metrik yang tersedia lebih lanjut, lihat Memantau node GPU berbagi waktu atau NVIDIA MPS. | Gunakan Cloud Monitoring untuk memantau performa MPS NVIDIA Anda. Untuk mempelajari metrik yang tersedia lebih lanjut, lihat Memantau node GPU berbagi waktu atau NVIDIA MPS. |
Meminta GPU bersama dalam workload | Menjalankan GPU multi-instance | Menjalankan GPU dengan berbagi waktu | Menjalankan GPU dengan NVIDIA MPS |
Untuk memaksimalkan penggunaan GPU, gabungkan strategi berbagi GPU. Untuk setiap partisi GPU multi-instance, gunakan berbagi waktu atau MPS NVIDIA. Anda kemudian dapat menjalankan beberapa penampung pada setiap partisi, dengan penampung tersebut berbagi akses ke resource pada partisi tersebut. Sebaiknya Anda menggunakan salah satu kombinasi berikut:
- GPU multi-instance dan berbagi waktu GPU.
- GPU multi-instance dan NVIDIA MPS.
Cara kerja strategi berbagi GPU
Anda dapat menentukan jumlah maksimum container yang diizinkan untuk berbagi GPU fisik:
- Di cluster Autopilot, hal ini dikonfigurasi dalam spesifikasi workload Anda.
- Di cluster Standard, konfigurasi ini dilakukan saat Anda membuat node pool baru dengan GPU yang terpasang. Setiap GPU di node pool dibagikan berdasarkan setelan yang Anda tentukan pada level node pool.
Bagian berikut menjelaskan perilaku penjadwalan dan operasi setiap strategi berbagi GPU.
GPU multi-instance
Anda dapat meminta GPU multi-instance dalam workload dengan menentukan
label cloud.google.com/gke-gpu-partition-size
di kolom nodeSelector
spec Pod, di bagian spec: nodeSelector
.
GKE menjadwalkan workload ke node yang tersedia dan sesuai dengan mencocokkan label ini. Jika tidak ada node yang sesuai yang tersedia, GKE akan menggunakan penskalaan otomatis dan penyediaan otomatis node untuk membuat node atau node pool baru yang cocok dengan label ini.
Berbagi waktu GPU atau MPS NVIDIA
Anda dapat meminta berbagi waktu GPU atau MPS NVIDIA dalam workload dengan menentukan
label berikut di kolom nodeSelector
spesifikasi Pod, di bagian spec:nodeSelector
.
cloud.google.com/gke-max-shared-clients-per-gpu
: Memilih node yang memungkinkan sejumlah klien tertentu untuk berbagi GPU dasar.cloud.google.com/gke-gpu-sharing-strategy
: Memilih node yang menggunakan strategi berbagi waktu atau NVIDIA MPS untuk GPU.
Tabel berikut menjelaskan bagaimana perilaku penjadwalan berubah berdasarkan kombinasi label node yang Anda tentukan dalam manifes.
Label node | |
---|---|
cloud.google.com/gke-max-shared-clients-per-gpu dan cloud.google.com/gke-gpu-sharing-strategy
|
GKE menjadwalkan workload di node yang tersedia yang cocok dengan kedua label. Jika tidak ada node yang tersedia, GKE akan menggunakan penskalaan otomatis dan penyediaan otomatis node untuk membuat node atau node pool baru yang cocok dengan kedua label tersebut. |
Hanya cloud.google.com/gke-max-shared-clients-per-gpu |
Autopilot: GKE menolak workload. Standar: GKE menjadwalkan workload di node yang tersedia yang cocok dengan label. Jika tidak ada node yang tersedia, GKE akan menggunakan penskalaan otomatis dan penyediaan otomatis node untuk membuat node atau node pool baru yang sesuai dengan label. Secara default, node yang disediakan secara otomatis diberi label dan nilai berikut untuk setiap strategi:
|
Hanya cloud.google.com/gke-gpu-sharing-strategy |
Autopilot: GKE menolak workload. Standar: GKE menjadwalkan workload di node yang tersedia yang menggunakan strategi berbagi tertentu.
|
Proses permintaan GPU yang Anda selesaikan sama untuk strategi berbagi waktu GPU dan NVIDIA MPS.
Jika Anda mengembangkan aplikasi GPU yang berjalan di pembagian waktu GPU atau MPS NVIDIA, Anda hanya dapat meminta satu GPU untuk setiap penampung. GKE menolak permintaan untuk lebih dari satu GPU dalam satu penampung untuk menghindari perilaku yang tidak terduga. Selain itu, jumlah GPU yang diminta dengan berbagi waktu dan NVIDIA MPS bukanlah ukuran daya komputasi yang tersedia untuk penampung.
Tabel berikut menunjukkan hal yang akan terjadi saat Anda meminta jumlah GPU tertentu.
Permintaan GPU yang berlaku untuk berbagi waktu GPU dan MPS NVIDIA | |
---|---|
Satu GPU berbagi waktu atau NVIDIA MPS per container | GKE mengizinkan permintaan tersebut, meskipun node memiliki satu GPU fisik atau beberapa GPU fisik. |
Lebih dari satu GPU berbagi waktu per container | GKE menolak permintaan tersebut. Perilaku ini sama saat meminta lebih dari satu instance GPU multi-instance dalam satu container, karena setiap instance GPU dianggap sebagai GPU fisik yang terpisah. |
Lebih dari satu NVIDIA MPS per container | Berdasarkan jumlah GPU fisik di node, GKE melakukan hal berikut:
|
Jika GKE menolak workload, Anda akan melihat pesan error yang mirip dengan berikut ini:
status:
message: 'Pod Allocate failed due to rpc error: code = Unknown desc = [invalid request
for sharing GPU (time-sharing), at most 1 nvidia.com/gpu can be requested on GPU nodes], which is unexpected'
phase: Failed
reason: UnexpectedAdmissionError
Memantau node GPU berbagi waktu atau NVIDIA MPS
Gunakan Cloud Monitoring untuk memantau performa node MPS NVIDIA atau berbagi waktu GPU. GKE mengirimkan metrik untuk setiap node GPU ke Cloud Monitoring. Metrik node GPU berbagi waktu atau NVIDIA MPS ini berlaku di tingkat node
(node/accelerator/
).
Anda dapat memeriksa metrik berikut untuk setiap node GPU berbagi waktu atau NVIDIA MPS di Cloud Monitoring:
- Siklus tugas (
node/accelerator/duty_cycle
): Persentase waktu selama periode sampel terakhir (10 detik) saat node GPU sedang diproses secara aktif. Rentang dari 1% sampai 100%. - Penggunaan memori (
node/accelerator/memory_used
): Jumlah memori akselerator yang dialokasikan dalam byte untuk setiap node GPU. - Kapasitas memori (
node/accelerator/memory_total
): Total memori akselerator dalam byte untuk setiap node GPU.
Metrik ini berbeda dengan
metrik untuk GPU reguler yang tidak
memiliki node MPS NVIDIA atau berbagi waktu.
Metrik untuk
GPU fisik reguler
berlaku di level
container (container/accelerator
) dan
tidak dikumpulkan untuk container yang dijadwalkan di GPU yang menggunakan berbagi waktu GPU
atau MPS NVIDIA.
Langkah selanjutnya
- Pelajari cara berbagi GPU dengan beberapa workload menggunakan berbagi waktu GPU.
- Pelajari cara berbagi GPU dengan beberapa workload menggunakan NVIDIA MPS.
- Pelajari cara menjalankan GPU multi-instance.
- Pelajari GPU lebih lanjut
- Untuk mengetahui informasi selengkapnya tentang preemption komputasi untuk GPU NVIDIA, lihat Panduan Penyesuaian NVIDIA Pascal.