All Products
Search
Document Center

Container Service for Kubernetes:Implementasikan prediksi elastis AHPA berdasarkan metrik GPU

Last Updated:Jun 21, 2026

AHPA menggunakan data pemanfaatan GPU dari Prometheus Adapter, dikombinasikan dengan tren beban historis dan algoritma prediksi, untuk memperkirakan kebutuhan sumber daya GPU di masa depan. AHPA secara otomatis menyesuaikan jumlah replika pod atau mengalokasikan sumber daya GPU untuk melakukan scale-out sebelum sumber daya GPU menjadi terkendala, serta melakukan scale-in ketika sumber daya tidak digunakan. Pendekatan ini mengurangi biaya dan meningkatkan efisiensi kluster.

Prasyarat

Cara kerja

Dalam komputasi kinerja tinggi (HPC), terutama untuk pelatihan model pembelajaran mendalam dan inferensi, manajemen detail halus serta penyesuaian dinamis sumber daya GPU meningkatkan pemanfaatan dan mengurangi biaya. Container Service for Kubernetes mendukung skalabilitas elastis berdasarkan metrik GPU. Anda dapat menggunakan Prometheus untuk mengumpulkan metrik GPU utama seperti pemanfaatan real-time dan penggunaan memori GPU. Kemudian, gunakan Prometheus Adapter untuk mengubah metrik tersebut ke dalam format yang kompatibel dengan Kubernetes dan integrasikan dengan AHPA. AHPA menggunakan data ini, bersama dengan tren beban historis dan algoritma prediksi, untuk memperkirakan kebutuhan sumber daya GPU di masa depan dan secara otomatis menyesuaikan jumlah replika pod atau alokasi sumber daya GPU. Hal ini memastikan scale-out terjadi sebelum sumber daya menjadi terkendala dan scale-in dilakukan segera saat sumber daya menganggur, sehingga mengurangi biaya dan meningkatkan efisiensi kluster.

Langkah 1: Deploy Metrics Adapter

  1. Dapatkan titik akhir HTTP API internal.

    1. Masuk ke ARMS console.

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

    3. Pada halaman Instances, pilih wilayah tempat kluster Container Service for Kubernetes Anda berada.

    4. Klik nama Prometheus instance yang dituju. Di panel navigasi kiri, klik Settings untuk mendapatkan titik akhir internal di bawah alamat HTTP API.

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

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Marketplace > Marketplace.

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

    3. Pada halaman ack-alibaba-cloud-metrics-adapter, klik Quick Deployment di pojok kanan atas.

    4. Pada wizard Basic Information, pilih Cluster dan Namespace Anda, lalu klik Next.

    5. Pada wizard Parameters, pilih Chart Version. Di bagian Parameter, atur titik akhir HTTP API internal yang diperoleh pada Langkah 1 sebagai nilai untuk prometheus.url, lalu klik OK.

      prometheus:
        enabled: true
        url: http://

Langkah 2: Implementasikan prediksi elastis AHPA berdasarkan metrik GPU

Topik ini menyebarkan layanan inferensi model pada GPU dan terus-menerus mengirim permintaan ke layanan tersebut. AHPA melakukan prediksi elastis berdasarkan pemanfaatan GPU.

  1. Deploy layanan inferensi.

    1. Jalankan perintah berikut untuk deploy layanan inferensi.

      Expand to view details

      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. Jalankan perintah berikut untuk memeriksa status pod.

      kubectl get pods -o wide

      Expected output:

      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. Jalankan perintah berikut untuk memanggil layanan inferensi dan memverifikasi penerapan.

      Gunakan perintah kubectl get svc bert-intent-detection-svc untuk mendapatkan alamat IP node GPU dan ganti 47.95.XX.XX pada perintah berikut.

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

      Expected output:

      *   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 #Intent recognition result.

      Jika permintaan HTTP mengembalikan kode status 200 dan hasil pengenalan maksud, layanan inferensi berhasil diterapkan.

  2. Konfigurasikan AHPA.

    Contoh ini menggunakan pemanfaatan GPU. Scale-out dipicu ketika pemanfaatan GPU sebuah pod melebihi 20%.

    1. Konfigurasikan sumber metrik AHPA.

      1. Buat file bernama application-intelligence.yaml dengan konten berikut.

        prometheusUrl mengatur titik akhir untuk Alibaba Cloud Prometheus. Gunakan titik akhir internal yang diperoleh pada 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. Jalankan perintah berikut untuk menerapkan application-intelligence.

        kubectl apply -f application-intelligence.yaml
    2. Deploy AHPA.

      1. Buat file bernama fib-gpu.yaml dengan konten berikut.

        Mode diatur ke observer. Untuk informasi selengkapnya tentang parameter, lihat deskripsi metrik.

        Expand to view details

        apiVersion: autoscaling.alibabacloud.com/v1beta1
        kind: AdvancedHorizontalPodAutoscaler
        metadata:
          name: fib-gpu
          namespace: default
        spec:
          metrics:
          - resource:
              name: gpu
              target:
                averageUtilization: 20
                type: Utilization
            type: Resource
          minReplicas: 0
          maxReplicas: 100
          prediction:
            quantile: 95
            scaleUpForward: 180
          scaleStrategy: observer
          scaleTargetRef:
            apiVersion: apps/v1
            kind: Deployment
            name: bert-intent-detection
          instanceBounds:
          - startTime: "2021-12-16 00:00:00"
            endTime: "2022-12-16 00:00:00"
            bounds:
            - cron: "* 0-8 ? * MON-FRI"
              maxReplicas: 50
              minReplicas: 4
            - cron: "* 9-15 ? * MON-FRI"
              maxReplicas: 50
              minReplicas: 10
            - cron: "* 16-23 ? * MON-FRI"
              maxReplicas: 50
              minReplicas: 12
      2. Jalankan perintah berikut untuk menerapkan AHPA.

        kubectl apply -f fib-gpu.yaml
      3. Jalankan perintah berikut untuk memeriksa status AHPA.

        kubectl get ahpa

        Expected output:

        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

        Output yang diharapkan menunjukkan bahwa CURRENT(%) adalah 0 dan TARGET(%) adalah 20. Artinya, pemanfaatan GPU saat ini adalah 0%. Scale-out elastis dipicu ketika pemanfaatan GPU melebihi 20%.

  3. Uji skalabilitas elastis untuk layanan inferensi.

    1. Jalankan perintah berikut untuk mengakses layanan inferensi.

      Expand to view details

      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
    2. Saat mengakses layanan, jalankan perintah berikut untuk memeriksa status AHPA.

      kubectl get ahpa

      Expected output:

      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

      Output yang diharapkan menunjukkan bahwa pemanfaatan GPU saat ini CURRENT(%) melebihi nilai TARGET(%). Skalabilitas elastis dipicu, dan jumlah pod yang diinginkan DESIREDPODS adalah 10.

    3. Jalankan perintah berikut untuk melihat tren prediksi.

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

      Gambar berikut menunjukkan contoh tren prediksi berdasarkan metrik GPU selama tujuh hari:GPU prediction trend

      • Predict GPU Resource Observer: Garis biru menunjukkan penggunaan GPU aktual. Garis hijau menunjukkan penggunaan GPU yang diprediksi oleh AHPA. Kurva hijau umumnya berada di atas kurva biru, menandakan kapasitas GPU yang diprediksi mencukupi.

      • Predict POD Observer: Garis biru menunjukkan jumlah pod yang diskalakan secara aktual. Garis hijau menunjukkan jumlah pod yang diprediksi oleh AHPA. Kurva hijau umumnya berada di bawah kurva biru, menandakan AHPA memprediksi lebih sedikit pod. Anda dapat mengatur mode skalabilitas elastis ke auto untuk menggunakan jumlah pod yang diprediksi, sehingga menghemat sumber daya pod dan menghindari pemborosan.

      Hasil prediksi sesuai ekspektasi. Setelah observasi, jika hasil tetap memuaskan, atur mode skalabilitas elastis ke auto agar AHPA menangani penskalaan.

Referensi

  • Knative Serverless mendukung kemampuan elastis AHPA (Advanced Horizontal Pod Autoscaler). Ketika kebutuhan sumber daya aplikasi bersifat periodik, prediksi elastis memanaskan sumber daya terlebih dahulu dan mengatasi masalah cold start di Knative. Untuk informasi selengkapnya, lihat Gunakan prediksi elastis AHPA di Knative.

  • Dalam banyak skenario, aplikasi harus diskalakan berdasarkan metrik kustom seperti QPS permintaan HTTP atau panjang antrian pesan. AHPA menyediakan mekanisme External Metrics. Dikombinasikan dengan komponen alibaba-cloud-metrics-adapter, fitur ini menawarkan opsi penskalaan yang lebih kaya. Untuk informasi selengkapnya, lihat Konfigurasikan metrik kustom dengan AHPA untuk menskalakan aplikasi.