Dokumen ini menjelaskan karakteristik dan jenis workload terbaik untuk setiap strategi berbagi GPU yang tersedia di Google Kubernetes Engine (GKE), seperti GPU multi-instance, pembagian waktu GPU, dan NVIDIA MPS.
Sebelum membaca dokumen ini, pastikan Anda sudah memahami:
- Konsep Kubernetes seperti Pod, node, deployment, dan namespace.
- Konsep GKE seperti kumpulan node, penskalaan otomatis, dan penyediaan otomatis node.
Cara kerja permintaan GPU di Kubernetes
Kubernetes memungkinkan workload meminta jumlah resource yang dibutuhkan dengan tepat berfungsi. Meskipun Anda dapat meminta unit CPU pecahan untuk beban kerja, Anda tidak dapat meminta unit GPU pecahan. Manifes pod harus meminta resource GPU dalam integer, yang berarti bahwa seluruh GPU fisik dialokasikan ke satu kontainer meskipun container hanya memerlukan sebagian kecil resource agar dapat berfungsi dengan benar. Hal ini tidak efisien dan bisa mahal, terutama saat Anda menjalankan banyak workload dengan persyaratan GPU rendah yang serupa.
Gunakan strategi berbagi GPU untuk meningkatkan pemanfaatan GPU saat beban kerja Anda tidak memerlukan semua resource GPU.
Apa itu strategi berbagi GPU?
Strategi berbagi GPU memungkinkan beberapa container menggunakan yang terpasang dan menghemat biaya operasional. GKE menyediakan Strategi berbagi GPU:
- Multi-instance GPU: GKE membagi satu GPU yang didukung dalam maksimal tujuh {i>slices<i}. Setiap irisan dapat dialokasikan ke satu container pada node secara independen, untuk maksimum tujuh container per GPU. GPU multi-instance menyediakan isolasi hardware di antara workload, serta Kualitas Layanan (QoS) yang dapat diprediksi untuk semua container yang berjalan di GPU.
- Pembagian waktu GPU: GKE menggunakan kemampuan berbagi waktu bawaan yang disediakan oleh GPU NVIDIA dan tumpukan perangkat lunak. Dimulai dengan arsitektur Pascal, NVIDIA GPU mendukung preemption tingkat instruksi. Saat melakukan pengalihan konteks antar proses yang berjalan pada GPU, preemption tingkat instruksi memastikan setiap yang tidak bertanggung jawab. Berbagi waktu GPU menyediakan isolasi tingkat software antara beban kerja dalam hal isolasi ruang alamat, isolasi performa, dan isolasi error.
- NVIDIA MPS: GKE menggunakan NVIDIA Multi-Process Service (MPS). NVIDIA MPS adalah implementasi CUDA API alternatif yang kompatibel dengan biner dirancang untuk secara transparan memungkinkan beban kerja CUDA multi-proses yang kooperatif untuk berjalan serentak pada satu perangkat GPU. GPU dengan NVIDIA MPS menyediakan data level software isolasi dalam hal batas resource (persentase thread aktif dan memori perangkat yang disematkan).
Strategi berbagi GPU mana yang akan digunakan
Tabel berikut meringkas dan membandingkan karakteristik Strategi berbagi GPU:
GPU multi-instance | Pembagian waktu GPU | NVIDIA MPS | |
---|---|---|---|
Umum | Berbagi GPU paralel antar-container | Pengalihan konteks yang cepat | Berbagi GPU paralel antar-container |
Isolasi | Satu GPU dibagi hingga tujuh bagian dan setiap kontainer pada GPU fisik yang sama memiliki komputasi, memori, dan {i>bandwidth<i}. Oleh karena itu, penampung dalam partisi memiliki throughput dan latensi, meskipun container lain memenuhi partisi. |
Setiap container mengakses kapasitas penuh resource fisik GPU dengan melakukan pengalihan konteks antar proses yang berjalan pada GPU. Namun, berbagi waktu tidak memberikan penerapan batas memori antara Tugas bersama dan peralihan konteks yang cepat untuk akses bersama dapat menimbulkan overhead. |
NVIDIA MPS memiliki isolasi resource yang terbatas, tetapi memiliki keuntungan lebih fleksibilitas dalam dimensi lain, misalnya jenis GPU dan unit bersama maksimum, yang menyederhanakan alokasi sumber daya. |
Sesuai untuk workload ini | Direkomendasikan untuk workload yang sedang berjalan secara paralel dan memerlukan ketahanan serta QoS tertentu. Misalnya, saat menjalankan Dengan workload inferensi AI, GPU multi-instance GPU multi-instance memungkinkan beberapa kueri inferensi untuk dijalankan secara bersamaan untuk respons cepat, tanpa memperlambat satu sama lain. |
Direkomendasikan untuk objek yang ramai dan workload interaktif yang memiliki periode tidak ada aktivitas. Workload ini tidak hemat biaya dengan GPU yang sepenuhnya didedikasikan. Dengan menggunakan pembagian waktu, workload mendapatkan akses cepat ke GPU saat berada dalam fase aktif. GPU pembagian waktu optimal untuk skenario guna menghindari gangguan GPU yang mahal ketika isolasi penuh dan Akses GPU mungkin tidak diperlukan, misalnya, saat beberapa pengguna menguji atau beban kerja prototipe. Workload yang menggunakan pembagian waktu perlu menoleransi performa dan latensi tertentu kompromi. |
Direkomendasikan untuk batch processing untuk tugas kecil karena MPS memaksimalkan throughput dan penggunaan GPU secara serentak. MPS memungkinkan tugas batch untuk efisien secara paralel untuk workload berukuran kecil hingga menengah. NVIDIA MPS optimal untuk proses kooperatif yang bertindak sebagai satu aplikasi. Misalnya, tugas MPI dengan paralelisme peringkat antar-MPI. Dengan pekerjaan-pekerjaan tersebut, setiap proses CUDA kecil (biasanya peringkat MPI) dapat berjalan secara serentak di GPU untuk memenuhi seluruh GPU. Workload yang menggunakan CUDA MPS harus menoleransi batasan perlindungan memori dan pembatasan error. |
Pemantauan | Metrik penggunaan GPU tidak tersedia untuk GPU multi-instance. | Gunakan Cloud Monitoring untuk memantau performa pembagian waktu GPU Anda. Untuk mempelajari lebih lanjut metrik yang tersedia, lihat Memantau pembagian waktu GPU atau node NVIDIA MPS. | Gunakan Cloud Monitoring untuk memantau performa NVIDIA MPS Anda. Untuk mempelajari lebih lanjut metrik yang tersedia, lihat Memantau pembagian waktu GPU atau node NVIDIA MPS. |
Meminta GPU bersama dalam workload | Menjalankan GPU multi-instance | Menjalankan GPU dengan pembagian waktu | Menjalankan GPU dengan NVIDIA MPS |
Untuk memaksimalkan penggunaan GPU, gabungkan berbagi GPU dan strategi. Untuk masing-masing, partisi GPU multi-instance, menggunakan {i>time-sharing<i} atau NVIDIA MPS. Selanjutnya, Anda dapat menjalankan beberapa container pada setiap partisi, container yang memiliki akses ke resource pada partisi tersebut. Sebaiknya Anda menggunakan salah satu kombinasi berikut:
- Pembagian waktu GPU dan GPU multi-instance.
- GPU multi-instance dan NVIDIA MPS.
Cara kerja strategi berbagi GPU
Anda dapat menentukan jumlah maksimum container yang diizinkan untuk membagikan GPU fisik:
- Pada cluster Autopilot, hal ini dikonfigurasi dalam spesifikasi workload Anda.
- Pada cluster Standar, konfigurasi ini dikonfigurasi saat Anda membuat kumpulan node baru dengan GPU terpasang. Setiap GPU dalam kumpulan node dibagikan berdasarkan setelan yang Anda tentukan pada level node pool.
Bagian berikut menjelaskan perilaku penjadwalan dan operasi setiap GPU strategi berbagi.
GPU multi-instance
Anda dapat meminta GPU multi-instance dalam beban kerja dengan menentukan
Label cloud.google.com/gke-gpu-partition-size
dalam spesifikasi Pod
Kolom nodeSelector
, di bagian spec: nodeSelector
.
GKE menjadwalkan beban kerja ke node yang sesuai dan tersedia dengan mencocokkan label-label ini. Jika tidak ada node yang sesuai, GKE akan menggunakan penskalaan otomatis dan penyediaan otomatis node untuk membuat node atau kumpulan node baru yang cocok label.
Pembagian waktu GPU atau NVIDIA MPS
Anda dapat meminta pembagian waktu GPU atau NVIDIA MPS dalam beban kerja 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
: Pilih node yang menggunakan strategi berbagi waktu (time-sharing) atau NVIDIA MPS untuk GPU.
Tabel berikut menjelaskan bagaimana perilaku penjadwalan berubah berdasarkan kombinasi node label yang ditentukan 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 tersedia yang sesuai 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 tersedia yang sesuai pada 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. Menurut default, node yang disediakan otomatis akan 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 dan menggunakan strategi berbagi yang spesifik.
|
Proses permintaan GPU yang Anda selesaikan sama untuk pembagian waktu GPU dan Strategi NVIDIA MPS.
Jika Anda mengembangkan aplikasi GPU yang berjalan pada GPU {i>time-sharing<i} atau NVIDIA MPS, Anda hanya dapat meminta satu GPU untuk setiap kontainer. GKE menolak permintaan untuk lebih dari satu GPU dalam untuk menghindari perilaku yang tidak diharapkan. Selain itu, jumlah GPU yang diminta dengan pembagian waktu, dan NVIDIA MPS bukanlah ukuran untuk kekuatan komputasi yang tersedia untuk container.
Tabel berikut menunjukkan hal yang akan terjadi saat Anda meminta jumlah GPU tertentu.
Permintaan GPU yang berlaku untuk pembagian waktu GPU dan NVIDIA MPS | |
---|---|
Satu pembagian waktu GPU atau NVIDIA MPS per container | GKE mengizinkan permintaan, meskipun node tersebut memiliki satu GPU fisik atau beberapa GPU fisik. |
Lebih dari satu pembagian waktu GPU per penampung | GKE menolak permintaan tersebut. Perilaku ini sama saat meminta lebih dari satu GPU multi-instance dalam kontainer, karena setiap instance GPU dianggap GPU fisik diskrit. |
Lebih dari satu NVIDIA MPS per container | Berdasarkan jumlah GPU fisik dalam node, GKE melakukan berikut ini:
|
Jika GKE menolak beban kerja, Anda akan melihat pesan error yang serupa menjadi sebagai berikut:
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 berbagi waktu GPU atau NVIDIA MPS
Gunakan Cloud Monitoring untuk memantau performa
Berbagi waktu GPU atau node NVIDIA MPS. GKE mengirimkan metrik untuk setiap
node GPU ke Cloud Monitoring. Metrik node pembagian waktu GPU atau NVIDIA MPS ini berlaku pada tingkat node
(node/accelerator/
).
Anda dapat memeriksa metrik berikut untuk setiap pembagian waktu GPU atau node NVIDIA MPS dalam Cloud Monitoring:
- Siklus tugas (
node/accelerator/duty_cycle
): Persentase waktu selama periode sampel terakhir (10 detik) saat node GPU secara aktif memprosesnya. Rentang dari 1% sampai 100%. - Penggunaan memori (
node/accelerator/memory_used
): Jumlah akselerator dan memori yang dialokasikan dalam byte untuk setiap node GPU. - Kapasitas memori (
node/accelerator/memory_total
): Akselerator total dan memori dalam byte untuk setiap node GPU.
Metrik ini berbeda dengan
metrik untuk GPU reguler yang tidak
{i>time-shared <i}atau NVIDA MPS.
Metrik untuk
GPU fisik biasa
terapkan di penampung
level (container/accelerator
) dan
tidak dikumpulkan untuk container yang dijadwalkan di GPU yang menggunakan pembagian waktu GPU
atau NVIDIA MPS.
Langkah selanjutnya
- Pelajari cara berbagi GPU dengan beberapa beban kerja menggunakan pembagian waktu GPU.
- Pelajari cara berbagi GPU dengan beberapa beban kerja 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.