GPU-Metriken mit Grafana sammeln
Es ist wichtig zu beachten, dass diese Einrichtung nicht sicher ist. Wir empfehlen dringend, die Dokumentation für jede unabhängig verwendete Komponente zu lesen und die eingebauten Sicherheitsfunktionen wann immer möglich zu nutzen.
In diesem Leitfaden zeigen wir Ihnen, wie Sie jede GPU auf Ihrem Server überwachen und mit Grafana wunderschöne Dashboards erstellen können. Alle Metriken werden mit dem Prometheus-Exporter gesammelt. Der Exporter ruft periodisch das nvidia-smi-Binary auf, um alle verfügbaren Werte alle paar Sekunden zu lesen.
Grafana installieren
Um einen reibungslosen Installationsprozess zu gewährleisten, empfiehlt es sich, Grafana aus dem offiziellen Repository des Projekts zu installieren. Bevor Sie das Repository in die Quellenliste eines Paketmanagers aufnehmen, überprüfen Sie bitte, ob alle erforderlichen Pakete im Betriebssystem vorhanden sind. Der folgende Befehl installiert fehlende:
sudo apt -y install apt-transport-https software-properties-common wget
Erstellen wir ein separates Verzeichnis für Schlüsselringe:
sudo mkdir -p /etc/apt/keyrings/
Laden Sie den Grafana GPG-Schlüssel herunter und wenden Sie ihn an:
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Fügen Sie das Grafana-Repository mit dem heruntergeladenen Schlüssel hinzu:
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
Aktualisieren Sie den Cache und installieren Sie Grafana:
sudo apt update && sudo apt -y install grafana
Nach Abschluss des Prozesses können Sie die Anwendung starten:
sudo systemctl start grafana-server.service
Wenn Sie Grafana neben dem Betriebssystem ausführen möchten:
sudo systemctl enable grafana-server.service
Prometheus installieren
Um die aktuelle Version zu ermitteln und den Link zum Herunterladen des Pakets zu erhalten, sollten Sie die offizielle Website des Projekts besuchen. Zum Beispiel, wenn Sie Prometheus v2.47.1 installieren müssen, können Sie den folgenden Link verwenden:
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
Entpacken Sie das Archiv:
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
Öffnen Sie das entpackte Verzeichnis:
cd prometheus-2.47.1.linux-amd64
Kopieren wir zwei ausführbare Dateien in das Systemverzeichnis:
sudo cp prometheus /usr/local/bin
sudo cp promtool /usr/local/bin
Erstellen Sie ein separates Verzeichnis für die Konfigurationsdateien:
sudo mkdir /etc/prometheus
Und kopieren Sie diese Dateien dorthin:
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
Erstellen Sie eine Konfigurationsdatei namens prometheus.yml, die die Haupt-Prometheus-Einstellungen und -Ziele enthält:
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']
Es gibt grundlegende Optionen und zwei Ziele:
- localhost:9090 - dieses Ziel ist standardmäßig ein in Prometheus integriertes Ziel.
- localhost:9835 - dies wird verwendet, um Metriken vom nvidia_smi_exporter zu scrapen.
Drücken Sie Ctrl + X, dann Y, dann Enter, um die Datei zu speichern und den Texteditor zu verlassen. Es ist eine gute Idee, Prometheus als dedizierten Benutzer ohne Shell-Zugriff zu betreiben. Wir schlagen vor, einen Benutzer wie diesen zu erstellen:
sudo useradd --no-create-home --shell /bin/false prometheus
Gut. Ausführbare Dateien wurden kopiert und Konfigurationsdateien sind an ihren Plätzen. Es ist an der Zeit, das Betriebssystem darüber zu informieren, dass Prometheus als Daemon verwendet und mit systemd verwaltet werden kann. Führen Sie den folgenden Befehl aus und geben Sie diesen Inhalt ein:
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
Speichern und verlassen Sie durch Drücken von Ctrl + X, dann Y, dann Enter. Als Nächstes müssen Sie den neu erstellten Benutzer zum Eigentümer von zwei Arbeitsverzeichnissen und deren Inhalt machen:
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
Alles ist bereit, um Prometheus zu starten. Führen Sie den Daemon aus:
sudo systemctl start prometheus
Überprüfen Sie den Status und Sie erhalten ein Ergebnis wie dieses:
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>
Der letzte Befehl zeigt an, dass der Prometheus-Daemon beim Starten des Betriebssystems automatisch geladen werden soll:
sudo systemctl enable prometheus
Scraping von Metriken in Linux
Alle vorherigen Schritte waren nur Vorbereitungen. Obwohl Grafana und Prometheus bereits installiert sind, wissen sie noch nichts voneinander. Fügen wir eine neue Datenquelle zu Grafana hinzu. Öffnen Sie Ihren Webbrowser und geben Sie die folgende Adresse ein:
http://[LEADERGPU_IP_ADDRESS]:3000/connections/datasources/new
Für die erste Anmeldung bei Grafana verwenden Sie die Standard-Anmeldedaten: admin/admin. Diese müssen danach sofort geändert werden. Wählen Sie auf der geöffneten Seite Prometheus:

Stellen Sie den Namen und die URL unserer lokalen Prometheus-Instanz ein. Standardmäßig verwendet es den Port 9090 und das einfache HTTP-Protokoll:

Scrollen Sie bis zum Ende und klicken Sie auf den Speichern & testen Knopf. Grafana sendet eine kurze Anfrage an Prometheus und wenn alles in Ordnung ist, erhalten Sie eine Meldung wie diese:

Jetzt benötigen Sie ein fertiges offizielles Dashboard, das mit dem nvidia_gpu_metrics Exporter arbeitet. Öffnen Sie den folgenden Link in Ihrem Browser:
https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics/
Hier haben Sie die JSON herunterladen Schaltfläche. Sie müssen keine JSON-Datei herunterladen. Klicken Sie einfach mit der rechten Maustaste darauf und wählen Sie Linkadresse kopieren:

Öffnen Sie die Grafana-Web-Oberfläche unter http://[LEADERGPU_IP_ADDRESS]:3000/, klicken Sie auf das Plus-Symbol und wählen Sie den Menüpunkt Dashboard importieren:

Fügen Sie den kopierten Link in das folgende Feld ein, indem Sie die Tastenkombination Strg + V drücken, und klicken Sie auf die Laden Schaltfläche:

Grafana lädt das Dashboard herunter und Sie müssen die zuvor erstellte Datenquelle, Prometheus, aus dem Dropdown-Menü auswählen. Dann klicken Sie auf den Importieren Knopf:

Es öffnet sich ein schönes Dashboard, aber es zeigt noch keine Daten an:

Das liegt daran, dass wir die letzte Komponente noch nicht installiert haben: den nvidia_gpu_exporter. Machen wir das. Öffnen Sie Link in Ihrem Webbrowser und kopieren Sie den Link zum deb-Paket. Jetzt können Sie es mit dem wget-Dienstprogramm herunterladen:
wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Schließlich, installieren Sie es:
sudo dpkg -i nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Warten Sie ein paar Sekunden und Sie erhalten die ersten Daten auf Ihrem Grafana-Dashboard:

Genießen Sie Ihr neues Überwachungstool!
Metriken in Windows Server scrapen
Das oben beschriebene System muss sich nicht auf demselben Server befinden. Zum Beispiel können Sie eine Kombination aus Grafana und Prometheus auf einem Server (selbst ein kleiner Einplatinencomputer wie Raspberry Pi genügt) und scrapen GPU-Metriken von einem entfernten Server einrichten. Die Schlüsselkomponente des Systems, nvidia_gpu_exporter, kann sowohl auf Linux als auch auf Windows Server betrieben werden. Wir haben kurze Anleitungen für seine Installation vorbereitet.
Öffnen Sie PowerShell und führen Sie die folgenden Befehle sequentiell aus. Ermöglichen Sie dem aktuellen Benutzer das Ausführen von PowerShell-Skripten:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Besorgen Sie sich den Scoop-Paketmanager und installieren Sie ihn:
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
Installieren Sie die nssm und git Pakete mit Scoop. Diese Pakete sind notwendig um nvidia_gpu_exporter von Github zu bekommen und es als Systemdienst zu installieren:
scoop install nssm --global
scoop install git
Scoop verwaltet Apps, indem es sie in Sammlungen gruppiert, die als Buckets bezeichnet werden. Erstellen wir einen mit der notwendigen App:
scoop bucket add nvidia_gpu_exporter https://github.com/utkuozdemir/scoop_nvidia_gpu_exporter.git
Jetzt sind wir bereit, die App herunterzuladen und zu installieren:
scoop install nvidia_gpu_exporter/nvidia_gpu_exporter --global
Wenn die App startet, verwendet sie die Portnummer 9835. Sie müssen die Windows Defender Firewall so konfigurieren, dass sie Verbindungen von außen akzeptiert:
New-NetFirewallRule -DisplayName "Nvidia GPU Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9835
Teilen Sie dem Betriebssystem mit, dass nvidia_gpu_exporter ein neuer Dienst ist und beim Laden des Betriebssystems ausgeführt werden muss:
nssm install nvidia_gpu_exporter "C:\ProgramData\scoop\apps\nvidia_gpu_exporter\current\nvidia_gpu_exporter.exe"
Der letzte Schritt besteht darin, den Dienst zu starten:
Start-Service nvidia_gpu_exporter
Bitte beachten Sie, dass Sie den Remote-Server als Ziel in Ihrem prometheus.yml hinzufügen müssen:
…
- job_name: 'nvidia'
scrape_interval: 5s
static_configs:
- targets: ['REMOTE_SERVER_IP:9835']
…
Siehe auch:
Aktualisiert: 28.03.2025
Veröffentlicht: 25.06.2024