El monitoreo de GPU basado en NVIDIA Data Center GPU Manager (DCGM) le ofrece visibilidad sobre la utilización, el estado y el rendimiento de las cargas de trabajo de GPU en todo su clúster. Utilice las métricas de GPU para diagnosticar problemas, optimizar la asignación de recursos y planificar la capacidad.
Funcionamiento
DCGM es la herramienta de NVIDIA para gestionar GPU en clústeres a gran escala. Un sistema de monitoreo basado en DCGM proporciona:
Monitoreo del comportamiento de la GPU
Gestión de la configuración de GPU
Gestión de directivas de GPU
Diagnóstico del estado de la GPU
Estadísticas a nivel de GPU y de hilo
Configuración y monitoreo de NVSwitch
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Límites
El controlador de NVIDIA en cada nodo debe ser versión 418.87.01 o posterior. Inicie sesión en un nodo GPU y ejecute
nvidia-smipara comprobar la versión del controlador.Las Profiling Metrics requieren el controlador de NVIDIA versión 450.80.02 o posterior. Para más detalles, consulte Feature Overview.
No se admite el monitoreo de NVIDIA Multi-Instance GPU (MIG).
Facturación
Las métricas de monitoreo de GPU se recopilan mediante Alibaba Cloud Managed Service for Prometheus. Para obtener detalles sobre precios, consulte Billing overview.
Paso 1: Habilitar el monitoreo de Prometheus
El componente ack-arms-prometheus debe ser versión 1.1.7 o posterior. Check the component version y actualícelo si es necesario.
Opción A: Habilitar el monitoreo para un clúster existente
(Opcional) Para un clúster dedicado ACK, primero otorgue la autorización para las directivas de monitoreo al clúster.
En la página Clusters, haga clic en el nombre del clúster objetivo. En el panel de navegación izquierdo, seleccione Operations > Prometheus Monitoring.
En la página Prometheus Monitoring, seleccione una versión de monitoreo de contenedores y haga clic en Install.
Una vez habilitado el monitoreo, las métricas básicas predeterminadas se recopilan automáticamente. Para recopilar métricas personalizadas, consulte Recopilación de métricas personalizadas. En esta página también hay varios paneles preconfigurados disponibles, incluidos Cluster Overview, Node Monitoring, Application Monitoring, Network Monitoring y Storage Monitoring.
Opción B: Habilitar el monitoreo al crear un clúster
Clúster administrado ACK Pro Edition:
En la página Component Configuration, dentro de la sección Container Monitoring, seleccione ACK Cluster Monitoring Pro Edition o ACK Cluster Monitoring Basic Edition. Para más detalles, consulte Creación de un clúster administrado ACK.
Nota: El Auto Mode para smart hosting habilita Container Monitoring Basic Edition de forma predeterminada.
Clúster administrado ACK Basic Edition, clústeres ACS y clústeres ACK Serverless:
En la página Component Configurations del asistente de creación de clústeres, dentro de la sección Monitor containers, seleccione Enable Managed Service for Prometheus para instalar Container Monitoring Basic Edition.
Una vez habilitado el monitoreo, las métricas básicas predeterminadas se recopilan automáticamente. Para recopilar métricas personalizadas, consulte Recopilación de métricas personalizadas. En la página de detalles del clúster, seleccione Operations > Prometheus Monitoring para ver los paneles preconfigurados como Cluster Overview, Node Monitoring, Application Monitoring, Network Monitoring y Storage Monitoring.
Para obtener más información sobre cómo habilitar el monitoreo de Prometheus, consulte Enable Prometheus monitoring for ACK.
Si utiliza un servicio de Prometheus de código abierto autogestionado y necesita monitoreo de GPU, instale el componente ack-gpu-exporter.
Paso 2: Comprobar los componentes de monitoreo de GPU
Después de habilitar el monitoreo de Prometheus, compruebe que los pods del exportador de GPU se estén ejecutando:
kubectl get pods -n arms-prom -l k8s-app=ack-prometheus-gpu-exporter
Cada nodo GPU del clúster debe tener un pod ack-prometheus-gpu-exporter en ejecución. Este DaemonSet recopila las métricas de DCGM de sus nodos GPU.
Paso 3: Desplegar una aplicación de ejemplo
Para generar métricas de GPU, despliegue una carga de trabajo de ejemplo en un nodo GPU.
-
Cree un archivo llamado
tensorflow-benchmark.yamlcon el siguiente contenido:apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark spec: containers: - name: tensorflow-benchmark image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=50000 - --batch_size=8 resources: limits: nvidia.com/gpu: 1 # Request one GPU. workingDir: /root restartPolicy: Never -
Despliegue la aplicación:
kubectl apply -f tensorflow-benchmark.yaml -
Compruebe el estado del pod:
kubectl get podSalida esperada:
NAME READY STATUS RESTARTS AGE tensorflow-benchmark-k*** 1/1 Running 0 114s
Paso 4: Consultar los datos de monitoreo de GPU
Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster objetivo. En el panel de navegación izquierdo, seleccione Operations > Prometheus Monitoring.
-
Haga clic en la pestaña GPU Monitoring y luego en la pestaña GPUs - Pods. Los datos de monitoreo muestran en qué nodo se está ejecutando cada pod de GPU (por ejemplo,
cn-beijing.10.131.xx.xxx).La tabla GPU Pod Details muestra los detalles de monitoreo del Pod tensorflow-benchmark-c2mjs (Namespace: default): Allocated Mode es exclusive, Used GPU Memory es 836.00 MiB, Allocated GPU Memory es 22.49 GiB, y SM Utilization, GPU Memory Copy Utilization y Decode Utilization son todas 0%.
-
Haga clic en la pestaña GPUs - Nodes y establezca GPUNode en un nodo específico (por ejemplo,
cn-beijing.10.131.xx.xxx) para ver información detallada de la GPU de ese nodo. Para descripciones de los parámetros, consulte Dashboard description.Por ejemplo, se pueden mostrar las siguientes métricas para el nodo seleccionado:
GPU Mode: Exclusive
NVIDIA Driver Version: 535.161.07
Allocated GPUs: 1.00
GPU Utilization: 0.0%
Allocated GPU Memory: 100.0%
Used GPU Memory: 3.3%
Allocated Computing Power (nvidia0): 0.00%
The Last one XID Error (past 24 hours): 0
Preguntas frecuentes
Pérdida de memoria de DCGM
El DaemonSet ack-prometheus-gpu-exporter se inicia automáticamente cuando instala Managed Service for Prometheus. En ocasiones, DCGM no libera correctamente la memoria durante la ejecución, lo que provoca que el uso de memoria aumente con el tiempo.
Se ha configurado un ajuste resources.limits en el pod del exportador para mitigar esto. Cuando se alcanza el límite de memoria, el pod se reinicia automáticamente. Esto suele ocurrir aproximadamente una vez al mes. Tras el reinicio, las métricas se reportan con normalidad. Grafana puede mostrar anomalías durante unos minutos (por ejemplo, un aumento repentino en el recuento de nodos), pero la visualización se corrige por sí sola.
Para más información, consulte The DCGM has a memory leak? en GitHub.
ack-prometheus-gpu-exporter finaliza por un evento de falta de memoria
El componente ack-prometheus-gpu-exporter utiliza DCGM en modo integrado, lo cual consume una gran cantidad de memoria en nodos con múltiples GPU y es propenso a pérdidas de memoria. Si ejecuta varios procesos de GPU en una instancia con múltiples GPU y asigna muy poca memoria al exportador, el pod puede finalizar debido a un evento de falta de memoria (OOM).
Por lo general, el pod reanuda el reporte de métricas después de reiniciarse. Si las finalizaciones por falta de memoria ocurren con frecuencia, aumente los limits de memoria para el DaemonSet ack-prometheus-gpu-exporter en el namespace arms-prom.
ack-prometheus-gpu-exporter reporta un error
Si los registros del pod contienen un error similar al siguiente:
failed to get all process informations of gpu nvidia1,reason: failed to get gpu utilizations for all processes on device 1,reason: Not Found
Este error ocurre porque las versiones anteriores de ack-prometheus-gpu-exporter no pueden recuperar métricas de GPU cuando no hay tareas ejecutándose en ciertas tarjetas GPU.
Actualice el componente ack-arms-prometheus a la última versión para resolver este problema.