Anda dapat menggunakan alokasi resource dinamis (DRA) untuk mengalokasikan GPU ke workload Google Kubernetes Engine (GKE). Dokumen ini menjelaskan dasar-dasar DRA, cara menggunakan DRA di GKE, dan manfaat menggunakan DRA.
Dokumen ini ditujukan untuk peran berikut:
- Administrator platform yang ingin mengurangi kompleksitas dan overhead penyiapan infrastruktur dengan perangkat hardware khusus.
- Operator aplikasi dan Data engineer yang menjalankan workload seperti AI/ML atau komputasi berperforma tinggi (HPC).
Anda harus sudah memahami hal berikut:
Pengantar DRA
DRA adalah fitur Kubernetes bawaan yang memungkinkan Anda meminta, mengalokasikan, dan berbagi hardware secara fleksibel di cluster Anda di antara Pod dan container. DRA meningkatkan pengalaman mengalokasikan hardware terpasang, seperti akselerator, dengan memungkinkan vendor perangkat dan administrator platform mendeklarasikan class perangkat yang dapat diminta dan dialokasikan. Operator aplikasi dapat meminta konfigurasi perangkat tertentu dalam class tersebut, lalu meminta konfigurasi tersebut dalam workload mereka. Kubernetes dan GKE mengelola penjadwalan Pod, penetapan node, dan alokasi perangkat berdasarkan permintaan workload.
Misalnya, administrator platform dapat menentukan class perangkat yang hanya memiliki GPU NVIDIA A100. Operator aplikasi kemudian dapat memfilter perangkat dalam class perangkat tersebut berdasarkan persyaratan workload, seperti memfilter untuk memori GPU minimal 80 GB. Saat operator aplikasi men-deploy workload yang meminta konfigurasi yang difilter, GKE akan menempatkan Pod di node yang memenuhi kriteria yang dipilih. Dalam contoh ini, GKE menemukan node yang memiliki GPU A100 (80 GB) yang tersedia. Operator aplikasi tidak perlu memilih konfigurasi perangkat atau node tertentu dalam manifes workload.
Manfaat DRA
Tanpa DRA, alokasi perangkat hardware di Kubernetes bergantung pada plugin perangkat. Untuk melampirkan resource hardware ke Pod menggunakan plugin perangkat, Anda menggunakan label node untuk menempatkan Pod di node tertentu. Selain itu, untuk mendedikasikan resource seluruh node ke satu Pod, Anda meminta jumlah perangkat yang terpasang ke node.
Dengan DRA, alokasi perangkat ke Pod mirip dengan alokasi volume untuk penyimpanan. Anda menentukan class perangkat, meminta perangkat dalam class tersebut, lalu menetapkan perangkat yang diminta ke workload. DRA menyediakan platform yang jauh lebih dapat diperluas untuk memfilter perangkat berdasarkan workload dan kebutuhan bisnis. Pendekatan DRA menggunakan ekspresi dan template untuk mengklaim hardware dan menjadwalkan Pod memiliki manfaat berikut:
- Alokasi perangkat deklaratif: administrator platform dapat menentukan konfigurasi perangkat untuk jenis workload atau tim tertentu.
- Mengurangi kompleksitas lintas tim: saat administrator platform menyediakan node yang memiliki konfigurasi hardware khusus, operator aplikasi tidak perlu mengetahui node mana yang memiliki konfigurasi tertentu. Administrator platform tidak perlu memberi label pada node atau mengomunikasikan informasi tentang node dan perangkat tertentu kepada operator.
- Mengurangi kompleksitas developer: Kubernetes menjadwalkan Pod berdasarkan konfigurasi perangkat yang direferensikan. Operator aplikasi tidak perlu memilih node tertentu dalam workload mereka dan tidak perlu memastikan bahwa setiap Pod meminta jumlah perangkat yang terpasang ke node tersebut.
- Pengelolaan infrastruktur terpusat: administrator platform dapat menentukan konfigurasi hardware secara terpusat yang memenuhi persyaratan bisnis tertentu. Misalnya, administrator platform dapat mendeklarasikan konfigurasi berperforma tinggi yang memiliki GPU H100 bersama dengan konfigurasi inferensi kecil yang memiliki GPU Tesla T4.
- Pemilihan hardware yang fleksibel: Anda dapat menggunakan ekspresi CEL untuk memfilter perangkat yang memiliki atribut tertentu. Penggunaan ekspresi memberikan fleksibilitas untuk memfilter perangkat yang optimal untuk workload tertentu.
Kapan harus menggunakan DRA
Alasan utama menggunakan DRA di GKE adalah fleksibilitas yang memungkinkan Anda meminta perangkat untuk workload. Anda dapat menulis manifes sekali dan men-deploy workload ke cluster yang berbeda dengan jenis perangkat yang berbeda tanpa perlu mengubah manifes. Fleksibilitas ini ideal untuk kasus penggunaan seperti berikut:
- Meningkatkan ketersediaan GPU: untuk workload yang memerlukan akses ke hardware GPU , Anda dapat menggunakan DRA untuk meminta GPU apa pun yang tersedia di cluster , bukan harus menentukan model GPU. Jika workload tersebut memiliki persyaratan memori GPU (VRAM) tertentu, Anda dapat meminta GPU apa pun di cluster yang memiliki jumlah memori minimum. Jenis permintaan fleksibel ini memperluas kumpulan node GPU yang dapat dijalankan oleh workload, sehingga mengurangi risiko workload tidak dijadwalkan karena resource tidak tersedia.
Mengoptimalkan ketersediaan node selama penskalaan: jumlah perangkat yang diperlukan oleh workload dapat berubah bergantung pada faktor seperti jenis perangkat dan kemampuannya. Anda dapat menggunakan GKE ComputeClasses untuk menempatkan Pod yang dipercepat di node pool tertentu berdasarkan ketersediaan perangkat. Kemudian, Anda dapat mengonfigurasi Pod untuk mengklaim perangkat di node mana pun tempat GKE menempatkan Pod.
Menggunakan DRA dengan ComputeClasses memungkinkan Anda meminimalkan risiko workload yang tidak terjadwal sekaligus membantu Anda menjalankan workload di hardware yang dioptimalkan.
Terminologi
Kubernetes open source dan penyedia Kubernetes terkelola seperti GKE menggunakan jenis DRA API inti berikut:
- ResourceSlice
- ResourceSlice mencantumkan satu atau beberapa perangkat hardware di cluster yang dapat diakses oleh node. Misalnya, di node yang dapat mengakses satu GPU, ResourceSlice mencantumkan GPU dan nama node. Driver perangkat DRA di setiap node membuat ResourceSlice. Penjadwal Kubernetes menggunakan ResourceSlice untuk menentukan perangkat mana yang akan dialokasikan untuk memenuhi permintaan workload.
- DeviceClass
-
DeviceClass menentukan kategori perangkat, seperti GPU, yang tersedia untuk diminta oleh workload.
Beberapa driver perangkat menyediakan DeviceClass bawaan, seperti DeviceClass
gpu.nvidia.comuntuk GPU NVIDIA. Administrator platform juga dapat membuat DeviceClass kustom yang menentukan konfigurasi perangkat tertentu. - ResourceClaim
-
ResourceClaim memungkinkan Pod atau pengguna meminta resource hardware dengan memfilter parameter tertentu dalam DeviceClass. Saat workload mereferensikan ResourceClaim, Kubernetes akan menetapkan perangkat yang cocok dengan parameter yang ditentukan ke ResourceClaim tersebut.
Misalnya, pertimbangkan skenario saat Anda membuat ResourceClaim untuk satu GPU A100 (40 GB), lalu men-deploy workload yang memilih ResourceClaim tersebut. Kubernetes menetapkan GPU A100 (40 GB) yang tersedia ke ResourceClaim dan menjadwalkan Pod Anda di node yang dapat mengakses GPU tersebut.
- ResourceClaimTemplate
-
ResourceClaimTemplate menentukan template yang dapat digunakan Pod untuk membuat ResourceClaim per-Pod baru secara otomatis. ResourceClaimTemplate berguna jika Anda memiliki beberapa workload yang memerlukan akses ke konfigurasi perangkat serupa, terutama saat menggunakan pengontrol workload seperti Deployment atau StatefulSet.
Operator aplikasi men-deploy ResourceClaimTemplate, lalu mereferensikan template dalam workload. Kubernetes membuat ResourceClaim untuk setiap Pod berdasarkan template yang ditentukan, mengalokasikan perangkat, dan menjadwalkan Pod. Saat Pod dihentikan, Kubernetes akan membersihkan ResourceClaim yang sesuai.
Untuk mengetahui informasi selengkapnya tentang jenis DRA API, lihat terminologi DRA.
Cara kerja DRA
Penggunaan DRA di cluster dan workload Anda adalah proses yang mirip dengan penggunaan StorageClass, PersistentVolumeClaim, dan PersistentVolume untuk menyediakan volume secara dinamis untuk Pod.
Diagram berikut menunjukkan langkah-langkah yang dilakukan oleh administrator cluster dan operator aplikasi untuk mengalokasikan perangkat menggunakan DRA:
Dalam diagram ini, administrator cluster dan operator aplikasi melakukan hal berikut:
- Administrator cluster menginstal driver perangkat yang mendukung DRA di node.
- Administrator cluster membuat DeviceClass yang memfilter hardware yang memenuhi persyaratan tertentu, seperti semua GPU dengan memori lebih dari 40 GB. Beberapa perangkat mungkin juga menyertakan DeviceClass bawaan.
- Operator aplikasi membuat ResourceClaimTemplate atau ResourceClaim yang meminta konfigurasi perangkat. Kasus penggunaan utama untuk setiap jenis klaim adalah sebagai berikut:
- ResourceClaim memungkinkan beberapa Pod berbagi akses ke perangkat yang sama.
- ResourceClaimTemplate memungkinkan beberapa Pod mengakses perangkat yang terpisah dan serupa dengan membuat ResourceClaim per-Pod secara otomatis.
- Operator aplikasi menambahkan ResourceClaimTemplate atau ResourceClaim ke manifes workload mereka.
- Operator aplikasi men-deploy workload.
Saat Anda men-deploy workload yang mereferensikan ResourceClaimTemplate atau ResourceClaim, Kubernetes akan melakukan langkah-langkah penjadwalan berikut:
- Jika workload mereferensikan ResourceClaimTemplate, Kubernetes akan membuat objek
ResourceClaimbaru untuk setiap instance workload (misalnya, setiap replika dalam Deployment). - Penjadwal Kubernetes menggunakan ResourceSlice di cluster untuk mengalokasikan perangkat yang tersedia dan memenuhi syarat ke ResourceClaim setiap Pod.
- Penjadwal menempatkan setiap Pod di node yang memiliki akses ke perangkat yang dialokasikan ke ResourceClaim Pod.
kubeletdi node tujuan memanggil driver DRA di node untuk melampirkan hardware yang dialokasikan ke Pod guna memenuhi permintaan resource-nya.
Kapan harus menggunakan ResourceClaim dan ResourceClaimTemplate
Anda dapat menggunakan ResourceClaim atau ResourceClaimTemplate untuk menunjukkan kepada Kubernetes bahwa Anda menginginkan perangkat yang memenuhi persyaratan tertentu. Saat ResourceClaim direferensikan di Pod, Kubernetes akan mengalokasikan perangkat ke resource API ResourceClaim yang sesuai di server Kubernetes API. Alokasi ini terjadi terlepas dari apakah Anda membuat ResourceClaim atau Kubernetes membuat ResourceClaim dari ResourceClaimTemplate.
Jika Anda membuat ResourceClaim, lalu mereferensikannya di beberapa Pod, semua Pod tersebut dapat mengakses perangkat yang dialokasikan Kubernetes untuk ResourceClaim tersebut. Misalnya, akses bersama ini dapat terjadi jika Anda mereferensikan ResourceClaim tertentu dalam manifes Deployment yang memiliki beberapa replika. Namun, jika perangkat yang dialokasikan tidak dikonfigurasi untuk dibagikan oleh beberapa proses, akses perangkat bersama ini di seluruh Pod dapat menyebabkan perilaku yang tidak diinginkan.
Untuk mengalokasikan perangkat terpisah ke Pod, Anda dapat menggunakan ResourceClaimTemplate, yang merupakan template yang digunakan Kubernetes untuk membuat ResourceClaim individual secara otomatis. Misalnya, jika Anda mereferensikan ResourceClaimTemplate dalam Deployment yang memiliki beberapa replika, Kubernetes akan membuat ResourceClaim terpisah untuk setiap Pod yang direplikasi. Alhasil, setiap Pod mendapatkan perangkatnya sendiri yang dialokasikan, bukan berbagi akses ke perangkat dengan Pod lain. ResourceClaim yang dibuat otomatis ini terikat dengan masa pakai Pod yang sesuai, dan akan dihapus saat Pod dihentikan. Jika Anda memiliki Pod independen yang memerlukan akses ke konfigurasi perangkat serupa, gunakan ResourceClaimTemplate untuk mengalokasikan perangkat ke setiap Pod secara terpisah.
Tabel berikut menjelaskan beberapa perbedaan antara membuat ResourceClaim secara manual dan membiarkan Kubernetes membuat ResourceClaim dari ResourceClaimTemplate:
| ResourceClaim yang dibuat secara manual | ResourceClaim yang dibuat secara otomatis |
|---|---|
| Anda kelola | Dikelola oleh Kubernetes |
| Memberikan akses ke perangkat yang sama dari beberapa Pod | Memberikan akses ke perangkat dari satu Pod |
| Ada di cluster secara independen dari Pod | Terikat dengan siklus proses Pod yang sesuai |
| Ideal untuk beberapa workload yang perlu berbagi perangkat tertentu | Ideal untuk beberapa workload yang memerlukan akses perangkat independen |
Perbandingan DRA dengan alokasi perangkat manual
DRA membuat alokasi perangkat terpasang menjadi pengalaman yang mirip dengan penyediaan PersistentVolume secara dinamis. Kubernetes juga mendukung alokasi perangkat menggunakan plugin perangkat. Metode ini mencakup langkah-langkah berikut:
- Administrator cluster membuat node yang memiliki perangkat terpasang, seperti GPU.
- Administrator cluster mengomunikasikan informasi tentang node tertentu dan perangkat terpasangnya kepada operator workload.
- Operator workload meminta perangkat dalam manifes workload sebagai berikut:
- Pilih node yang memiliki konfigurasi perangkat yang diperlukan, seperti model GPU, menggunakan kolom
nodeSelector. - Tentukan jumlah perangkat yang tepat untuk digunakan oleh container menggunakan kolom
resourcesdalam spesifikasi Pod.
- Pilih node yang memiliki konfigurasi perangkat yang diperlukan, seperti model GPU, menggunakan kolom
Metode alokasi manual ini mengharuskan operator aplikasi dan administrator cluster berkomunikasi tentang node atau node pool tertentu yang memiliki konfigurasi perangkat tertentu. Mereka harus mengoordinasikan permintaan workload agar sesuai dengan perangkat di node, atau deployment akan gagal. Sebagai perbandingan, DRA memungkinkan Anda menggunakan ekspresi untuk memfilter perangkat secara fleksibel berdasarkan atribut, dan tidak mengharuskan operator workload mengetahui konfigurasi node yang tepat di cluster.
Tabel berikut membandingkan DRA dengan plugin perangkat:
| DRA | Alokasi manual |
|---|---|
| Pemilihan perangkat yang fleksibel menggunakan ekspresi CEL | Pemilihan node tertentu menggunakan pemilih dan permintaan resource |
| Keputusan penjadwalan dibuat oleh Kubernetes | Keputusan penjadwalan dibuat oleh operator menggunakan pemilih node |
| Pemfilteran perangkat terpisah dari pembuatan workload | Pemfilteran perangkat harus dilakukan dalam manifes workload |
| Pemfilteran perangkat terpusat dan class berbasis kebutuhan, yang dikelola oleh administrator platform | Pemfilteran perangkat terisolasi oleh operator aplikasi |
| Operator aplikasi tidak perlu mengetahui kapasitas node, informasi label node, atau model perangkat terpasang untuk setiap node | Operator aplikasi harus mengetahui node mana yang memiliki model dan jumlah perangkat tertentu yang terpasang. |
DRA dan penskalaan otomatis infrastruktur
Untuk menyesuaikan jumlah node secara otomatis dalam node pool mode Standar, Anda menggunakan autoscaler cluster. Anda dapat mengaktifkan autoscaler cluster di node pool yang dibuat secara manual, termasuk node pool yang memiliki driver DRA.
Untuk node pool yang menggunakan DRA, penggunaan perangkat memengaruhi cara autoscaler cluster menambahkan dan menghapus node dalam node pool. Untuk menghitung penggunaan perangkat di node pool, autoscaler cluster mempertimbangkan faktor-faktor berikut:
- Semua perangkat dalam a resource pool harus bersifat lokal untuk node tertentu. Jika ResourceSlice memiliki kumpulan perangkat yang terpasang ke beberapa node, autoscaler cluster akan mengabaikan perangkat tersebut.
- Semua perangkat di node pool sama pentingnya dan identik.
- Perangkat DRA memiliki prioritas lebih tinggi daripada CPU atau memori. Di node pool DRA, autoscaler cluster mengabaikan penggunaan CPU dan memori.
Faktor-faktor ini mungkin berarti Anda melihat perilaku penurunan skala yang berbeda di node pool DRA dibandingkan di node pool lainnya.
Perangkat GKE yang didukung untuk DRA
Tabel berikut menjelaskan perangkat yang dapat Anda alokasikan ke workload dengan DRA di GKE:
| Perangkat yang didukung untuk DRA | |
|---|---|
| GPU | Jenis GPU apa pun yang tersedia di lokasi Anda. Untuk mengetahui informasi selengkapnya, lihat Lokasi GPU. |
| Antarmuka jaringan | Beberapa jenis antarmuka jaringan, seperti antarmuka yang mendukung RDMA, dengan menginstal driver DRANET terkelola. Untuk mengetahui informasi selengkapnya, lihat Mengalokasikan resource jaringan menggunakan DRANET terkelola GKE. |
Batasan
Batasan berikut berlaku saat Anda menggunakan DRA:
Mode operasi: DRA hanya tersedia di cluster mode Standar.
Jenis akselerator: selama Pratinjau, DRA di GKE hanya mendukung GPU.
GPU:
- Anda tidak dapat menggunakan GPU berbagi waktu, GPU multi-instance, atau Multi-Process Service (MPS).
- Untuk node yang menggunakan driver GPU DRA, Anda tidak dapat menggunakan paket metrik NVIDIA Data Center GPU Manager (DCGM) terkelola untuk mengirim metrik DCGM ke Cloud Monitoring.
- Driver GPU untuk DRA dimiliki oleh NVIDIA, bukan oleh GKE. Untuk mengetahui informasi selengkapnya, lihat dokumentasi NVIDIA.
Antarmuka jaringan (Pratinjau): lihat Batasan di "Mengalokasikan resource jaringan menggunakan DRANET terkelola GKE".
Autoscaling:
- Untuk driver DRA pihak ketiga yang Anda instal, autoscaler cluster mengharuskan node pool Anda memiliki setidaknya satu node. Untuk
mencegah node pool yang menggunakan driver pihak ketiga menskalakan ke nol
node, tetapkan
jumlah minimum node
ke setidaknya
1. - Autoscaler cluster mungkin tidak berfungsi dengan benar dengan driver DRA pihak ketiga. Jika Anda menggunakan driver pihak ketiga, pastikan driver tersebut hanya memublikasikan informasi untuk perangkat yang bersifat lokal untuk node tertentu.
- Untuk DaemonSet di node pool autoscaling yang menggunakan ResourceClaim statis untuk berbagi akses perangkat di antara Pod, autoscaling mendukung hingga 128 Pod DaemonSet. Untuk menghindari batasan ini, lakukan salah satu langkah berikut:
- Cegah node pool menskalakan ke lebih dari 128 node dengan menetapkan jumlah maksimum node.
- Gunakan kolom
adminAccess(beta), di ResourceClaim, yang memungkinkan DaemonSet mengakses perangkat yang sedang digunakan.
- Jika Pod Anda mereferensikan ResourceClaim dan memiliki PriorityClass yang menetapkan kebijakan preemption ke
PreemptLowerPriority, latensi autoscaling mungkin meningkat.PreemptLowerPriorityadalah kebijakan preemption default untuk PriorityClass, jadi pastikan PriorityClass Anda menetapkan kolompreemptionPolicysecara eksplisit keNever. Untuk mengetahui informasi selengkapnya, lihat PriorityClass yang tidak melakukan preemption.
- Untuk driver DRA pihak ketiga yang Anda instal, autoscaler cluster mengharuskan node pool Anda memiliki setidaknya satu node. Untuk
mencegah node pool yang menggunakan driver pihak ketiga menskalakan ke nol
node, tetapkan
jumlah minimum node
ke setidaknya
Keterampilan yang direkomendasikan untuk memahami dan menggunakan DRA
Bagian ini memberikan rekomendasi untuk administrator platform atau operator aplikasi yang ingin menggunakan DRA untuk mengalokasikan perangkat ke workload. DRA mengubah metode permintaan perangkat terpasang secara signifikan, baik di GKE maupun di Kubernetes. Untuk mendapatkan manfaat dari kasus penggunaan yang lebih canggih, seperti penggantian lintas perangkat atau pemfilteran dan pemilihan perangkat terperinci, pertimbangkan panduan berikut:
Pelajari CEL: dengan DRA, Anda dapat menggunakan ekspresi CEL untuk melakukan pemfilteran perangkat terperinci dalam permintaan alokasi resource dan DeviceClass. Referensi berikut dapat membantu Anda mempelajari CEL:
Pelajari ComputeClass di GKE: Anda dapat menggunakan ComputeClass dengan DRA untuk memenuhi kebutuhan bisnis seperti menyediakan Spot VM untuk menjalankan workload inferensi yang meminta GPU hemat biaya. Referensi berikut membantu Anda mempelajari ComputeClass:
Langkah berikutnya
- Menyiapkan infrastruktur GKE untuk workload DRA
- Mengalokasikan perangkat secara dinamis ke workload dengan DRA