Configuração do dimensionamento automático de pod horizontal em nós de trabalho da GPU
Analise as etapas a seguir para ativar o dimensionamento automático de pod horizontal nos nós de trabalho da GPU.
- Por que a autoescala horizontal de pods?
- Talvez você queira configurar o dimensionamento automático de pod horizontal para dimensionar o número de pods quando a carga de trabalho consumir mais ou menos do que uma determinada quantidade de GPU. Como as GPUs são um recurso caro, talvez você não queira que as cargas de trabalho sejam executadas na capacidade máxima por longos períodos de tempo. Em vez disso, você pode escalonar ou reduzir pods com base na carga de trabalho em execução no cluster.
Pré-requisitos
Para configurar o HPA, os seguintes componentes devem ser instalados em seu cluster.
- NVIDIA Exportador do Data Center GPU Manager (DCGM) para reunir métricas de GPU em Kubernetes. O exportador DCGM expõe as métricas de GPU para Prometheus, que podem ser visualizadas usando Grafana.
- Prometheus e o adaptador Prometheus para gerar métricas personalizadas.
-
Instale o site 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 -
Obtenha os detalhes do serviço Prometheus.
oc get svc -
Instale o adaptador “ Prometheus ”.
helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --set prometheus.url="http://prom-stack-kube-prometheus-prometheus.default.svc.cluster.local"
Configuração do HPA
Conclua as etapas a seguir para criar uma implantação que use o HPA.
-
Crie uma implementação.
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 -
Crie um recurso do tipo “
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' -
Execute os comandos a seguir para analisar os 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 7m35sHavia uma réplica que foi ampliada para três à medida que o recurso de carga de trabalho aumentou.
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