GPU-metrics verzamelen met Grafana
Het is belangrijk om op te merken dat deze setup niet veilig is. We raden ten zeerste aan de documentatie voor elk afzonderlijk gebruikt onderdeel te lezen en de ingebouwde beveiligingsfuncties indien mogelijk te gebruiken.
In deze gids laten we zien hoe je elke GPU op je server kunt monitoren en prachtige dashboards kunt maken met Grafana. Alle metingen zullen worden verzameld met de Prometheus-exporteur. De exporter zal periodiek de nvidia-smi binary aanroepen om elke paar seconden alle beschikbare waarden te lezen.
Grafana installeren
Om een soepel installatieproces te garanderen, is het aanbevolen om Grafana te installeren vanuit de officiële repository van het project. Voordat je de repository toevoegt aan de bronnenlijst van een package manager, controleer je of alle benodigde pakketten aanwezig zijn in het besturingssysteem. Het volgende commando installeert de ontbrekende pakketten:
sudo apt -y install apt-transport-https software-properties-common wget
Laten we een aparte map maken voor keyrings:
sudo mkdir -p /etc/apt/keyrings/
Download en pas de Grafana GPG-sleutel toe:
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Voeg de Grafana-repository toe met behulp van de gedownloade sleutel:
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
Vernieuw de cache en installeer Grafana:
sudo apt update && sudo apt -y install grafana
Nadat het proces is voltooid, kun je de applicatie starten:
sudo systemctl start grafana-server.service
Als je Grafana samen met het besturingssysteem wilt uitvoeren:
sudo systemctl enable grafana-server.service
Prometheus installeren
Om de huidige versie te bepalen en toegang te krijgen tot de downloadlink van het pakket, moet je de officiële website van het project bezoeken. Als je bijvoorbeeld Prometheus v2.47.1 moet installeren, kun je de volgende link gebruiken:
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
Pak het archief uit:
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
Open de uitgepakte map:
cd prometheus-2.47.1.linux-amd64
Laten we twee uitvoerbare bestanden kopiëren naar de systeemmap:
sudo cp prometheus /usr/local/bin
sudo cp promtool /usr/local/bin
Maak een aparte map voor de configuratiebestanden:
sudo mkdir /etc/prometheus
En kopieer deze bestanden naar die map:
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
Maak een configuratiebestand met de naam prometheus.yml, dat de voornaamste Prometheus instellingen en doelen bevat:
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']
Er zijn basisopties en twee doelen:
- localhost:9090 - dit doel is standaard ingebouwd in Prometheus.
- localhost:9835 - dit zal worden gebruikt om metingen te verzamelen van nvidia_smi_exporter.
Druk op Ctrl + X, dan op Y en vervolgens op Enter om het bestand op te slaan en de tekstbewerker te verlaten. Het is een goed idee om Prometheus te draaien als een specifieke gebruiker, zonder shell-toegang. We stellen voor een gebruiker aan te maken als volgt:
sudo useradd --no-create-home --shell /bin/false prometheus
Goed. De uitvoerbare bestanden zijn gekopieerd en de configuratiebestanden staan op hun plaats. Het is tijd om het besturingssysteem te laten weten dat Prometheus als een daemon kan worden gebruikt en met systemd kan worden beheerd. Voer het volgende commando uit en voer deze inhoud in:
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
Sla op en sluit af door Ctrl + X, dan Y, dan Enter in te drukken. Vervolgens moet je de nieuw aangemaakte gebruiker de eigenaar maken van twee werkdirectories en hun inhoud:
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
Alles is klaar om Prometheus te starten. Start de daemon:
sudo systemctl start prometheus
Controleer de status en je krijgt een resultaat als dit:
sudo systemctl status prometheus
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-10-09 12:44:16 UTC; 5min ago Main PID: 2223 (prometheus) Tasks: 42 (limit: 425060) Memory: 96.4M CPU: 1.099s CGroup: /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>
Het laatste commando zal aangeven dat de Prometheus daemon automatisch geladen moet worden bij het opstarten van het besturingssysteem:
sudo systemctl enable prometheus
Metingen verzamelen in Linux
Alle voorgaande stappen waren slechts voorbereiding. Ook al zijn Grafana en Prometheus al geïnstalleerd, ze weten nog niets van elkaar. Laten we een nieuwe gegevensbron toevoegen aan Grafana. Open je webbrowser en typ het volgende adres:
http://[LEADERGPU_IP_ADDRESS]:3000/connections/datasources/new
Voor de eerste login in Grafana, gebruik je de standaard inloggegevens: admin/admin. Deze moeten direct daarna gewijzigd worden. Op de geopende pagina, kies je voor Prometheus:

Stel de naam en URL van onze lokale Prometheus-instance in. Standaard werkt deze op poort 9090 en wordt het eenvoudige HTTP-protocol gebruikt:

Scroll naar het einde en klik op de Opslaan & testen knop. Grafana zal een kort verzoek naar Prometheus sturen en als alles in orde is, krijg je een bericht zoals dit:

Nu heb je een kant-en-klaar officieel dashboard nodig dat werkt met de nvidia_gpu_metrics exporter. Open de volgende link in je browser:
https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics/
Hier heb je de Download JSON knop. Je hoeft niet echt een JSON-bestand te downloaden. Klik er gewoon met de rechtermuisknop op en selecteer Kopieer linkadres:

Open de Grafana-webinterface op http://[LEADERGPU_IP_ADDRESS]:3000/, klik vervolgens op het plussymbool en selecteer het menu-item Importeer dashboard:

Voeg de gekopieerde link toe aan het volgende veld door op de sneltoets Ctrl + V te drukken en klik vervolgens op de Laden-knop:

Grafana zal het dashboard downloaden en je moet de eerder aangemaakte gegevensbron, Prometheus, selecteren uit het dropdown-menu. Klik dan op de Importeer-knop:

Er opent een mooi dashboard, maar het toont nog geen gegevens:

Dit komt omdat we het laatste onderdeel, de nvidia_gpu_exporter, nog niet hebben geïnstalleerd. Laten we dat doen. Open link in je webbrowser en kopieer de link naar het deb-pakket. Je kunt het nu downloaden met behulp van de wget-utility:
wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Installeer het ten slotte:
sudo dpkg -i nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Wacht een paar seconden en je krijgt de eerste gegevens op je Grafana-dashboard:

Geniet van je nieuwe monitoringtool!
Metingen verzamelen in Windows Server
Het hierboven beschreven systeem hoeft niet op dezelfde server te staan. Je kunt bijvoorbeeld een combinatie van Grafana en Prometheus op één server instellen (zelfs een kleine single-board computer zoals Raspberry Pi volstaat) en GPU-metingen van een externe server uitlezen. Het sleutelelement van het systeem, nvidia_gpu_exporter, kan niet alleen op Linux, maar ook op Windows Server werken. We hebben beknopte instructies voorbereid voor de installatie ervan.
Open PowerShell en voer de volgende commando's opeenvolgend uit. Sta de huidige gebruiker toe om PowerShell-scripts uit te voeren:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Download en installeer de Scoop package manager:
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
Installeer de pakketten nssm en git met Scoop. Deze pakketten zijn nodig om nvidia_gpu_exporter van Github te verkrijgen en te installeren als een systeemservice:
scoop install nssm --global
scoop install git
Scoop beheert apps door ze te groeperen in collecties, die buckets worden genoemd. Laten we er een maken met de nodige app:
scoop bucket add nvidia_gpu_exporter https://github.com/utkuozdemir/scoop_nvidia_gpu_exporter.git
Nu zijn we klaar om de app te downloaden en installeren:
scoop install nvidia_gpu_exporter/nvidia_gpu_exporter --global
Wanneer de app start, gebruikt deze poortnummer 9835. Je moet Windows-verdedigingsfirewall configureren om verbindingen van buitenaf te accepteren:
New-NetFirewallRule -DisplayName "Nvidia GPU Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9835
Informeer het besturingssysteem dat nvidia_gpu_exporter een nieuwe service is en moet draaien tijdens het laden van het besturingssysteem:
nssm install nvidia_gpu_exporter "C:\ProgramData\scoop\apps\nvidia_gpu_exporter\current\nvidia_gpu_exporter.exe"
De laatste stap is om de service uit te voeren:
Start-Service nvidia_gpu_exporter
Houd er rekening mee dat je de externe server moet toevoegen als doel in je prometheus.yml:
…
- job_name: 'nvidia'
scrape_interval: 5s
static_configs:
- targets: ['REMOTE_SERVER_IP:9835']
…
Zie ook:
Bijgewerkt: 28.03.2025
Gepubliceerd: 25.06.2024