Tentang strategi berbagi GPU di GKE


Halaman ini menjelaskan dan membandingkan strategi berbagi GPU yang tersedia di Google Kubernetes Engine (GKE). Halaman ini mengasumsikan bahwa Anda telah memahami konsep Kubernetes, seperti Pod, node, deployment, dan namespace, serta konsep GKE seperti kumpulan node, penskalaan otomatis, dan penyediaan otomatis node.

Cara kerja permintaan GPU di Kubernetes

Kubernetes memungkinkan beban kerja meminta jumlah resource yang dibutuhkan agar dapat berfungsi dengan tepat. Meskipun dapat meminta unit CPU pecahan untuk workload, Anda tidak dapat meminta unit GPU pecahan. Manifes pod harus meminta resource GPU dalam bilangan bulat, yang berarti seluruh GPU fisik dialokasikan ke satu container meskipun container hanya memerlukan sebagian kecil resource agar dapat berfungsi dengan benar. Cara ini tidak efisien dan mungkin mahal, terutama saat Anda menjalankan beberapa workload dengan persyaratan GPU yang serupa dan rendah. Sebaiknya gunakan strategi berbagi GPU untuk meningkatkan pemakaian GPU saat beban kerja Anda tidak menggunakan semua resource GPU.

Apa itu strategi berbagi GPU?

Strategi berbagi GPU memungkinkan beberapa container 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 menyediakan isolasi hardware di 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. Dimulai dengan arsitektur Pascal, GPU NVIDIA mendukung preemption level instruksi. Saat melakukan pengalihan konteks antarproses yang berjalan di GPU, preemption tingkat instruksi memastikan setiap proses mendapatkan timelice yang adil. Berbagi waktu GPU menyediakan isolasi tingkat software antara workload dalam hal isolasi ruang alamat, isolasi performa, dan isolasi error.
  • NVIDIA MPS: GKE menggunakan NVIDIA's Multi-Process Service (MPS). NVIDIA MPS adalah implementasi alternatif yang kompatibel dengan biner dari CUDA API yang dirancang untuk secara transparan mengaktifkan workload CUDA multi-proses kooperatif agar dijalankan serentak pada 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 mana yang akan digunakan

Tabel berikut merangkum dan membandingkan karakteristik strategi berbagi GPU yang tersedia:

GPU multi-instance Pembagian waktu GPU MPS NVIDIA
Umum Berbagi GPU paralel di antara container Pengalihan konteks yang cepat. Berbagi GPU paralel di antara container
Isolasi Satu GPU dibagi menjadi tujuh bagian dan setiap container pada GPU fisik yang sama memiliki komputasi, memori, dan bandwidth khusus. Oleh karena itu, container dalam partisi memiliki throughput dan latensi yang dapat diprediksi, bahkan saat container lain memenuhi partisi lain.

Setiap container mengakses kapasitas penuh GPU fisik dasar dengan melakukan peralihan konteks antar-proses yang berjalan di 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 mendapatkan fleksibilitas yang lebih besar 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 yang membutuhkan ketahanan serta QoS tertentu. Misalnya, saat menjalankan workload inferensi AI, GPU multi-instance GPU multi-instance memungkinkan beberapa kueri inferensi berjalan secara bersamaan untuk respons cepat, tanpa memperlambat satu sama lain.

Direkomendasikan untuk workload burst dan interaktif yang memiliki periode tidak ada aktivitas. Workload ini tidak hemat biaya dengan GPU khusus. Dengan berbagi waktu, workload akan mendapatkan akses cepat ke GPU saat berada dalam fase aktif.

Pembagian waktu GPU optimal untuk skenario di mana isolasi penuh dan akses GPU berkelanjutan mungkin tidak diperlukan, misalnya, saat beberapa pengguna menguji atau membuat prototipe workload tanpa membuat GPU yang mahal.

Workload yang menggunakan pembagian waktu perlu menoleransi gangguan performa dan latensi tertentu.

Direkomendasikan untuk batch processing untuk tugas-tugas kecil karena MPS memaksimalkan throughput dan penggunaan GPU secara serentak. MPS memungkinkan tugas batch untuk diproses secara efisien secara paralel untuk workload berukuran kecil hingga sedang.

NVIDIA MPS optimal untuk proses kerja sama yang bertindak sebagai satu aplikasi. Misalnya, pekerjaan MPI dengan paralelisme antar-MPI. Dengan tugas ini, setiap proses CUDA kecil (biasanya peringkat MPI) dapat berjalan secara bersamaan di GPU untuk sepenuhnya memenuhi seluruh GPU.

Beban kerja 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 MPS NVIDIA. Gunakan Cloud Monitoring untuk memantau performa NVIDIA MPS Anda. Untuk mempelajari lebih lanjut metrik yang tersedia, lihat Memantau pembagian waktu GPU atau node MPS NVIDIA.
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 strategi berbagi GPU untuk menggunakan berbagi waktu atau NVIDIA MPS untuk setiap partisi GPU multi-instance. Selanjutnya, Anda dapat menjalankan beberapa container di setiap partisi, dan container tersebut akan berbagi akses ke resource di partisi tersebut. Sebaiknya gunakan salah satu kombinasi berikut:

  • GPU multi-instance dan pembagian waktu GPU.
  • Multi-instance GPU 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 beban kerja Anda. Pada cluster Standar, hal ini dikonfigurasi saat Anda membuat kumpulan node baru dengan GPU terpasang. Setiap GPU dalam kumpulan node digunakan secara bersama berdasarkan setelan yang Anda tentukan pada level kumpulan node.

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 spesifikasi Pod, di bagian spec: nodeSelector.

GKE menjadwalkan beban kerja dalam node yang tersedia dan cocok dengan label tersebut. Jika tidak ada node yang tersedia, GKE akan menggunakan penskalaan otomatis dan penyediaan otomatis node untuk membuat node atau kumpulan node baru yang cocok dengan label ini.

Pembagian waktu GPU atau NVIDIA MPS

Anda dapat meminta pembagian waktu GPU atau NVIDIA MPS 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 dalam node yang tersedia yang cocok dengan kedua label tersebut.

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 beban kerja.

Standar: GKE menjadwalkan workload di node 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:

  • 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 beban kerja.

Standar: GKE menjadwalkan workload di node yang tersedia yang menggunakan strategi berbagi spesifik.

  • Jika ada beberapa kumpulan node bersama dengan nilai yang berbeda untuk cloud.google.com/gke-max-shared-clients-per-gpu, beban kerja dapat dijadwalkan pada setiap node yang tersedia.
  • Jika tidak ada node yang tersedia di kumpulan node, penskalaan otomatis cluster akan meningkatkan skala kumpulan node dengan nilai terendah untuk cloud.google.com/gke-max-shared-clients-per-gpu.
  • Jika semua kumpulan node sudah 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 pembagian waktu GPU atau NVIDIA MPS, Anda hanya dapat meminta satu GPU untuk setiap penampung. GKE menolak permintaan lebih dari satu GPU dalam container untuk menghindari perilaku yang tidak terduga. Hal ini karena jumlah pembagian waktu GPU dan NVIDIA MPS yang diminta bukan merupakan ukuran daya 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 termasuk meminta lebih dari satu instance GPU multi-instance dalam sebuah container, karena setiap instance GPU dianggap sebagai GPU fisik terpisah.

Lebih dari satu NVIDIA MPS per container

Berdasarkan jumlah GPU fisik dalam node, GKE melakukan hal berikut:

  • GKE mengizinkan permintaan jika node hanya memiliki satu GPU fisik.
  • GKE menolak permintaan jika node memiliki beberapa GPU fisik, seperti meminta lebih dari satu instance GPU multi-instance dalam sebuah container. Penolakan ini terjadi karena setiap instance GPU dianggap sebagai GPU fisik terpisah.

Jika GKE menolak beban kerja, Anda akan melihat pesan error seperti 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 pembagian waktu GPU atau node NVIDIA MPS

Gunakan Cloud Monitoring untuk memantau performa node berbagi waktu GPU atau node NVIDIA MPS. GKE mengirimkan metrik untuk setiap node GPU ke Cloud Monitoring. Metrik ini berbeda dengan metrik untuk GPU reguler yang bukan node berbagi waktu atau node NVIDA MPS.

Anda dapat memeriksa metrik berikut untuk setiap pembagian waktu GPU atau node NVIDIA MPS di Cloud Monitoring:

  • Siklus tugas (node/accelerator/duty_cycle): Persentase waktu selama periode sampel terakhir (10 detik) saat node GPU secara aktif diproses. 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 pembagian waktu GPU atau node NVIDIA MPS ini berlaku pada level node (node/accelerator/), dan metrik untuk GPU fisik reguler berlaku pada level container (container/accelerator). Metrik untuk metrik GPU fisik reguler tidak dikumpulkan untuk container yang dijadwalkan pada GPU yang menggunakan pembagian waktu GPU atau NVIDIA MPS.

Langkah selanjutnya