全部产品
Search
文档中心

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

更新时间:Jul 02, 2025

Komponen Advanced Horizontal Pod Autoscaler (AHPA) dapat memprediksi permintaan sumber daya GPU berdasarkan data pemanfaatan GPU dari Prometheus Adapter, tren beban historis, dan algoritma prediksi. AHPA secara otomatis menyesuaikan jumlah pod replika atau alokasi sumber daya GPU untuk memastikan operasi perluasan selesai sebelum sumber daya habis. Selain itu, AHPA juga melakukan penyusutan ketika ada sumber daya menganggur guna mengurangi biaya dan meningkatkan efisiensi kluster.

Prasyarat

  • Kluster ACK terkelola dengan node akselerasi GPU telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK dengan Node Akselerasi GPU.

  • AHPA telah diinstal dan sumber data dikonfigurasi untuk mengumpulkan metrik. Untuk informasi lebih lanjut, lihat Ikhtisar AHPA.

  • Managed Service for Prometheus telah diaktifkan, dan statistik aplikasi selama minimal tujuh hari telah dikumpulkan oleh Managed Service for Prometheus. Statistik ini mencakup detail penggunaan sumber daya GPU oleh aplikasi. Untuk informasi lebih lanjut, lihat Managed Service for Prometheus.

Cara kerjanya

Dalam komputasi kinerja tinggi, terutama dalam skenario seperti pelatihan model dan inferensi model pada pembelajaran mendalam, manajemen halus serta penyesuaian dinamis alokasi sumber daya GPU dapat meningkatkan pemanfaatan sumber daya dan mengurangi biaya. Container Service for Kubernetes (ACK) mendukung penskalaan otomatis berdasarkan metrik GPU. Anda dapat menggunakan Managed Service for Prometheus untuk mengumpulkan metrik utama seperti pemanfaatan GPU real-time dan penggunaan memori. Kemudian, gunakan Prometheus Adapter untuk mengonversi metrik tersebut ke format yang dikenali oleh Kubernetes dan mengintegrasikannya dengan AHPA. AHPA memprediksi permintaan sumber daya GPU berdasarkan data ini, tren beban historis, dan algoritma prediksi. AHPA secara otomatis menyesuaikan jumlah pod replika atau alokasi sumber daya GPU untuk memastikan operasi perluasan selesai sebelum sumber daya habis. AHPA juga melakukan penyusutan ketika ada sumber daya menganggur guna mengurangi biaya dan meningkatkan efisiensi kluster.

Langkah 1: Pasang Metrics Adapter

  1. Dapatkan endpoint HTTP API internal dari instance Prometheus yang digunakan oleh 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 berada.

    4. Klik nama instance Managed Service for Prometheus. Di panel navigasi kiri halaman detail instance, klik Settings dan catat endpoint internal di bagian URL API HTTP.

  2. Pasang 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 dan klik ack-alibaba-cloud-metrics-adapter.

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

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

    5. Di halaman wizard Parameters, atur parameter Chart Version dan tentukan endpoint HTTP API internal yang Anda peroleh di Langkah 1 sebagai nilai parameter prometheus.url di bagian Parameters. Lalu, klik OK.

      URL

Langkah 2: Gunakan AHPA untuk melakukan penskalaan prediktif berdasarkan metrik GPU

Pada contoh ini, layanan inferensi diterapkan. Permintaan kemudian dikirim ke layanan inferensi untuk memeriksa apakah AHPA dapat melakukan penskalaan prediktif berdasarkan metrik GPU.

  1. Terapkan layanan inferensi.

    1. Jalankan perintah berikut untuk menerapkan layanan inferensi:

      Tampilkan Konten YAML

      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

      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. Jalankan perintah berikut untuk mengirim permintaan ke layanan inferensi dan memeriksa apakah layanan tersebut telah diterapkan.

      Anda dapat menjalankan perintah kubectl get svc bert-intent-detection-svc untuk memeriksa alamat IP node dengan akselerasi GPU tempat layanan inferensi diterapkan. Lalu, ganti 47.95.XX.XX dalam perintah berikut dengan alamat IP yang Anda peroleh:

      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 # Hasil query.

      Jika kode status HTTP 200 dan hasil query dikembalikan, layanan inferensi telah diterapkan.

  2. Konfigurasikan AHPA.

    Pada contoh ini, AHPA dikonfigurasi untuk menskalakan pod ketika pemanfaatan GPU melebihi 20%.

    1. Konfigurasikan sumber data untuk mengumpulkan metrik bagi AHPA.

      1. Buat file bernama application-intelligence.yaml dan salin konten berikut ke file tersebut.

        Atur parameter prometheusUrl ke endpoint internal dari instance Prometheus yang Anda peroleh 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. Jalankan perintah berikut untuk menerapkan application-intelligence:

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

      1. Buat file bernama fib-gpu.yaml dan salin konten berikut ke file tersebut.

        Pada contoh ini, mode observer digunakan. Untuk informasi lebih lanjut tentang parameter terkait AHPA, lihat Parameter.

        Tampilkan Konten YAML

        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

        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

        Di dalam output, 0 dikembalikan di kolom CURRENT(%) dan 20 dikembalikan di kolom TARGET(%). Ini menunjukkan bahwa pemanfaatan GPU saat ini adalah 0% dan penskalaan pod akan dipicu jika pemanfaatan GPU melebihi 20%.

  3. Uji penskalaan otomatis pada layanan inferensi.

    1. Jalankan perintah berikut untuk mengakses layanan inferensi:

      Tampilkan Konten YAML

      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. Jalankan perintah berikut untuk memeriksa 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          189          10            4          10        50        6d19h

      Output menunjukkan bahwa pemanfaatan GPU saat ini (CURRENT(%)) lebih tinggi daripada ambang penskalaan (TARGET(%)). Oleh karena itu, penskalaan pod dipicu dan jumlah pod yang diharapkan adalah 10, yaitu nilai yang dikembalikan di kolom DESIREDPODS.

    3. Jalankan perintah berikut untuk memeriksa hasil prediksi:

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

      Gambar berikut menunjukkan hasil prediksi pemanfaatan GPU berdasarkan data historis dalam tujuh hari terakhir.GPU预测趋势

      • Prediksi Pengamatan Sumber Daya GPU: Pemanfaatan GPU aktual diwakili oleh garis biru. Pemanfaatan GPU yang diprediksi oleh AHPA diwakili oleh garis hijau. Anda dapat melihat bahwa pemanfaatan GPU yang diprediksi lebih tinggi daripada pemanfaatan GPU aktual.

      • Prediksi Pengamatan POD: Jumlah pod aktual yang ditambahkan atau dihapus dalam acara penskalaan diwakili oleh garis biru. Jumlah pod yang diprediksi oleh AHPA untuk ditambahkan atau dihapus dalam acara penskalaan diwakili oleh garis hijau. Anda dapat melihat bahwa jumlah pod yang diprediksi kurang dari jumlah pod aktual. Anda dapat mengatur mode penskalaan ke auto dan mengonfigurasi pengaturan lain berdasarkan jumlah pod yang diprediksi. Dengan cara ini, AHPA dapat menghemat sumber daya pod.

      Hasil menunjukkan bahwa AHPA dapat menggunakan penskalaan prediktif untuk menangani beban kerja yang fluktuatif sesuai harapan. Setelah Anda mengonfirmasi hasil prediksi, Anda dapat mengatur mode penskalaan ke auto, yang memungkinkan AHPA secara otomatis menskalakan pod.

Referensi

  • Knative memungkinkan Anda menggunakan AHPA di kluster Kubernetes tanpa server (ASK). Jika aplikasi Anda meminta sumber daya dalam pola periodik, Anda dapat menggunakan AHPA untuk memprediksi perubahan dalam permintaan sumber daya dan mempramuat sumber daya untuk aktivitas penskalaan. Ini mengurangi dampak cold start ketika aplikasi Anda diskalakan. Untuk informasi lebih lanjut, lihat Gunakan AHPA untuk Mengaktifkan Penskalaan Prediktif di Knative.

  • Dalam beberapa skenario, Anda mungkin perlu menskalakan aplikasi berdasarkan metrik kustom, seperti QPS permintaan HTTP atau panjang antrian pesan. AHPA menyediakan mekanisme Metrik Eksternal yang dapat bekerja sama dengan komponen alibaba-cloud-metrics-adapter untuk memungkinkan Anda menskalakan aplikasi berdasarkan metrik kustom. Untuk informasi lebih lanjut, lihat Gunakan AHPA untuk Mengonfigurasi Metrik Kustom untuk Penskalaan Aplikasi.