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
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
-
Dapatkan titik akhir HTTP API internal dari instans Prometheus kluster Anda.
-
Masuk ke Konsol ARMS.
-
Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances.
-
Di bagian atas halaman Instances, pilih wilayah tempat kluster ACK Anda berada.
-
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.
-
-
Deploy
ack-alibaba-cloud-metrics-adapter.-
Masuk ke Konsol ACK. Di panel navigasi kiri, pilih Marketplace > Marketplace.
-
Di halaman Marketplace, klik tab App Catalog, temukan
ack-alibaba-cloud-metrics-adapter, lalu klik. -
Di pojok kanan atas halaman ack-alibaba-cloud-metrics-adapter, klik Deploy.
-
Di halaman Basic Information, tentukan Cluster dan Namespace, lalu klik Next.
-
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.
-
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
-
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 -
Verifikasi Pod sedang berjalan:
kubectl get pods -o wideOutput 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> -
Uji layanan inferensi. Pertama, dapatkan alamat IP eksternal:
kubectl get svc bert-intent-detection-svcGanti
47.95.XX.XXdengan 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 PlayMusicHTTP 200 dan hasil kueri mengonfirmasi layanan inferensi sedang berjalan.
Konfigurasikan sumber data untuk AHPA
-
Buat file bernama
application-intelligence.yamldengan konten berikut. AturprometheusUrlke 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" -
Terapkan ConfigMap:
kubectl apply -f application-intelligence.yaml
Deploy AHPA
-
Buat file bernama
fib-gpu.yamldengan konten berikut. Contoh ini menggunakan modeobserver, 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: 12Parameter utama:
Parameter Deskripsi averageUtilizationAmbang batas pemanfaatan GPU (%) yang memicu penskalaan di semua Pod yang ditargetkan oleh AHPA quantilePersentil data historis yang digunakan untuk menghasilkan prediksi. Nilai yang lebih tinggi bersifat lebih konservatif dan mengurangi risiko kekurangan kapasitas scaleUpForwardBerapa detik sebelum permintaan diprediksi AHPA mulai melakukan skala keluar scaleStrategyobserver: hanya memprediksi dan melaporkan.auto: memprediksi dan menjalankaninstanceBoundsPenggantian batas bawah dan atas replika berbasis cron untuk jendela waktu tertentu -
Deploy AHPA:
kubectl apply -f fib-gpu.yaml -
Verifikasi status AHPA:
kubectl get ahpaOutput 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 6d19hCURRENT(%)adalah0danTARGET(%)adalah20, 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.
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
automemungkinkan 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
-
Inferensi GPU arsitektur tanpa server dengan Knative: AHPA berfungsi di kluster Kubernetes arsitektur tanpa server (ASK). Untuk workload dengan pola traffic periodik, AHPA memprediksi perubahan resource dan melakukan pra-ambil kapasitas untuk mengurangi dampak cold start. Lihat Gunakan AHPA untuk mengaktifkan skalabilitas prediktif di Knative.
-
Skalabilitas berbasis metrik kustom: Untuk menskalakan berdasarkan QPS HTTP, panjang antrian pesan, atau metrik aplikasi lainnya, gunakan mekanisme External Metrics dengan
alibaba-cloud-metrics-adapter. Lihat Gunakan AHPA untuk mengonfigurasi metrik kustom untuk penskalaan aplikasi.