Mise en place de l'autoscaling horizontal des pods sur les nœuds de travail GPU
Passez en revue les étapes suivantes pour activer l'autoscaling horizontal des pods sur vos nœuds de travail GPU.
- Pourquoi une mise à l'échelle horizontale des pods?
- Vous pouvez configurer l'autoscaling horizontal des pods afin d'adapter le nombre de pods lorsque la charge de travail consomme plus ou moins d'une certaine quantité de GPU. Les GPU étant une ressource coûteuse, il n'est pas souhaitable que les charges de travail soient exécutées au maximum de leur capacité pendant de longues périodes. Au lieu de cela, vous pouvez faire évoluer les pods ou les faire monter ou descendre en fonction de la charge de travail en cours dans le cluster.
Prérequis
Pour configurer HPA, les composants suivants doivent être installés sur votre cluster.
- NVIDIA Data Center GPU Manager (DCGM) exporter pour rassembler les métriques GPU dans Kubernetes. L'exportateur DCGM expose les métriques GPU pour Prometheus qui peuvent être visualisées à l'aide de Grafana.
- Prometheus et l'adaptateur Prometheus pour générer des mesures personnalisées.
-
Installer 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 -
Obtenez les détails du service Prometheus.
oc get svc -
Installez l'adaptateur « Prometheus ».
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url="http://prom-stack-kube-prometheus-prometheus.default.svc.cluster.local"
Mise en place de l'APH
Effectuez les étapes suivantes pour créer un déploiement qui utilise HPA.
-
Créez un déploiement.
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 -
Créer une ressource «
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' -
Exécutez les commandes suivantes pour consulter les résultats.
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 7m35sIl y avait une réplique qui a été portée à trois au fur et à mesure que la charge de travail augmentait.
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