¡Pregunte, nosotros le respondemos!

Recopilación de métricas de GPU con Grafana

Es importante tener en cuenta que esta configuración no es segura. Recomendamos encarecidamente la lectura de la documentación de cada componente utilizado independientemente y la utilización de las características de seguridad incorporadas siempre que sea posible.

En esta guía, demostraremos cómo monitorear cada GPU en su servidor y crear hermosos paneles de control utilizando Grafana. Todas las métricas serán recogidas utilizando el exportador de Prometheus. El exportador llamará periódicamente al binario nvidia-smi para leer todos los valores disponibles cada pocos segundos.

Instalar Grafana

Para asegurar un proceso de instalación sin problemas, se recomienda instalar Grafana desde el repositorio oficial del proyecto. Antes de añadir el repositorio a la lista de fuentes del gestor de paquetes, por favor verifique que todos los paquetes necesarios estén presentes en el sistema operativo. El siguiente comando instala los que falten:

sudo apt -y install apt-transport-https software-properties-common wget

Vamos a crear un directorio separado para los llaveros:

sudo mkdir -p /etc/apt/keyrings/

Descargue y aplique la clave GPG de Grafana:

wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

Añada el repositorio de Grafana utilizando la clave descargada:

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Actualice la caché e instale Grafana:

sudo apt update && sudo apt -y install grafana

Después de que el proceso termine, puede iniciar la aplicación:

sudo systemctl start grafana-server.service

Si desea ejecutar Grafana junto con el sistema operativo:

sudo systemctl enable grafana-server.service

Instalar Prometheus

Para determinar la versión actual y acceder al enlace de descarga del paquete, debe visitar el sitio web oficial del proyecto. Por ejemplo, si necesita instalar Prometheus v2.47.1, puede utilizar el siguiente enlace:

wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz

Desempaquete el archivo:

tar xvfz prometheus-2.47.1.linux-amd64.tar.gz

Abra el directorio desempaquetado:

cd prometheus-2.47.1.linux-amd64

Vamos a copiar dos archivos ejecutables al directorio del sistema:

sudo cp prometheus /usr/local/bin
sudo cp promtool /usr/local/bin

Cree un directorio separado para los archivos de configuración:

sudo mkdir /etc/prometheus

Y copie estos archivos en él:

sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus

Cree un archivo de configuración llamado prometheus.yml, que contendrá la configuración principal de Prometheus y sus destinos:

sudo nano /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9090']
- job_name: 'nvidia'
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9835']

Hay opciones básicas y dos objetivos:

  1. localhost:9090 - este destino está incorporado en Prometheus por defecto.
  2. localhost:9835 - este será utilizado para recoger métricas desde nvidia_smi_exporter.

Pulse Ctrl + X, luego Y, luego Enter para guardar el archivo y salir del editor de texto. Es una buena idea ejecutar Prometheus como un usuario dedicado, sin acceso al shell. Sugerimos crear un usuario de esta manera:

sudo useradd --no-create-home --shell /bin/false prometheus

Bien. Se han copiado los archivos ejecutables, y los archivos de configuración están en su lugar. Es hora de informar al sistema operativo que Prometheus puede ser utilizado como un demonio y gestionado con systemd. Ejecute el siguiente comando e introduzca este contenido:

sudo systemctl edit --full --force prometheus.service
[Unit]
  Description=Prometheus
  Wants=network-online.target
  After=network-online.target
  [Service]
  User=prometheus
  Group=prometheus
  Type=simple
  ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries
  [Install]
  WantedBy=multi-user.target

Guarde y salga presionando Ctrl + X, luego Y, luego Enter. A continuación, necesita hacer que el usuario recién creado sea el propietario de dos directorios de trabajo y su contenido:

sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus

Todo está listo para iniciar Prometheus. Ejecute el demonio:

sudo systemctl start prometheus

Compruebe el estado y obtendrá un resultado como este:

sudo systemctl status prometheus
● prometheus.service - Prometheus
  Cargado: cargado (/etc/systemd/system/prometheus.service; activado; predefinido por el proveedor: activado)
  Activo: activo (funcionando) desde Mon 2023-10-09 12:44:16 UTC; hace 5min
PID principal: 2223 (prometheus)
   Tareas: 42 (límite: 425060)
  Memoria: 96.4M
     CPU: 1.099s
  Grupo de control: /system.slice/prometheus.service
          └─2223 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml ->
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.263Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.269Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.269Z caller=head.go:760 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.270Z caller=head.go:797 l>
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1045 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1048 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.273Z caller=main.go:1229 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=main.go:1266 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=main.go:1009 >
Oct 09 12:44:19 gpuserver prometheus[2223]: ts=2023-10-09T12:44:19.274Z caller=manager.go:10>

El último comando indicará que el demonio de Prometheus debe cargarse automáticamente cuando se inicie el sistema operativo:

sudo systemctl enable prometheus

Recopilación de métricas en Linux

Todos los pasos anteriores fueron meramente preparatorios. Aunque Grafana y Prometheus ya han sido instalados, no saben nada el uno del otro. Vamos a añadir una nueva fuente de datos a Grafana. Abra su navegador web e introduzca la siguiente dirección:

http://[DIRECCIÓN_IP_LEADERGPU]:3000/connections/datasources/new

Para el primer inicio de sesión en Grafana, use las credenciales por defecto: admin/admin. Estas necesitan ser cambiadas inmediatamente después. En la página abierta, elija Prometheus:

Añadir fuente de datos

Establezca el nombre y la URL de nuestra instancia local de Prometheus. Por defecto, opera en el puerto 9090 y utiliza el protocolo HTTP simple:

Diálogo de nueva fuente de datos

Desplácese hasta el final y haga clic en el botón Guardar & probar. Grafana enviará una breve solicitud a Prometheus y si todo está bien, recibirá un mensaje como este:

Guardar y probar fuente de datos

Ahora, necesita un panel oficial listo para usar que trabaje con el exportador nvidia_gpu_metrics. Abra el siguiente enlace en su navegador:

https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics/

Aquí tiene el botón Descargar JSON. En realidad, no necesita descargar un archivo JSON. Simplemente haga clic con el botón derecho del ratón sobre él y seleccione Copiar dirección del enlace:

Obtener el panel

Abra la interfaz web de Grafana en http://[DIRECCIÓN_IP_LEADERGPU]:3000/, luego haga clic en el símbolo más y seleccione el elemento de menú Importar panel:

Diálogo de importación de panel

Inserte el enlace copiado en el siguiente campo presionando el atajo de teclado Ctrl + V, luego haga clic en el botón Cargar:

Subir JSON del panel

Grafana descargará el panel, y usted necesitará seleccionar la fuente de datos previamente creada, Prometheus, del menú desplegable. Luego, haga clic en el botón Importar:

Importar fuente de Prometheus

Se abrirá un bonito panel, pero aún no muestra ningún dato:

Panel vacío

Esto se debe a que aún no hemos instalado el componente final: el nvidia_gpu_exporter. Vamos a hacerlo. Abra enlace en su navegador web y copie el enlace al paquete deb. Ahora puede descargarlo usando la utilidad wget:

wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia-gpu-exporter_1.2.0_linux_amd64.deb

Finalmente, instálelo:

sudo dpkg -i nvidia-gpu-exporter_1.2.0_linux_amd64.deb

Espere unos segundos y recibirá los primeros datos en su panel de Grafana:

Panel de control con datos

¡Disfrute de su nueva herramienta de monitoreo!

Recopilación de métricas en Windows Server

El sistema descrito anteriormente no necesita estar ubicado en el mismo servidor. Por ejemplo, puede establecer una combinación de Grafana y Prometheus en un servidor (incluso un pequeño ordenador de placa única como Raspberry Pi sería suficiente) y recoger métricas de GPU desde un servidor remoto. El componente clave del sistema, nvidia_gpu_exporter, puede funcionar no sólo en Linux sino también en Windows Server. Hemos preparado instrucciones breves para su instalación.

Abra PowerShell y ejecute los siguientes comandos secuencialmente. Permita al usuario actual ejecutar scripts de PowerShell:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Obtenga e instale el gestor de paquetes Scoop:

iex "& {$(irm get.scoop.sh)} -RunAsAdmin"

Instale los paquetes nssm y git usando Scoop. Estos paquetes son necesarios para obtener nvidia_gpu_exporter de Github e instalarlo como un servicio del sistema:

scoop install nssm --global
scoop install git

Scoop gestiona las aplicaciones agrupándolas en colecciones, que se llaman cubos. Vamos a crear uno con la aplicación necesaria:

scoop bucket add nvidia_gpu_exporter https://github.com/utkuozdemir/scoop_nvidia_gpu_exporter.git

Ahora, estamos listos para descargar e instalar la aplicación:

scoop install nvidia_gpu_exporter/nvidia_gpu_exporter --global

Cuando la aplicación se inicia, utiliza el número de puerto 9835. Necesita configurar el Firewall de Windows Defender para aceptar conexiones desde el exterior:

New-NetFirewallRule -DisplayName "Nvidia GPU Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9835

Dígale al sistema operativo que nvidia_gpu_exporter es un nuevo servicio y que necesita funcionar mientras se carga el sistema operativo:

nssm install nvidia_gpu_exporter "C:\ProgramData\scoop\apps\nvidia_gpu_exporter\current\nvidia_gpu_exporter.exe"

El paso final es poner en marcha el servicio:

Start-Service nvidia_gpu_exporter

Tenga en cuenta que necesita añadir el servidor remoto como destino en su prometheus.yml:

…
  - job_name: 'nvidia'
    scrape_interval: 5s
    static_configs:
    - targets: ['IP_DEL_SERVIDOR_REMOTO:9835']
…

Vea también:



Actualizado: 28.03.2025

Publicado: 25.06.2024


?Tiene más preguntas? ?Escribanos!

By clicking «I Accept» you confirm that you have read and accepted the website Terms and Conditions, Privacy Policy, and Moneyback Policy.