Impostazione dell'autoscaling orizzontale dei pod sui nodi worker GPU
Esaminare i seguenti passaggi per abilitare l'autoscaling orizzontale dei pod sui nodi worker GPU.
- Perché l'autoscaling orizzontale dei pod?
- È possibile configurare l'autoscaling orizzontale dei pod per scalare il numero di pod quando il carico di lavoro consuma più o meno di una certa quantità di GPU. Poiché le GPU sono una risorsa costosa, non si vuole che i carichi di lavoro vengano eseguiti alla massima capacità per lunghi periodi di tempo. Invece, è possibile scalare i pod o aumentare o diminuire in base al carico di lavoro in corso nel cluster.
Prerequisiti
Per configurare HPA, nel cluster devono essere installati i seguenti componenti.
- NVIDIA Esportatore di Data Center GPU Manager (DCGM) per raccogliere le metriche delle GPU in Kubernetes. L'esportatore DCGM espone metriche GPU per Prometheus che possono essere visualizzate con Grafana.
- Prometheus e l'adattatore Prometheus per generare metriche personalizzate.
-
Installare Prometheus.
helm install prom-stack prometheus-community/kube-prometheus-stack -f ~/ca-prom-val.yamlcat ~/ca-prom-val.yamlprometheus: prometheusSpec: additionalScrapeConfigs: - job_name: gpu-metrics scrape_interval: 1s metrics_path: /metrics scheme: http kubernetes_sd_configs: - role: endpoints namespaces: names: - nvidia-gpu-operator relabel_configs: - source_labels: [__meta_kubernetes_endpoints_name] action: drop regex: .*-node-feature-discovery-master - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: kubernetes_node -
Ottenere i dettagli del servizio Prometheus.
oc get svc -
Installare l'adattatore Prometheus.
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url="http://prom-stack-kube-prometheus-prometheus.default.svc.cluster.local"
Impostazione di HPA
Completare i seguenti passaggi per creare un'installazione client che utilizza HPA.
-
Crea una distribuzione.
apiVersion: apps/v1 kind: Deployment metadata: name: cuda-test labels: app: cuda-test spec: selector: matchLabels: app: cuda-test template: metadata: labels: app: cuda-test spec: containers: - name: cuda-test-main image: "registry.k8s.io/cuda-vector-add:v0.1" command: ["bash", "-c", "for (( c=1; c<=5000; c++ )); do ./vectorAdd; done"] resources: limits: nvidia.com/gpu: 1 -
Crea una risorsa "
HorizontalPodAutoscaler".kind: HorizontalPodAutoscaler apiVersion: autoscaling/v2 metadata: name: cuda-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: cuda-test minReplicas: 1 maxReplicas: 3 metrics: - type: Pods pods: metric: name: DCGM_FI_DEV_GPU_UTIL #the metric you want to use for autoscaling target: type: AverageValue averageValue: '5' -
Eseguire i seguenti comandi per esaminare i risultati.
oc get pods | grep cudacuda-test-d987464bf-brd48 1/1 Running 0 4m19s cuda-test-d987464bf-gsx82 0/1 Pending 0 4m19s cuda-test-d987464bf-zstzs 1/1 Running 0 7m35sC'era 1 replica che è stata scalata a 3 con l'aumento delle risorse del carico di lavoro.
Min replicas: 1 Max replicas: 3 Deployment pods: 3 current / 3 desired Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 50s horizontal-pod-autoscaler New size: 3; reason: pods metric DCGM_FI_DEV_GPU_UTIL above target