Dalam skenario di mana CPU dan GPU sering berkomunikasi satu sama lain, akses memori lintas node Non-Uniform Memory Access (NUMA) dapat menyebabkan masalah seperti latensi yang meningkat dan bandwidth terbatas. Masalah ini memengaruhi kinerja keseluruhan aplikasi. Untuk mengatasi hal tersebut, Container Service for Kubernetes (ACK) mendukung penjadwalan dengan kesadaran topologi NUMA berdasarkan kerangka kerja penjadwalan Kubernetes untuk menjadwalkan pod ke node NUMA optimal. Hal ini mengurangi akses memori lintas node NUMA guna mengoptimalkan kinerja aplikasi Anda.
Cara kerjanya
Node NUMA adalah unit dasar dari sistem NUMA. Beberapa node NUMA pada satu node kluster membentuk satu set NUMA, yang digunakan untuk mengalokasikan sumber daya komputasi secara efisien serta mengurangi persaingan akses memori antar prosesor. Sebagai contoh, server berperforma tinggi yang memiliki delapan GPU biasanya mencakup beberapa node NUMA. Jika tidak ada core CPU yang diikat ke aplikasi atau jika CPU dan GPU tidak dialokasikan ke node NUMA yang sama, kinerja aplikasi mungkin menurun akibat kontes CPU atau komunikasi lintas node NUMA antara CPU dan GPU. Untuk memaksimalkan kinerja aplikasi Anda, Anda dapat mengalokasikan CPU dan GPU ke node NUMA yang sama.
Solusi asli berdasarkan kebijakan CPU kubelet dan kebijakan topologi NUMA dapat membantu Anda mengalokasikan CPU dan GPU ke node NUMA yang sama pada satu server. Namun, solusi ini mungkin menghadapi tantangan berikut dalam sebuah kluster:
Penjadwal tidak mengetahui CPU dan GPU spesifik yang dialokasikan ke node NUMA. Dalam kasus ini, penjadwal tidak dapat menentukan apakah sumber daya CPU dan GPU yang tersisa dapat memenuhi persyaratan kualitas layanan (QoS) dari pod. Akibatnya, sejumlah besar pod masuk ke status AdmissionError setelah penjadwalan. Dalam kasus parah, kluster mungkin berhenti bekerja.
Alokasi CPU dan GPU tidak terkendali di lapisan atas. Di Kubernetes asli, kebijakan topologi kubelet hanya dapat dilihat di parameter startup proses node, tetapi tidak dapat diperoleh di tingkat kluster menggunakan metode seperti label node. Oleh karena itu, ketika Anda mengirimkan pekerjaan, Anda tidak dapat menentukan bahwa beban kerja dijalankan pada node NUMA yang dialokasikan baik CPU maupun GPU. Akibatnya, kinerja aplikasi Anda sangat bervariasi.
Kebijakan topologi tidak mudah digunakan. Kebijakan topologi NUMA dideklarasikan pada node, sehingga satu node hanya dapat membawa satu kebijakan topologi NUMA. Sebelum Anda mengirimkan pekerjaan dan menggunakan kebijakan topologi, administrator sumber daya kluster harus secara manual membagi node kluster dengan menambahkan label khusus ke node dan mengonfigurasi pengaturan nodeAffinity untuk menjadwalkan pod ke node dengan label yang cocok. Selain itu, pod dengan kebijakan berbeda tidak dapat dijadwalkan ke node yang sama meskipun mereka tidak saling mengganggu. Ini mengurangi pemanfaatan sumber daya kluster.
Untuk mengatasi masalah di atas dari solusi kubelet asli, ACK mendukung penjadwalan dengan kesadaran topologi NUMA berdasarkan kerangka kerja penjadwalan Kubernetes. ACK menggunakan komponen gputopo-device-plugin dan ack-koordlet dari komponen ack-koordinator untuk melaporkan topologi CPU dan GPU pada node. Kedua komponen ini dikembangkan oleh Alibaba Cloud. ACK juga mendukung kemampuan untuk mendeklarasikan kebijakan topologi NUMA pada beban kerja. Gambar berikut menunjukkan arsitektur penjadwalan dengan kesadaran topologi NUMA.
Prasyarat
Kluster
Sebuah ACK Pro cluster yang menjalankan Kubernetes 1.24 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster Terkelola ACK. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Tingkatkan Kluster.
Node
Instance Elastic Compute Service (ECS) dari keluarga instance komputasi dioptimalkan dengan akselerasi GPU sccgn7ex atau node Lingjun digunakan. Untuk informasi lebih lanjut, lihat Ikhtisar Keluarga Instance dan Kelola Kluster dan Node Lingjun.
Label
ack.node.gpu.schedule=topologyditambahkan ke node tempat Anda ingin mengaktifkan penjadwalan dengan kesadaran topologi NUMA. Untuk informasi lebih lanjut, lihat Label untuk Mengaktifkan Kebijakan Penjadwalan GPU.
Komponen
Versi komponen kube-scheduler lebih baru dari V6.4.4. Untuk informasi lebih lanjut, lihat kube-scheduler. Untuk memperbarui komponen kube-scheduler, lakukan operasi berikut: Masuk ke konsol ACK. Pada halaman Kluster, klik nama kluster yang ingin Anda kelola. Di panel navigasi di sebelah kiri, pilih . Temukan dan perbarui komponen.
Komponen ack-koordinator diinstal. Komponen ini sebelumnya dikenal sebagai ack-slo-manager. Untuk informasi lebih lanjut, lihat ack-koordinator (FKA ack-slo-manager).
ACK Lingjun cluster: Instal komponen ack-koordinator.
ACK Pro cluster: Saat Anda mengonfigurasi parameter untuk komponen ack-koordinator, masukkan NodeTopologyReport=true untuk parameter agentFeatures.

Komponen penjadwalan GPU dengan kesadaran topologi diinstal. Untuk informasi lebih lanjut, lihat Instal Komponen Penjadwalan GPU dengan Kesadaran Topologi.
PentingJika Anda menginstal komponen penjadwalan GPU dengan kesadaran topologi sebelum Anda menginstal komponen ack-koordinator, Anda harus me-restart komponen penjadwalan GPU dengan kesadaran topologi setelah komponen ack-koordinator diinstal.
Batasan
Anda tidak dapat menggunakan penjadwalan dengan kesadaran topologi NUMA bersamaan dengan penjadwalan CPU dengan kesadaran topologi atau penjadwalan GPU dengan kesadaran topologi.
Penjadwalan dengan kesadaran topologi NUMA hanya berlaku untuk skenario di mana CPU dan GPU dialokasikan ke node NUMA.
Jumlah core CPU yang diminta oleh semua kontainer dalam pod harus berupa bilangan bulat dan sama dengan batas jumlah core CPU.
Sumber daya GPU dari semua kontainer dalam pod harus diminta menggunakan
aliyun.com/gpu. Jumlah GPU yang diminta harus berupa bilangan bulat.
Tagihan
Untuk menggunakan fitur ini, Anda harus menginstal suite AI cloud-native, yang mungkin menghasilkan biaya tambahan. Untuk informasi lebih lanjut, lihat Tagihan Suite AI Cloud-Native.
Tidak ada biaya yang dikenakan saat Anda menginstal atau menggunakan komponen ack-koordinator. Namun, biaya mungkin dikenakan dalam skenario berikut:
ack-koordinator adalah komponen non-managed yang menggunakan sumber daya node pekerja setelah diinstal. Anda dapat menentukan jumlah sumber daya yang diminta oleh setiap modul saat Anda menginstal komponen.
Secara default, ack-koordinator mengekspos metrik pemantauan fitur seperti profil sumber daya dan penjadwalan granular sebagai metrik Prometheus. Jika Anda mengaktifkan metrik Prometheus untuk ack-koordinator dan menggunakan Managed Service for Prometheus, metrik ini dianggap sebagai metrik kustom dan biaya dikenakan untuk metrik ini. Biaya tergantung pada faktor-faktor seperti ukuran kluster Anda dan jumlah aplikasi. Sebelum Anda mengaktifkan metrik Prometheus, kami sarankan Anda membaca topik Tagihan Managed Service for Prometheus untuk mempelajari tentang kuota gratis dan aturan tagihan metrik kustom. Untuk informasi lebih lanjut tentang cara memantau dan mengelola penggunaan sumber daya, lihat Kueri Jumlah Data Observabel dan Tagihan.
Konfigurasikan penjadwalan dengan kesadaran topologi NUMA
Anda dapat menambahkan anotasi berikut ke file YAML pod untuk mendeklarasikan persyaratan untuk penjadwalan dengan kesadaran topologi NUMA:
apiVersion: v1
kind: Pod
metadata:
annotations:
cpuset-scheduler: required # Menentukan apakah akan mengalokasikan CPU dan GPU ke node NUMA.
scheduling.alibabacloud.com/numa-topology-spec: | # Persyaratan pod untuk kebijakan topologi NUMA.
{
"numaTopologyPolicy": "SingleNUMANode",
"singleNUMANodeExclusive": "Preferred",
}
spec:
containers:
- name: example
resources:
limits:
aliyun.com/gpu: '4'
cpu: '24'
requests:
aliyun.com/gpu: '4'
cpu: '24'Tabel berikut menjelaskan parameter penjadwalan dengan kesadaran topologi NUMA.
Parameter | Deskripsi |
| Menentukan apakah akan mengalokasikan CPU dan GPU ke node NUMA. Atur nilainya menjadi |
| Kebijakan topologi NUMA yang akan digunakan selama penjadwalan pod. Nilai valid:
|
| Menentukan apakah akan menjadwalkan pod ke node NUMA tertentu selama penjadwalan pod. Nilai valid: Catatan Jenis node NUMA:
|
Bandingkan kinerja
Dalam contoh ini, proses pemuatan model digunakan untuk menguji peningkatan kinerja sebelum dan sesudah penjadwalan dengan kesadaran topologi NUMA diaktifkan. Alat text-generation-inference digunakan untuk memuat model pada dua GPU. Alat NSight digunakan untuk membandingkan kecepatan pemuatan GPU sebelum dan sesudah penjadwalan dengan kesadaran topologi NUMA diaktifkan.
Node Lingjun digunakan dalam contoh ini. Untuk informasi lebih lanjut tentang cara mengunduh alat text-generation-inference, lihat Text Generation Inference. Untuk informasi lebih lanjut tentang cara mengunduh alat NSight, lihat Panduan Instalasi.
Hasil pengujian mungkin bervariasi berdasarkan alat pengujian yang digunakan. Data perbandingan kinerja dalam contoh ini hanya merupakan hasil pengujian yang diperoleh menggunakan alat NSight. Data aktual tergantung pada lingkungan operasi Anda.
Sebelum penjadwalan dengan kesadaran topologi NUMA diaktifkan
Kode sampel berikut menunjukkan file YAML aplikasi dalam skenario pengujian sebelum penjadwalan dengan kesadaran topologi NUMA diaktifkan:
Periksa durasi proses pemuatan model. Hasil pengujian menunjukkan bahwa proses ini membutuhkan waktu sekitar 15,9 detik.

Setelah penjadwalan dengan kesadaran topologi NUMA diaktifkan
Kode sampel berikut menunjukkan file YAML aplikasi dalam skenario pengujian setelah penjadwalan dengan kesadaran topologi NUMA diaktifkan:
Periksa durasi proses pemuatan model. Hasil pengujian menunjukkan bahwa proses ini membutuhkan waktu sekitar 5,4 detik. Durasi dipersingkat sebesar 66%.
