All Products
Search
Document Center

Container Service for Kubernetes:Aktifkan penjadwalan yang sadar topologi NUMA

Last Updated:Mar 11, 2026

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.

image

Prasyarat

Persyaratan kluster:

Persyaratan node:

  • Tambahkan label ack.node.gpu.schedule=topology secara 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 Operations Management > Add-ons.

  • 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 NodeTopologyReport dalam Feature Gate agentFeatures ke true saat mengonfigurasi parameter ack-koordinator.

      image

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

    Penting

    Jika 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/gpu dan 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

cpuset-scheduler

Menentukan bahwa Pod memerlukan colocation CPU dan perangkat.

Saat ini, satu-satunya nilai yang didukung adalah required.

numaTopologyPolicy

Kebijakan penempatan NUMA yang digunakan saat menjadwalkan Pod.

  • SingleNUMANode: CPU dan perangkat Pod harus ditempatkan pada node NUMA yang sama. Jika tidak ada node semacam itu, Pod tidak akan dijadwalkan.

  • Restricted: CPU dan perangkat Pod harus ditempatkan dalam satu set NUMA yang sama. Jika tidak ada node semacam itu, Pod tidak akan dijadwalkan.

  • BestEffort: Penjadwal berusaha menempatkan CPU dan perangkat Pod pada node NUMA yang sama. Jika tidak ada node semacam itu, penjadwal memilih node terbaik berikutnya.

singleNUMANodeExclusive

Menentukan kebijakan eksklusivitas untuk menempatkan Pod pada node NUMA.

Catatan

Jenis node NUMA:

  • single: Hanya Pod yang memerlukan binding ke satu node NUMA yang berjalan pada node NUMA ini.

  • shared: Pod yang dapat tersebar di beberapa node NUMA berjalan pada node NUMA ini.

  • idle: Node NUMA yang tidak memiliki Pod yang berjalan, tersedia untuk Pod baru.

  • (Default) Required: Jika Pod memerlukan binding ke satu node NUMA, Pod tersebut hanya dapat dijadwalkan pada node NUMA idle atau single. Jika Pod dapat tersebar di beberapa node NUMA, Pod tersebut hanya dapat dijadwalkan pada node NUMA idle atau shared.

  • Preferred: Penjadwal tidak membatasi jenis node NUMA yang dapat digunakan.

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).

Penting

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.

YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: tgi
  name: tgi-deployment-basic
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tgi
  template:
    metadata:
      labels:
        app: tgi
    spec:
      containers:
        - command:
            - sleep
            - 3600d
          image: >-
            ghcr.io/huggingface/text-generation-inference:1.4
          imagePullPolicy: IfNotPresent
          name: tgi
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: '24'
              nvidia.com/gpu: '4'
            requests:
              cpu: '24'
              nvidia.com/gpu: '4'
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /llm
              name: volume-1710932083254
      restartPolicy: Always
      schedulerName: default-scheduler
      volumes:
        - name: volume-1710932083254
          persistentVolumeClaim:
            claimName: model

Model membutuhkan waktu 15,9 detik untuk dimuat.

image.png

Dengan penjadwalan yang sadar topologi

YAML berikut menunjukkan konfigurasi aplikasi untuk skenario yang sama dengan penjadwalan yang sadar topologi diaktifkan.

Catatan

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.

YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: tgi-numa
  name: tgi-numa-deployment-basic
  namespace: yueming-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tgi-numa
  template:
    metadata:
      annotations:
        cpuset-scheduler: required
        scheduling.alibabacloud.com/numa-topology-spec: |
          {
            "numaTopologyPolicy": "SingleNUMANode"
          }
      labels:
        app: tgi-numa
    spec:
      containers:
        - command:
            - sleep
            - 3600d
          image: >-
            ghcr.io/huggingface/text-generation-inference:1.4
          imagePullPolicy: IfNotPresent
          name: numa
          resources:
            limits:
              aliyun.com/gpu: '4'
              cpu: '24'
            requests:
              aliyun.com/gpu: '4'
              cpu: '24'
          volumeMounts:
            - mountPath: /llm
              name: volume-1710932083254
      restartPolicy: Always
      schedulerName: default-scheduler
      volumes:
        - name: volume-1710932083254
          persistentVolumeClaim:
            claimName: model

Model membutuhkan waktu 5,4 detik untuk dimuat, peningkatan 66% dibandingkan garis dasar.

image

Dokumen terkait

Enable nearest memory access acceleration for containers