Configuración del autoescalado horizontal de pods en nodos trabajadores GPU
Revise los siguientes pasos para habilitar el autoescalado horizontal de pods en sus nodos trabajadores GPU.
- ¿Por qué autoescalado horizontal?
- Es posible que desee configurar el autoescalado horizontal de pods para escalar el número de pods cuando la carga de trabajo consuma más o menos de una determinada cantidad de GPU. Dado que las GPU son un recurso caro, es posible que no quieras que las cargas de trabajo se ejecuten al máximo de su capacidad durante largos periodos de tiempo. En su lugar, puede escalar los pods hacia arriba o hacia abajo en función de la carga de trabajo que se esté ejecutando en el clúster.
Requisitos previos
Para configurar HPA, los siguientes componentes deben estar instalados en su cluster.
- NVIDIA Exportador de Data Center GPU Manager (DCGM) para recopilar métricas de GPU en Kubernetes. El exportador DCGM expone métricas de GPU para Prometheus que pueden visualizarse utilizando Grafana.
- Prometheus y el adaptador Prometheus para generar métricas personalizadas.
-
Instalar 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 -
Obtenga los detalles del servicio Prometheus.
oc get svc -
Instala el adaptador « Prometheus ».
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url="http://prom-stack-kube-prometheus-prometheus.default.svc.cluster.local"
Configuración de la HPA
Complete los siguientes pasos para crear una implantación que utilice HPA.
-
Cree un despliegue.
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 un recurso «
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' -
Ejecuta los siguientes comandos para revisar los resultados.
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 7m35sHabía 1 réplica que se amplió a 3 a medida que aumentaban los recursos de carga de trabajo.
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