Gunakan Custom Metrics Kubernetes dan Managed Service for Prometheus untuk mengumpulkan metrik GPU dan melakukan auto scale kontainer dengan HPA.Managed Service for Prometheus dan gunakan HPA untuk melakukan auto scale kontainer.
Prasyarat
Node GPU telah ditambahkan ke kluster Anda, atau kluster GPU khusus telah dibuat.
Cara kerja
GPU mempercepat komputasi dalam skenario seperti pelatihan model pembelajaran mendalam dan inferensi. Auto scaling berdasarkan metrik GPU—seperti pemanfaatan dan penggunaan memori—membantu mengoptimalkan biaya.
Secara default, Kubernetes Horizontal Pod Autoscaler (HPA) menggunakan metrik CPU dan memori. Untuk metrik GPU, Prometheus Adapter mengambil data dari Managed Service for Prometheus dan mengeksposnya melalui Custom Metrics API. HPA kemudian melakukan scaling beban kerja berdasarkan pemanfaatan GPU, penggunaan memori, dan indikator lainnya. Diagram berikut menggambarkan proses tersebut.
Langkah 1: Deploy Prometheus dan adapter metrik
-
Aktifkan pemantauan Prometheus untuk kluster Anda.
CatatanLewati langkah ini jika Prometheus telah diinstal saat pembuatan kluster.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di panel navigasi kiri, pilih .
-
Instal dan konfigurasikan ack-alibaba-cloud-metrics-adapter.
1. Dapatkan URL HTTP API
-
Masuk ke Konsol ARMS.
-
Pilih wilayah kluster ACK Anda. Klik instans target.
-
Pada halaman Settings, di tab Settings, salin alamat jaringan internal dari HTTP API Address (Grafana Read Address).
2. Konfigurasikan URL Prometheus
Masuk ke Konsol ACK. Di panel navigasi kiri, klik .
-
Pada halaman Marketplace, klik tab App Catalog. Cari dan klik ack-alibaba-cloud-metrics-adapter.
-
Pada halaman ack-alibaba-cloud-metrics-adapter, klik Deploy.
-
Pada wizard Basic Information, pilih kluster dan namespace Anda. Klik Next.
-
Pada wizard Parameters, pilih Chart Version. Di bagian Parameters, atur parameter
urlke URL HTTP API yang telah disalin. Klik OK.
-
Langkah 2: Konfigurasikan aturan adapter
1. Kueri metrik GPU
Untuk daftar metrik GPU yang tersedia, lihat Deskripsi metrik pemantauan.
2. Konfigurasikan aturan adapter
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Dalam daftar Helm, temukan ack-alibaba-cloud-metrics-adapter. Di kolom Actions, klik Update. Tambahkan
rulesberikut ke bidangcustom.Konfigurasi lengkap setelah menambahkan aturan:
Chart Url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-alibaba-cloud-metrics-adapter-1.3.2.tgz adapter: rules: custom: - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>) name: as: ${1}_bytes_per_second matches: ^(.*)_bytes resources: overrides: namespace: resource: namespace pod: resource: pod seriesQuery: container_memory_working_set_bytes{namespace!="",pod!=""} - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>) name: as: ${1}_core_per_second matches: ^(.*)_seconds_total resources: overrides: namespace: resource: namespace pod: resource: pod seriesQuery: container_cpu_usage_seconds_total{namespace!="",pod!=""} - metricsQuery: <<.Series>>{<<.LabelMatchers>>} resources: overrides: NodeName: resource: node seriesQuery: DCGM_FI_DEV_GPU_UTIL{} # GPU utilization. - metricsQuery: <<.Series>>{<<.LabelMatchers>>} resources: overrides: NamespaceName: resource: namespace NodeName: resource: node PodName: resource: pod seriesQuery: DCGM_CUSTOM_PROCESS_SM_UTIL{} # Container GPU utilization. - metricsQuery: <<.Series>>{<<.LabelMatchers>>} resources: overrides: NodeName: resource: node seriesQuery: DCGM_FI_DEV_FB_USED{} # GPU memory usage. - metricsQuery: <<.Series>>{<<.LabelMatchers>>} resources: overrides: NamespaceName: resource: namespace NodeName: resource: node PodName: resource: pod seriesQuery: DCGM_CUSTOM_PROCESS_MEM_USED{} # Container GPU memory usage. - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>})by(<<.GroupBy>>) / sum(DCGM_CUSTOM_CONTAINER_MEM_ALLOCATED{})by(<<.GroupBy>>) name: as: ${1}_GPU_MEM_USED_RATIO matches: ^(.*)_MEM_USED resources: overrides: NamespaceName: resource: namespace PodName: resource: pod seriesQuery: DCGM_CUSTOM_PROCESS_MEM_USED{NamespaceName!="",PodName!=""} # Container GPU memory utilization. default: false enabled: true logLevel: 5Verifikasi konfigurasi. Output harus berisi metrik seperti
DCGM_FI_DEV_GPU_UTIL,DCGM_CUSTOM_PROCESS_SM_UTIL,DCGM_FI_DEV_FB_USED, danDCGM_CUSTOM_PROCESS_MEM_USED. Contoh berikut menyorotiDCGM_CUSTOM_PROCESS_SM_UTIL; output aktual Anda mungkin berbeda.
Langkah 3: Implementasikan auto scaling
Uji auto scaling dengan menerapkan layanan inferensi GPU, menjalankan uji stres, dan mengamati perilaku scaling berbasis GPU.
1. Deploy layanan inferensi
-
Deploy layanan inferensi.
-
Periksa status Pod dan Service.
-
Periksa 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>Satu Pod diterapkan pada node GPU 192.168.94.107.
-
Periksa 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 5m1sOutput menunjukkan nama layanan, yang mengonfirmasi bahwa Service berhasil diterapkan.
-
-
Masuk ke node GPU 192.168.94.107 melalui SSH dan periksa penggunaan 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 layanan inferensi berjalan di GPU. Pemanfaatan GPU adalah 0% karena belum ada permintaan yang diterima.
-
Verifikasi penerapan layanan inferensi.
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 # Intent recognition result.Kode status 200 dengan hasil pengenalan maksud mengonfirmasi penerapan yang berhasil.
2. Konfigurasikan HPA
Contoh ini memicu skala keluar ketika pemanfaatan GPU Pod melebihi 20%. Tabel berikut mencantumkan metrik yang didukung HPA.
|
Metric |
Description |
Unit |
|
DCGM_FI_DEV_GPU_UTIL |
|
% |
|
DCGM_FI_DEV_FB_USED |
|
MiB |
|
DCGM_CUSTOM_PROCESS_SM_UTIL |
Pemanfaatan GPU kontainer. |
% |
|
DCGM_CUSTOM_PROCESS_MEM_USED |
Penggunaan memori GPU kontainer. |
MiB |
|
DCGM_CUSTOM_PROCESS_GPU_MEM_USED_RATIO |
Pemanfaatan memori GPU kontainer.
|
% |
-
Deploy HPA.
Versi kluster ≥ 1.23
cat <<EOF | kubectl create -f - apiVersion: autoscaling/v2 # Gunakan konfigurasi HPA 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 # Memicu skala keluar ketika pemanfaatan GPU kontainer melebihi 20%. EOFVersi kluster < 1.23
cat <<EOF | kubectl create -f - apiVersion: autoscaling/v2beta1 # Gunakan konfigurasi HPA 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 # Memicu skala keluar ketika pemanfaatan GPU kontainer melebihi 20%. EOF -
Periksa 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 74sTARGETSmenunjukkan0/20, artinya pemanfaatan GPU saat ini adalah 0. Auto scaling dipicu ketika pemanfaatan melebihi 20%.
3. Uji auto scaling
Uji skala keluar
-
Jalankan uji stres.
hey -n 10000 -c 200 "http://47.95.XX.XX/predict?query=music"CatatanHPA menghitung replika yang diinginkan dengan:
Replika yang Diinginkan = ceil[Replika Saat Ini * (Metrik Saat Ini / Metrik yang Diinginkan)]. Misalnya, dengan 1 replika pada nilai metrik 23 dan target 20, hasilnya adalah 2 replika. -
Saat uji stres berlangsung, amati status HPA dan Pod.
-
Periksa 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 7m56sTARGETSmenunjukkan23/20. Pemanfaatan GPU melebihi target 20%, sehingga memicu skala keluar. -
Periksa 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 14sDua Pod sedang berjalan, sesuai dengan target 2.
Skala keluar dikonfirmasi.
-
Uji skala-masuk
Setelah uji stres berhenti, pemanfaatan GPU turun di bawah 20% dan skala-masuk dimulai.
-
Periksa 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 15mTARGETSmenunjukkan0/20, artinya pemanfaatan GPU adalah 0. Setelah sekitar 5 menit, skala-masuk dimulai. -
Periksa status Pod.
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE bert-intent-detection-7b486f6bf-f**** 1/1 Running 0 52mSatu Pod tersisa, mengonfirmasi skala-masuk.
FAQ
Bagaimana cara memeriksa penggunaan GPU?
Pada tab GPU Monitoring, amati tren pemanfaatan GPU: tren yang meningkat menunjukkan kartu aktif, sedangkan tren datar berarti idle. Untuk melihat tren tersebut:
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Prometheus Monitoring, klik tab GPU Monitoring.