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:
- localhost:9090 - este destino está incorporado en Prometheus por defecto.
- 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:

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:

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:

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:

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:

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

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:

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

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:

¡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