All Products
Search
Document Center

Container Service for Kubernetes:Gunakan AHPA untuk melakukan skalabilitas prediktif berdasarkan metrik GPU

Last Updated:Mar 27, 2026

Workload inferensi GPU dengan pola traffic siklikal atau inisialisasi Pod yang lambat menimbulkan tantangan penskalaan: HPA standar hanya bereaksi setelah ambang batas pemanfaatan terlampaui, yang sering kali terlalu terlambat untuk mencegah kehabisan resource atau lonjakan latensi. Advanced Horizontal Pod Autoscaler (AHPA) mengatasi masalah ini dengan menggabungkan metrik GPU real-time dari Prometheus, tren beban historis, dan algoritma prediksi untuk menskalakan Pod secara proaktif—sebelum permintaan tiba.

Gunakan panduan ini jika workload Anda memiliki satu atau lebih karakteristik berikut:

  • Pola traffic siklikal atau berbasis waktu dalam sehari (misalnya, pemanfaatan GPU tinggi selama jam kerja dan tidak aktif semalaman)

  • Pod yang memerlukan waktu signifikan untuk inisialisasi, sehingga menyebabkan lonjakan latensi saat skala keluar dilakukan secara reaktif

  • Sensitivitas biaya yang mengharuskan skala-masuk akurat ketika GPU tidak digunakan

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK yang dikelola dengan node berakselerasi GPU. Lihat Buat kluster ACK dengan node berakselerasi GPU

  • AHPA terinstal dan sumber data dikonfigurasi. Lihat Ikhtisar AHPA

  • Managed Service for Prometheus diaktifkan dengan minimal 7 hari data statistik aplikasi terkumpul, termasuk detail penggunaan resource GPU

Penting

Kualitas prediksi AHPA bergantung langsung pada data historis. Jangan melewatkan atau mempersingkat periode pengumpulan data 7 hari—riwayat yang tidak mencukupi menghasilkan prediksi tidak akurat dan dapat menyebabkan AHPA menyediakan replika terlalu sedikit atau terlalu banyak.

Cara kerja

Managed Service for Prometheus mengumpulkan pemanfaatan GPU dan penggunaan memori secara real-time dari workload Anda. Prometheus Adapter mengonversi metrik ini ke format yang dikenali Kubernetes dan mengeksposnya ke AHPA. AHPA menggabungkan metrik saat ini dengan tren beban historis dan algoritma prediksi untuk memperkirakan permintaan GPU di masa depan, lalu menskalakan Pod sebelum lonjakan pemanfaatan terjadi, bukan setelahnya.

Berbeda dengan HPA standar—yang hanya menskalakan setelah ambang batas terlampaui—AHPA menyelesaikan skala keluar sebelum resource habis dan secara otomatis melakukan skala-masuk saat GPU tidak digunakan.

Langkah 1: Deploy adapter metrik

  1. Dapatkan titik akhir HTTP API internal dari instans Prometheus kluster Anda.

    1. Masuk ke Konsol ARMS.

    2. Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances.

    3. Di bagian atas halaman Instances, pilih wilayah tempat kluster ACK Anda berada.

    4. Klik nama instans Managed Service for Prometheus. Di panel navigasi kiri halaman detail instans, klik Settings dan catat titik akhir yang ditampilkan di bagian HTTP API URL.

  2. Deploy ack-alibaba-cloud-metrics-adapter.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, pilih Marketplace > Marketplace.

    2. Di halaman Marketplace, klik tab App Catalog, temukan ack-alibaba-cloud-metrics-adapter, lalu klik.

    3. Di pojok kanan atas halaman ack-alibaba-cloud-metrics-adapter, klik Deploy.

    4. Di halaman Basic Information, tentukan Cluster dan Namespace, lalu klik Next.

    5. Di halaman Parameters, atur Chart Version dan masukkan titik akhir HTTP API internal yang telah Anda catat pada langkah sebelumnya sebagai nilai parameter prometheus.url. Klik OK. URL

Langkah 2: Konfigurasikan AHPA untuk skalabilitas prediktif berbasis GPU

Contoh ini mendeploy layanan inferensi deteksi intent BERT, lalu mengonfigurasi AHPA untuk menskalakan Pod saat pemanfaatan GPU melebihi 20%.

Deploy layanan inferensi

  1. Deploy layanan inferensi:

    cat <<EOF | kubectl create -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: bert-intent-detection
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: bert-intent-detection
      template:
        metadata:
          labels:
            app: bert-intent-detection
        spec:
          containers:
          - name: bert-container
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/bert-intent-detection:1.0.1
            ports:
            - containerPort: 80
            resources:
              limits:
                cpu: "1"
                memory: 2G
                nvidia.com/gpu: "1"
              requests:
                cpu: 200m
                memory: 500M
                nvidia.com/gpu: "1"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: bert-intent-detection-svc
      labels:
        app: bert-intent-detection
    spec:
      selector:
        app: bert-intent-detection
      ports:
      - protocol: TCP
        name: http
        port: 80
        targetPort: 80
      type: LoadBalancer
    EOF
  2. Verifikasi Pod sedang berjalan:

    kubectl get pods -o wide

    Output yang diharapkan:

    NAME                                    READY   STATUS    RESTARTS   AGE     IP           NODE                        NOMINATED NODE   READINESS GATES
    bert-intent-detection-7b486f6bf-f****   1/1     Running   0          3m24s   10.15.1.17   cn-beijing.192.168.94.107   <none>           <none>
  3. Uji layanan inferensi. Pertama, dapatkan alamat IP eksternal:

    kubectl get svc bert-intent-detection-svc

    Ganti 47.95.XX.XX dengan alamat IP yang dikembalikan, lalu kirim permintaan uji:

    curl -v "http://47.95.XX.XX/predict?query=Music"

    Output yang diharapkan:

    *   Trying 47.95.XX.XX...
    * TCP_NODELAY set
    * Connected to 47.95.XX.XX (47.95.XX.XX) port 80 (#0)
    > GET /predict?query=Music HTTP/1.1
    > Host: 47.95.XX.XX
    > User-Agent: curl/7.64.1
    > Accept: */*
    >
    * HTTP 1.0, assume close after body
    < HTTP/1.0 200 OK
    < Content-Type: text/html; charset=utf-8
    < Content-Length: 9
    < Server: Werkzeug/1.0.1 Python/3.6.9
    < Date: Wed, 16 Feb 2022 03:52:11 GMT
    <
    * Closing connection 0
    PlayMusic

    HTTP 200 dan hasil kueri mengonfirmasi layanan inferensi sedang berjalan.

Konfigurasikan sumber data untuk AHPA

  1. Buat file bernama application-intelligence.yaml dengan konten berikut. Atur prometheusUrl ke titik akhir internal yang telah Anda catat di Langkah 1.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: application-intelligence
      namespace: kube-system
    data:
      prometheusUrl: "http://cn-shanghai-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/da9d7dece901db4c9fc7f5b*******/1581204543170*****/c54417d182c6d430fb062ec364e****/cn-shanghai"
  2. Terapkan ConfigMap:

    kubectl apply -f application-intelligence.yaml

Deploy AHPA

  1. Buat file bernama fib-gpu.yaml dengan konten berikut. Contoh ini menggunakan mode observer, yang memungkinkan AHPA mengumpulkan data prediksi tanpa menjalankannya. Gunakan mode observer untuk memvalidasi prediksi sebelum mengaktifkan skalabilitas otomatis. Untuk referensi parameter lengkap, lihat Parameter.

    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: AdvancedHorizontalPodAutoscaler
    metadata:
      name: fib-gpu
      namespace: default
    spec:
      metrics:
      - resource:
          name: gpu
          target:
            averageUtilization: 20   # Skalakan saat rata-rata pemanfaatan GPU di semua Pod melebihi 20%
            type: Utilization
        type: Resource
      minReplicas: 0
      maxReplicas: 100
      prediction:
        quantile: 95                 # Gunakan persentil ke-95 dari nilai historis (estimasi konservatif)
        scaleUpForward: 180          # Mulai menskalakan 180 detik sebelum puncak permintaan diprediksi
      scaleStrategy: observer        # observer: kumpulkan prediksi tanpa menskalakan; ubah ke auto untuk mengaktifkan skalabilitas
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: bert-intent-detection
      instanceBounds:                # Batas replika berbasis waktu yang menggantikan minReplicas/maxReplicas selama setiap jendela
      - startTime: "2021-12-16 00:00:00"
        endTime: "2022-12-16 00:00:00"
        bounds:
        - cron: "* 0-8 ? * MON-FRI"    # Jam non-puncak: izinkan skala-masuk hingga 4 replika
          maxReplicas: 50
          minReplicas: 4
        - cron: "* 9-15 ? * MON-FRI"   # Jam kerja: pertahankan minimal 10 replika
          maxReplicas: 50
          minReplicas: 10
        - cron: "* 16-23 ? * MON-FRI"  # Puncak malam: pertahankan minimal 12 replika
          maxReplicas: 50
          minReplicas: 12

    Parameter utama:

    Parameter Deskripsi
    averageUtilization Ambang batas pemanfaatan GPU (%) yang memicu penskalaan di semua Pod yang ditargetkan oleh AHPA
    quantile Persentil data historis yang digunakan untuk menghasilkan prediksi. Nilai yang lebih tinggi bersifat lebih konservatif dan mengurangi risiko kekurangan kapasitas
    scaleUpForward Berapa detik sebelum permintaan diprediksi AHPA mulai melakukan skala keluar
    scaleStrategy observer: hanya memprediksi dan melaporkan. auto: memprediksi dan menjalankan
    instanceBounds Penggantian batas bawah dan atas replika berbasis cron untuk jendela waktu tertentu
  2. Deploy AHPA:

    kubectl apply -f fib-gpu.yaml
  3. Verifikasi status AHPA:

    kubectl get ahpa

    Output yang diharapkan:

    NAME             STRATEGY   REFERENCE               METRIC   TARGET(%)   CURRENT(%)   DESIREDPODS   REPLICAS   MINPODS   MAXPODS   AGE
    fib-gpu          observer   bert-intent-detection   gpu      20          0          0            1          10        50        6d19h

    CURRENT(%) adalah 0 dan TARGET(%) adalah 20, menunjukkan pemanfaatan GPU saat ini 0% dan penskalaan dipicu saat melebihi 20%.

Langkah 3: Uji autoscaling dan evaluasi prediksi

Hasilkan beban

Deploy fib-loader untuk mengirim permintaan berkelanjutan ke layanan inferensi:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fib-loader
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: fib-loader
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: fib-loader
    spec:
      containers:
      - args:
        - -c
        - |
          /ko-app/fib-loader --service-url="http://bert-intent-detection-svc.${NAMESPACE}/predict?query=Music" --save-path=/tmp/fib-loader-chart.html
        command:
        - sh
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        image: registry.cn-huhehaote.aliyuncs.com/kubeway/knative-sample-fib-loader:20201126-110434
        imagePullPolicy: IfNotPresent
        name: loader
        ports:
        - containerPort: 8090
          name: chart
          protocol: TCP
        resources:
          limits:
            cpu: "8"
            memory: 16000Mi
          requests:
            cpu: "2"
            memory: 4000Mi
EOF

Verifikasi perilaku penskalaan

Periksa status AHPA saat dibebani:

kubectl get ahpa

Output yang diharapkan:

NAME             STRATEGY   REFERENCE               METRIC   TARGET(%)   CURRENT(%)   DESIREDPODS   REPLICAS   MINPODS   MAXPODS   AGE
fib-gpu          observer   bert-intent-detection   gpu      20          189          10            4          10        50        6d19h

CURRENT(%) adalah 189, yang melebihi TARGET(%) sebesar 20. AHPA merekomendasikan penskalaan ke 10 Pod (DESIREDPODS). Karena scaleStrategy adalah observer, penskalaan aktual belum terjadi.

Tinjau hasil prediksi

Ambil grafik prediksi untuk membandingkan pemanfaatan GPU yang diprediksi versus aktual:

kubectl get --raw '/apis/metrics.alibabacloud.com/v1beta1/namespaces/default/predictionsobserver/fib-gpu'|jq -r '.content' |base64 -d > observer.html

Buka observer.html untuk melihat hasil prediksi berdasarkan data GPU 7 hari terakhir.

GPU prediction trend

Grafik berisi dua tampilan:

  • Predict GPU Resource Observer: Garis biru menunjukkan pemanfaatan GPU aktual; garis hijau menunjukkan prediksi AHPA. Prediksi yang terkalibrasi dengan baik berjalan sedikit di atas pemanfaatan aktual untuk memastikan kapasitas yang cukup disediakan.

  • Predict POD Observer: Garis biru menunjukkan jumlah replika aktual dari event penskalaan; garis hijau menunjukkan jumlah replika yang diprediksi AHPA. Saat jumlah Pod yang diprediksi lebih rendah daripada jumlah aktual, beralih ke mode auto memungkinkan AHPA melakukan pre-scale lebih efisien dan mengurangi over-provisioning.

Beralih ke skalabilitas otomatis

Tinjau grafik prediksi sebelum beralih ke mode auto. Prediksi siap digunakan jika kedua kondisi berikut terpenuhi:

  • Pemanfaatan GPU yang diprediksi (garis hijau) secara konsisten mengikuti di atas—namun dekat dengan—pemanfaatan aktual (garis biru), tanpa celah besar yang mengindikasikan over-provisioning

  • Jumlah Pod yang diprediksi (garis hijau) mendekati event penskalaan aktual (garis biru) selama beberapa siklus bisnis

Saat prediksi sudah stabil, perbarui scaleStrategy dalam fib-gpu.yaml:

scaleStrategy: auto

Terapkan perubahan:

kubectl apply -f fib-gpu.yaml

Dengan mode auto aktif, AHPA menskalakan Pod berdasarkan prediksi, bukan menunggu ambang batas pemanfaatan GPU terlampaui.

Langkah selanjutnya