Kubernetes mendukung penskalaan otomatis berdasarkan metrik khusus. Kubernetes dapat bekerja dengan Managed Service for Prometheus untuk mengimplementasikan penskalaan otomatis berdasarkan metrik GPU. Topik ini menjelaskan cara menerapkan Managed Service for Prometheus untuk memantau aplikasi dan memberikan contoh cara melihat metrik GPU yang dikumpulkan oleh Managed Service for Prometheus, serta mengaktifkan penskalaan otomatis pod berdasarkan metrik GPU.
Prasyarat
Sebuah ACK cluster dengan node yang dipercepat GPU atau ACK dedicated cluster dengan node yang dipercepat GPU telah dibuat.
Pengenalan
Komputasi yang dipercepat GPU banyak digunakan dalam skenario komputasi berperforma tinggi, seperti pelatihan model pembelajaran mendalam dan inferensi. Untuk mengurangi biaya sumber daya, Anda dapat mengaktifkan penskalaan klaster otomatis berdasarkan metrik GPU, seperti pemanfaatan GPU dan penggunaan memori GPU.
Kubernetes menyediakan data CPU dan memori sebagai metrik default untuk Horizontal Pod Autoscaler (HPA). Untuk skenario yang lebih kompleks, seperti penskalaan otomatis berdasarkan metrik GPU, Anda dapat menggunakan adaptor Prometheus untuk menyesuaikan metrik GPU yang dikumpulkan oleh Prometheus dan menggunakan API metrik khusus untuk mendefinisikan metrik khusus untuk HPA. Ini memungkinkan Anda untuk mengaktifkan penskalaan elastis berdasarkan penggunaan GPU dan memori. Gambar berikut menunjukkan cara kerja penskalaan otomatis berdasarkan metrik GPU.
Langkah 1: Terapkan Managed Service for Prometheus dan ack-alibaba-cloud-metrics-adapter
Aktifkan Managed Service for Prometheus.
CatatanAnda dapat memilih Aktifkan Managed Service for Prometheus saat membuat klaster. Ini menghemat kebutuhan untuk menginstal Managed Service for Prometheus setelah klaster dibuat.
Instal dan konfigurasikan ack-alibaba-cloud-metrics-adapter.
A. Obtain the HTTP API endpoint
Masuk ke Konsol ARMS.
Di panel navigasi di sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah tempat ACK cluster Anda diterapkan. Kemudian, klik nama instance Prometheus yang digunakan oleh klaster Anda untuk masuk ke halaman detail instance.
Pada halaman Settings, klik tab Settings, dan salin endpoint internal di bagian HTTP API URL.
B. Configure the Prometheus URL
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, pilih .
Pada halaman Marketplace, klik tab App Catalog. Temukan dan klik ack-alibaba-cloud-metrics-adapter.
Pada halaman ack-alibaba-cloud-metrics-adapter, klik Deploy.
Pada halaman wizard Basic Information, pilih klaster dan namespace, lalu klik Next.
Pada halaman wizard Parameters, pilih versi bagan dari daftar drop-down Chart Version, atur
URLPrometheus di bagian Parameters ke endpoint API HTTP yang Anda peroleh, lalu klik OK.
Langkah 2: Konfigurasikan aturan untuk ack-alibaba-cloud-metrics-adapter
a. Kueri metrik GPU
Kueri metrik GPU. Untuk informasi lebih lanjut, lihat Pengenalan metrik.
b. Konfigurasikan aturan untuk ack-alibaba-cloud-metrics-adapter
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel navigasi di sebelah kiri, pilih .
Pada halaman Helm, klik Update di kolom Actions dari ack-alibaba-cloud-metrics-adapter. Tambahkan
rulesberikut di bawahcustom.Gambar berikut memberikan contohnya.

Jalankan perintah berikut. Jika output mencakup
DCGM_FI_DEV_GPU_UTIL,DCGM_CUSTOM_PROCESS_SM_UTIL,DCGM_FI_DEV_FB_USED, danDCGM_CUSTOM_PROCESS_MEM_USED, aturan telah dikonfigurasi. Pada contoh berikut,DCGM_CUSTOM_PROCESS_SM_UTILditampilkan di output.
Langkah 3: Aktifkan penskalaan otomatis berdasarkan metrik GPU
Contoh berikut menunjukkan cara menerapkan layanan inferensi model pada node yang dipercepat GPU dan melakukan uji stres pada node untuk memeriksa apakah penskalaan otomatis dapat dilakukan berdasarkan metrik GPU.
a. Terapkan layanan inferensi
Jalankan perintah berikut untuk menerapkan layanan inferensi:
Kueri status pod dan Service.
Jalankan perintah berikut untuk memeriksa status pod:
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>Output menunjukkan bahwa hanya satu pod yang diterapkan pada node yang dipercepat GPU 192.168.94.107.
Jalankan perintah berikut untuk memeriksa status Service:
kubectl get svc bert-intent-detection-svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE bert-intent-detection-svc LoadBalancer 172.16.186.159 47.95.XX.XX 80:30118/TCP 5m1sJika output menampilkan nama Service, Service telah diterapkan.
Masuk ke node 192.168.94.107 menggunakan SSH dan jalankan perintah berikut untuk memeriksa pemanfaatan GPU:
nvidia-smiOutput yang diharapkan:
Wed Feb 16 11:48:07 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.102.04 Driver Version: 450.102.04 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:07.0 Off | 0 | | N/A 32C P0 55W / 300W | 15345MiB / 16160MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 2305118 C python 15343MiB | +-----------------------------------------------------------------------------+Output menunjukkan bahwa layanan inferensi sedang berjalan pada node yang dipercepat GPU. Pemanfaatan GPU adalah 0 karena tidak ada permintaan yang dikirim ke layanan.
Jalankan perintah berikut untuk mengirim permintaan ke layanan inferensi dan memeriksa apakah layanan telah diterapkan:
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 kueri.Jika kode status HTTP 200 dan hasil kueri dikembalikan, layanan inferensi telah diterapkan.
b. Konfigurasikan HPA
Contoh berikut menjelaskan cara memicu penskalaan otomatis ketika pemanfaatan GPU pod melebihi 20%. Tabel berikut menjelaskan metrik yang didukung oleh HPA.
Metrik | Deskripsi | Satuan |
DCGM_FI_DEV_GPU_UTIL |
| % |
DCGM_FI_DEV_FB_USED |
| MiB |
DCGM_CUSTOM_PROCESS_SM_UTIL | Pemanfaatan GPU pod. | % |
DCGM_CUSTOM_PROCESS_MEM_USED | Jumlah memori GPU yang digunakan oleh pod. | MiB |
DCGM_CUSTOM_PROCESS_GPU_MEM_USED_RATIO | Pemanfaatan memori GPU pod.
| % |
Jalankan perintah berikut untuk menerapkan HPA:
Cluster yang menjalankan Kubernetes 1.23 atau lebih baru
cat <<EOF | kubectl create -f - apiVersion: autoscaling/v2 # Gunakan konfigurasi HPA untuk versi API autoscaling/v2. kind: HorizontalPodAutoscaler metadata: name: gpu-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: bert-intent-detection minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: DCGM_CUSTOM_PROCESS_SM_UTIL target: type: Utilization averageValue: 20 # Jika pemanfaatan GPU melebihi 20%, pod akan diskalakan keluar. EOFCluster yang menjalankan versi Kubernetes lebih lama dari 1.23
cat <<EOF | kubectl create -f - apiVersion: autoscaling/v2beta1 # Gunakan konfigurasi HPA untuk versi API autoscaling/v2beta1. kind: HorizontalPodAutoscaler metadata: name: gpu-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: bert-intent-detection minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metricName: DCGM_CUSTOM_PROCESS_SM_UTIL # Pemanfaatan GPU pod. targetAverageValue: 20 # Jika pemanfaatan GPU melebihi 20%, pod akan diskalakan keluar. EOFJalankan perintah berikut untuk memeriksa status HPA:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa Deployment/bert-intent-detection 0/20 1 10 1 74sOutput yang diharapkan menunjukkan bahwa
TARGETSmenampilkan0/20. Pemanfaatan GPU saat ini adalah 0. Ketika pemanfaatan GPU melebihi 20%, pod akan diskalakan keluar.
c. Uji penskalaan otomatis pada layanan inferensi
Uji aktivitas penskalaan keluar
Jalankan perintah berikut untuk melakukan uji stres:
hey -n 10000 -c 200 "http://47.95.XX.XX/predict?query=music"CatatanRumus berikut digunakan untuk menghitung jumlah pod yang diharapkan setelah penskalaan otomatis:
Jumlah pod yang diharapkan = ceil [Jumlah pod saat ini × (Pemanfaatan GPU saat ini/Pemanfaatan GPU yang diharapkan)]. Sebagai contoh, jika jumlah pod saat ini adalah 1, pemanfaatan GPU saat ini adalah 23, pemanfaatan GPU yang diharapkan adalah 20, jumlah pod yang diharapkan setelah penskalaan otomatis adalah 2.Selama uji stres, jalankan perintah berikut untuk memeriksa status HPA dan pod:
Jalankan perintah berikut untuk memeriksa status HPA:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa Deployment/bert-intent-detection 23/20 1 10 2 7m56sOutput menunjukkan bahwa nilai di kolom
TARGETSadalah23/20. Pemanfaatan GPU saat ini melebihi ambang batas 20%. Dalam hal ini, penskalaan otomatis dipicu dan klaster ACK mulai menambah pod.Jalankan perintah berikut untuk memeriksa status pod:
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE bert-intent-detection-7b486f6bf-f**** 1/1 Running 0 44m bert-intent-detection-7b486f6bf-m**** 1/1 Running 0 14sOutput menunjukkan bahwa dua pod sedang berjalan. Nilai ini sama dengan jumlah pod yang diharapkan berdasarkan rumus sebelumnya.
Output yang dikembalikan oleh HPA dan pod menunjukkan bahwa pod telah diskalakan keluar.
Uji aktivitas penskalaan masuk
Ketika uji stres berhenti dan pemanfaatan GPU turun di bawah 20%, klaster ACK mulai mengurangi pod.
Jalankan perintah berikut untuk memeriksa status HPA:
kubectl get hpaOutput yang diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa Deployment/bert-intent-detection 0/20 1 10 1 15mOutput menunjukkan bahwa nilai di kolom
TARGETSadalah0/20. Pemanfaatan GPU saat ini turun menjadi 0. Klaster ACK mulai mengurangi pod setelah sekitar 5 menit.Jalankan perintah berikut untuk memeriksa status pod:
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE bert-intent-detection-7b486f6bf-f**** 1/1 Running 0 52mOutput menunjukkan bahwa jumlah pod adalah 1. Ini berarti pod telah diskalakan masuk.
FAQ
Bagaimana cara memastikan apakah GPU digunakan?
Anda dapat memeriksa apakah ada perubahan dalam pemanfaatan GPU di tab GPU Monitoring. Jika pemanfaatan GPU meningkat, GPU digunakan. Jika tidak ada perubahan dalam pemanfaatan GPU, tidak ada GPU yang digunakan. Untuk melakukannya, ikuti langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel sisi kiri, pilih .
Pada halaman Prometheus Monitoring, klik tab GPU Monitoring dan lihat perubahan dalam pemanfaatan GPU.