Pada arsitektur Non-Uniform Memory Access (NUMA), komunikasi intensif antara CPU dan GPU dapat menyebabkan akses lintas node, yang meningkatkan latensi, membatasi bandwidth, dan menurunkan kinerja sistem. Untuk mengatasi masalah ini, Alibaba Cloud Container Service for Kubernetes (ACK) menyediakan penjadwalan yang sadar topologi NUMA berdasarkan Scheduler Framework. Fitur ini menjadwalkan Pod ke node NUMA optimal, mengurangi akses lintas node NUMA, dan meningkatkan kinerja.
Cara kerja
Node NUMA merupakan unit dasar dalam sistem Non-Uniform Memory Access. Satu set NUMA menggabungkan beberapa node pada satu node pekerja untuk mengalokasikan sumber daya secara efisien dan mengurangi kontensi memori prosesor.
Pada mesin dengan delapan GPU, biasanya terdapat beberapa node NUMA. Tanpa binding core yang tepat atau penempatan GPU-CPU pada node NUMA yang sama, kinerja menurun akibat kontensi CPU dan komunikasi lintas NUMA.
Kubernetes native menggunakan kebijakan CPU dan NUMA kubelet untuk melakukan binding sumber daya pada mesin tunggal, tetapi menghadapi keterbatasan di tingkat kluster:
Ketidaktahuan penjadwal: Tidak dapat menilai sumber daya node yang tersisa untuk memenuhi persyaratan QoS Pod, sehingga menyebabkan status AdmissionError dan berpotensi mengganggu stabilitas kluster.
Penempatan tidak terkendali: Kebijakan topologi hanya merupakan parameter proses node, sehingga mencegah pemanfaatan afinitas node untuk colocation workload.
Kompleksitas kebijakan: Node hanya mendukung satu kebijakan, sehingga memerlukan partisi dan pelabelan kluster secara manual yang mengurangi pemanfaatan sumber daya.
ACK mengatasi masalah tersebut melalui penjadwalan yang sadar topologi dengan memanfaatkan gputopo-device-plugin dan ack-koordlet dari ack-koordinator untuk melaporkan topologi CPU/GPU node, serta mendukung deklarasi kebijakan NUMA untuk workload. Diagram berikut menggambarkan arsitektur keseluruhan.
Prasyarat
Persyaratan kluster:
Sebuah kluster ACK Pro versi 1.24 atau lebih baru. Untuk melakukan upgrade kluster, lihat Upgrade a cluster.
Persyaratan node:
Hanya keluarga instans sccgn7ex untuk kluster superkomputasi berakselerasi GPU dan node Lingjun yang didukung. Untuk informasi selengkapnya, lihat Instance families. Untuk informasi tentang node Lingjun, lihat Manage LINGJUN Clusters and Lingjun nodes.
Tambahkan label
ack.node.gpu.schedule=topologysecara manual ke node tempat Anda ingin mengaktifkan penjadwalan GPU yang sadar topologi. Untuk informasi selengkapnya, lihat Enable scheduling features.
Persyaratan komponen:
Komponen kube-scheduler harus versi 6.4.4 atau lebih baru. Untuk informasi selengkapnya, lihat kube-scheduler. Untuk melakukan upgrade kube-scheduler, buka Konsol ACK, klik nama kluster Anda, lalu pilih .
Add-on ack-koordinator (sebelumnya ack-slo-manager) harus diinstal.
Untuk kluster ACK Lingjun, Anda dapat langsung menginstal ack-koordinator.
Untuk kluster ACK Pro, Anda harus mengatur bidang
NodeTopologyReportdalam Feature GateagentFeaturesketruesaat mengonfigurasi parameter ack-koordinator.
Add-on GPU topology reporting add-on (gputopo-device-plugin) telah diinstal. Add-on ini diperlukan untuk mengumpulkan dan melaporkan informasi topologi NUMA GPU-ke-CPU ke kluster. Untuk petunjuk instalasi, lihat Install the GPU topology-aware scheduling add-on.
PentingJika add-on GPU topology-aware scheduling diinstal sebelum ack-koordinator, Anda harus me-restart add-on penjadwalan tersebut setelah instalasi ack-koordinator selesai.
Batasan
Fitur ini menyediakan afinitas NUMA CPU dan GPU terpadu dan bersifat saling eksklusif dengan kebijakan penjadwalan standalone lama. Jangan aktifkan fitur ini untuk workload yang sudah menggunakan topology-aware CPU scheduling atau versi standalone lama dari topology-aware GPU scheduling.
Hanya colocation CPU dan GPU yang didukung.
Permintaan CPU untuk semua kontainer dalam Pod aplikasi harus berupa bilangan bulat (satuan: core), dan permintaan harus sama dengan limit.
Sumber daya GPU untuk kontainer dalam Pod aplikasi harus diminta menggunakan
aliyun.com/gpudan harus berupa kartu GPU utuh.
Penagihan
Fitur ini memerlukan instalasi Cloud-Native AI Suite, yang dapat menimbulkan biaya tambahan. Untuk informasi selengkapnya, lihat Billing of the cloud-native AI suite.
Sumber daya node pekerja: ack-koordinator berjalan sebagai komponen self-managed pada node pekerja dan mengonsumsi CPU serta memori mereka. Konfigurasikan permintaan sumber daya untuk setiap modul selama instalasi.
Metrik pemantauan Prometheus: ack-koordinator mengekspos metrik pemantauan dalam format Prometheus untuk fitur seperti profiling sumber daya dan penjadwalan detail halus. Jika Anda memilih Enable Prometheus Metrics for ACK-Koordinator selama instalasi dan menggunakan Alibaba Cloud Prometheus, metrik ini dihitung sebagai custom metrics dan dikenakan biaya berdasarkan ukuran kluster dan jumlah aplikasi. Sebelum mengaktifkan opsi ini, tinjau dokumentasi penagihan Prometheus untuk memahami kuota gratis dan kebijakan penagihan. Pantau penggunaan melalui billing and usage queries.
Gunakan penjadwalan yang sadar topologi NUMA
Anda dapat mengaktifkan penjadwalan yang sadar topologi NUMA dengan menambahkan anotasi berikut ke spesifikasi Pod Anda:
apiVersion: v1
kind: Pod
metadata:
name: example
annotations:
cpuset-scheduler: required # Aktifkan binding CPU
scheduling.alibabacloud.com/numa-topology-spec: | # Menentukan persyaratan topologi NUMA untuk pod ini
{
"numaTopologyPolicy": "SingleNUMANode",
"singleNUMANodeExclusive": "Preferred"
}
spec:
containers:
- name: example
image: ghcr.io/huggingface/text-generation-inference:1.4
resources:
limits:
aliyun.com/gpu: '4'
cpu: '24'
requests:
aliyun.com/gpu: '4'
cpu: '24'Tabel berikut menjelaskan parameter untuk penjadwalan yang sadar topologi NUMA.
Parameter | Deskripsi |
| Menentukan bahwa Pod memerlukan colocation CPU dan perangkat. Saat ini, satu-satunya nilai yang didukung adalah |
| Kebijakan penempatan NUMA yang digunakan saat menjadwalkan Pod.
|
| Menentukan kebijakan eksklusivitas untuk menempatkan Pod pada node NUMA. Catatan Jenis node NUMA:
|
Perbandingan kinerja
Bagian ini menunjukkan peningkatan kinerja dari penjadwalan yang sadar topologi NUMA dengan mengukur waktu pemuatan model. Dalam pengujian ini, kami menggunakan tool text-generation-inference untuk memuat model pada empat kartu GPU. Kami kemudian menggunakan NVIDIA Nsight Systems untuk mengukur perubahan kecepatan pemuatan GPU sebelum dan sesudah mengaktifkan binding core.
Eksperimen ini menggunakan node Lingjun, text-generation-inference v1.4 (tersedia dari halaman unduhan TGI), dan NVIDIA Nsight Systems (tersedia dari halaman unduhan tool NSight).
Hasil pengujian bervariasi tergantung tool dan lingkungan. Data kinerja dalam contoh ini dikumpulkan menggunakan NVIDIA Nsight Systems; hasil aktual Anda mungkin berbeda.
Tanpa penjadwalan yang sadar topologi
YAML berikut menunjukkan konfigurasi aplikasi untuk skenario yang sama tanpa penjadwalan yang sadar topologi diaktifkan.
Model membutuhkan waktu 15,9 detik untuk dimuat.

Dengan penjadwalan yang sadar topologi
YAML berikut menunjukkan konfigurasi aplikasi untuk skenario yang sama dengan penjadwalan yang sadar topologi diaktifkan.
Untuk mengaktifkan fitur ini, Anda harus mengubah permintaan sumber daya GPU dari nvidia.com/gpu standar menjadi aliyun.com/gpu. Hal ini memungkinkan penjadwal khusus mengenali dan mengelola afinitas NUMA GPU-CPU.
Model membutuhkan waktu 5,4 detik untuk dimuat, peningkatan 66% dibandingkan garis dasar.
