Einrichten von horizontaler Pod-Autoskalierung auf GPU-Worker-Nodes
Gehen Sie die folgenden Schritte durch, um horizontale Pod-Autoskalierung auf Ihren GPU-Worker-Nodes zu aktivieren.
- Warum horizontale Pod-Autoskalierung?
- Sie können horizontale Pod-Autoskalierung konfigurieren, um die Anzahl der Pods zu skalieren, wenn die Arbeitslast mehr oder weniger als eine bestimmte Menge an GPU verbraucht. Da Grafikprozessoren eine teure Ressource sind, sollten Sie nicht wollen, dass Arbeitslasten über längere Zeiträume mit voller Kapazität ausgeführt werden. Stattdessen können Sie Pods auf der Grundlage der laufenden Arbeitslast im Cluster nach oben oder unten skalieren.
Voraussetzungen
Um HPA zu konfigurieren, müssen die folgenden Komponenten auf Ihrem Cluster installiert sein.
- NVIDIA Data Center GPU Manager (DCGM) Exporter zur Erfassung von GPU-Metriken in Kubernetes. Der DCGM-Exporter stellt GPU-Metriken für Prometheus bereit, die mit Grafana visualisiert werden können.
- Prometheus und den Prometheus Adapter, um benutzerdefinierte Metriken zu erstellen.
-
Installieren Sie 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 -
Einzelheiten zum Dienst Prometheus.
oc get svc -
Installieren Sie den „ Prometheus “-Adapter.
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url="http://prom-stack-kube-prometheus-prometheus.default.svc.cluster.local"
HPA einrichten
Führen Sie die folgenden Schritte aus, um eine Bereitstellung zu erstellen, die HPA verwendet.
-
Erstellen Sie eine Bereitstellung.
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 -
Erstellen Sie eine „
HorizontalPodAutoscaler“-Ressource.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' -
Führen Sie die folgenden Befehle aus, um die Ergebnisse zu überprüfen.
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 7m35sEs gab 1 Replikat, das auf 3 skaliert wurde, als die Arbeitslastressourcen zunahmen.
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