Secara default, penjadwal mengalokasikan sumber daya GPU dengan mengisi satu GPU pada sebuah node sebelum beralih ke GPU lainnya. Pendekatan ini membantu mencegah fragmentasi memori GPU. Namun, dalam beberapa skenario, Anda mungkin ingin mendistribusikan Pod ke beberapa GPU untuk meminimalkan dampak terhadap beban kerja jika satu GPU mengalami kegagalan. Topik ini menjelaskan cara mengonfigurasi kebijakan pemilihan GPU untuk GPU sharing.
Prasyarat
Cara kerja
Saat menggunakan GPU sharing pada node dengan beberapa GPU, Anda dapat memilih salah satu dari dua kebijakan berikut untuk mengalokasikan GPU ke Pod:
-
Binpack: (Default) Penjadwal mengisi satu GPU pada node sebelum mengalokasikan sumber daya dari GPU lainnya. Pendekatan ini mencegah fragmentasi memori GPU.
-
Spread: Penjadwal mendistribusikan Pod secara merata ke semua GPU yang tersedia pada node. Pendekatan ini meminimalkan jumlah beban kerja yang terdampak jika satu GPU mengalami kegagalan.
Contoh berikut menunjukkan sebuah node dengan dua GPU, masing-masing memiliki memori GPU sebesar 15 GiB. Pod1 meminta 2 GiB memori GPU, dan Pod2 meminta 3 GiB.
Prosedur
Secara default, kebijakan pemilihan GPU untuk sebuah node adalah Binpack. Untuk menggunakan kebijakan Spread pada GPU sharing, ikuti langkah-langkah berikut.
Langkah 1: Buat kelompok node
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih .
-
Pada halaman Node Pools, klik Create Node Pool di pojok kanan atas.
-
Pada halaman Create Node Pool, atur parameter dan klik Confirm. Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Create and manage a node pool.
Parameter
Deskripsi
Instance type
Untuk Architecture, pilih GPU-accelerated instance dan pilih tipe instans.
Kebijakan
Spreadhanya berlaku pada node dengan beberapa GPU. Pilih tipe instans yang memiliki beberapa GPU.Expected nodes
Tentukan jumlah awal node dalam kelompok node. Atur nilai ini menjadi 0 jika Anda tidak ingin membuat node segera.
Node label
Klik
untuk menambahkan dua label berikut:-
Atur Key menjadi
ack.node.gpu.scheduledan Value menjadicgpu. Ini mengaktifkan GPU sharing dan isolasi memori GPU. -
Atur Key menjadi
ack.node.gpu.placementdan Value menjadispread. Ini mengaktifkan kebijakanSpreaduntuk node tersebut.
-
Langkah 2: Kirim pekerjaan
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di pojok kanan atas halaman, klik Create from YAML. Salin konten YAML berikut ke editor Template, modifikasi sesuai petunjuk dalam komentar, lalu klik Create.
Penjelasan file YAML:
-
File YAML ini mendefinisikan sebuah Job yang menggunakan sampel TensorFlow MNIST. Job ini membuat tiga Pod, dan setiap Pod meminta 4 GiB memori GPU.
-
Sebuah Pod meminta 4 GiB memori GPU dengan mendefinisikan
aliyun.com/gpu-mem: 4pada bagianresources.limitsspesifikasi Pod. -
Agar efeknya dapat diamati pada satu node, file YAML menambahkan
nodeSelector,kubernetes.io/hostname: <NODE_NAME>, untuk menjadwalkan Pod ke node tertentu.
-
Langkah 3: Verifikasi kebijakan Spread
Gunakan tool inspeksi GPU untuk mengkueri alokasi sumber daya GPU pada node:
kubectl inspect cgpu
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU2(Allocated/Total) GPU3(Allocated/Total) GPU Memory(GiB)
cn-shanghai.192.0.2.109 192.0.2.109 4/15 4/15 0/15 4/15 12/60
--------------------------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
12/60 (20%)
Output tersebut menunjukkan bahwa ketiga Pod dijadwalkan ke GPU yang berbeda pada node tersebut. Hal ini mengonfirmasi bahwa kebijakan Spread sedang diterapkan.