Tentang strategi berbagi GPU di GKE


Halaman ini menjelaskan karakteristik dan jenis workload terbaik untuk masing-masing strategi berbagi GPU yang tersedia di Google Kubernetes Engine (GKE), seperti GPU multi-instance, pembagian waktu GPU, dan NVIDIA MPS.

Halaman ini mengasumsikan bahwa Anda sudah memahami:

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.

Oleh karena itu, sebaiknya Anda menggunakan Strategi berbagi GPU untuk meningkatkan pemanfaatan GPU saat beban kerja Anda tidak menggunakan 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 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 khusus. 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

Jika ingin memaksimalkan penggunaan GPU, Anda dapat menggabungkan fitur berbagi GPU strategi untuk menggunakan pembagian waktu atau NVIDIA MPS untuk setiap GPU partisi. 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.

Berbagi 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 yang tersedia dan 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:

  • Pembagian waktu GPU: cloud.google.com/gke-gpu-sharing-strategy=TIME_SHARING
  • NVIDIA MPS: cloud.google.com/gke-gpu-sharing-strategy=MPS
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.

  • Jika ada beberapa kumpulan node bersama dengan nilai yang berbeda untuk cloud.google.com/gke-max-shared-clients-per-gpu, dapat dijadwalkan pada node mana pun yang tersedia.
  • Jika ada tidak ada node yang tersedia di kumpulan node mana pun, autoscaler cluster akan meningkatkan skala kumpulan node dengan nilai terendah untuk cloud.google.com/gke-max-shared-clients-per-gpu.
  • Jika semua kumpulan node mencapai kapasitasnya, penyediaan otomatis node akan membuat kumpulan node baru dengan nilai default cloud.google.com/gke-max-shared-clients-per-gpu=2

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:

  • GKE mengizinkan permintaan saat hanya memiliki satu GPU fisik.
  • GKE menolak jika node memiliki beberapa GPU fisik. Perilaku ini sama saat meminta lebih dari satu GPU multi-instance dalam kontainer, karena setiap instance GPU dianggap GPU fisik diskrit.

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