Collezionare metriche GPU con Grafana
È importante notare che questa configurazione non è sicura. Raccomandiamo vivamente di leggere la documentazione per ogni componente utilizzato in modo indipendente e di utilizzare le funzionalità di sicurezza integrate quando possibile.
In questa guida, dimostreremo come monitorare ogni GPU del tuo server e creare bellissimi cruscotti utilizzando Grafana. Tutte le metriche saranno raccolte utilizzando l'exporter di Prometheus. L'exporter chiamerà periodicamente il binario nvidia-smi per leggere tutti i valori disponibili ogni pochi secondi.
Installa Grafana
Per garantire un processo di installazione fluido, si consiglia di installare Grafana dal repository ufficiale del progetto. Prima di aggiungere il repository alla lista delle fonti del gestore dei pacchetti, si prega di verificare che tutti i pacchetti richiesti siano presentati nel sistema operativo. Il seguente comando installa quelli mancanti:
sudo apt -y install apt-transport-https software-properties-common wget
Creiamo una directory separata per i portachiavi:
sudo mkdir -p /etc/apt/keyrings/
Scaricare e applicare la chiave GPG di Grafana:
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Aggiungere il repository di Grafana utilizzando la chiave scaricata:
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
Aggiorna la cache e installa Grafana:
sudo apt update && sudo apt -y install grafana
Dopo che il processo è terminato, puoi avviare l'applicazione:
sudo systemctl start grafana-server.service
Se vuoi eseguire Grafana insieme al sistema operativo:
sudo systemctl enable grafana-server.service
Installa Prometheus
Per determinare la versione corrente e accedere al link di download del pacchetto, dovresti visitare il sito web ufficiale del progetto. Ad esempio, se devi installare Prometheus v2.47.1, puoi utilizzare il seguente link:
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
Scompatta l'archivio:
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
Apri la directory decompressa:
cd prometheus-2.47.1.linux-amd64
Copiamo due file eseguibili nella directory di sistema:
sudo cp prometheus /usr/local/bin
sudo cp promtool /usr/local/bin
Creiamo una directory separata per i file di configurazione:
sudo mkdir /etc/prometheus
E copiamo questi file al suo interno:
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
Creiamo un file di configurazione chiamato prometheus.yml, che conterrà le principali impostazioni e target di Prometheus:
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']
Ci sono opzioni di base e due target:
- localhost:9090 - questo target è un target integrato di Prometheus per impostazione predefinita.
- localhost:9835 - questo sarà utilizzato per estrarre le metriche da nvidia_smi_exporter.
Premere Ctrl + X, poi Y, poi Invio per salvare il file e uscire dall'editor di testo. È una buona idea eseguire Prometheus come un utente dedicato, senza accesso allo shell. Suggeriamo di creare un utente in questo modo:
sudo useradd --no-create-home --shell /bin/false prometheus
Bene. I file eseguibili sono stati copiati e i file di configurazione sono al loro posto. È ora di informare il sistema operativo che Prometheus può essere utilizzato come un demone e gestito con systemd. Esegui il seguente comando e inserisci questo contenuto:
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
Salva ed esci premendo Ctrl + X, poi Y, poi Invio. Successivamente, devi rendere il nuovo utente creato proprietario di due directory di lavoro e del loro contenuto:
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
Tutto è pronto per avviare Prometheus. Avvia il demone:
sudo systemctl start prometheus
Controlla lo stato e otterrai un risultato simile a questo:
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>
Il comando finale indicherà che il demone Prometheus dovrebbe essere caricato automaticamente all'avvio del sistema operativo:
sudo systemctl enable prometheus
Raccolta di metriche in Linux
Tutti i passaggi precedenti erano solo preparatori. Anche se Grafana e Prometheus sono già stati installati, non sanno nulla l'uno dell'altro. Aggiungiamo una nuova fonte di dati a Grafana. Apri il tuo browser web e digita il seguente indirizzo:
http://[LEADERGPU_IP_ADDRESS]:3000/connections/datasources/new
Per il primo accesso a Grafana, utilizza le credenziali predefinite: admin/admin. Queste devono essere cambiate immediatamente dopo. Nella pagina aperta, scegli Prometheus:

Imposta il nome e l'URL della nostra istanza locale di Prometheus. Per impostazione predefinita, opera sulla porta 9090 e utilizza il semplice protocollo HTTP:

Scorri fino alla fine e fai clic sul pulsante Salva & test. Grafana invierà una breve richiesta a Prometheus e se tutto è OK, riceverai un messaggio come questo:

Ora, hai bisogno di una dashboard ufficiale predefinita che lavora con l'exporter nvidia_gpu_metrics. Apri il seguente link nel tuo browser:
https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics/
Qui hai il pulsante Download JSON. Non hai effettivamente bisogno di scaricare un file JSON. Semplicemente, fai clic con il tasto destro del mouse su esso e seleziona Copia indirizzo link:

Apri l'interfaccia web di Grafana su http://[LEADERGPU_IP_ADDRESS]:3000/, poi clicca sul simbolo più e seleziona la voce Importa cruscotto dal menu:

Inserisci il link copiato nel seguente campo premendo la scorciatoia da tastiera Ctrl + V, poi clicca sul pulsante Carica:

Grafana scaricherà il cruscotto, e dovrai selezionare la fonte dati precedentemente creata, Prometheus, dal menu a discesa. Poi, clicca sul pulsante Importa:

Si aprirà un bel cruscotto, ma non mostra ancora nessun dato:

Questo perché non abbiamo ancora installato il componente finale: il nvidia_gpu_exporter. Facciamolo. Apri collegamento nel tuo browser web e copia il link al pacchetto deb. Ora puoi scaricarlo utilizzando l'utilità wget:
wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Infine, installalo:
sudo dpkg -i nvidia-gpu-exporter_1.2.0_linux_amd64.deb
Aspetta qualche secondo e riceverai i primi dati sul tuo cruscotto Grafana:

Goditi il tuo nuovo strumento di monitoraggio!
Raccolta di metriche in Windows Server
Il sistema descritto sopra non ha bisogno di essere posizionato sullo stesso server. Ad esempio, puoi stabilire una combinazione di Grafana e Prometheus su un server (anche un piccolo computer a scheda singola come Raspberry Pi sarà sufficiente) e raccogliere le metriche delle GPU da un server remoto. Il componente chiave del sistema, nvidia_gpu_exporter, può operare non solo su Linux ma anche su Windows Server. Abbiamo preparato brevi istruzioni per la sua installazione.
Apri PowerShell ed esegui i seguenti comandi in sequenza. Consenti all'utente corrente di eseguire script PowerShell:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Ottieni e installa il gestore di pacchetti Scoop:
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
Installa i pacchetti nssm e git utilizzando Scoop. Questi pacchetti sono necessari per ottenere nvidia_gpu_exporter da Github e installarlo come servizio di sistema:
scoop install nssm --global
scoop install git
Scoop gestisce le app raggruppandole in collezioni, chiamate bucket. Creiamo uno con l'app necessaria:
scoop bucket add nvidia_gpu_exporter https://github.com/utkuozdemir/scoop_nvidia_gpu_exporter.git
Ora, siamo pronti per scaricare e installare l'app:
scoop install nvidia_gpu_exporter/nvidia_gpu_exporter --global
Quando l'app si avvia, utilizza il numero di porta 9835. Devi configurare il Firewall di Windows Defender per accettare connessioni dall'esterno:
New-NetFirewallRule -DisplayName "Nvidia GPU Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9835
Dì al sistema operativo che nvidia_gpu_exporter è un nuovo servizio e che ha bisogno di essere eseguito durante il caricamento del sistema operativo:
nssm install nvidia_gpu_exporter "C:\ProgramData\scoop\apps\nvidia_gpu_exporter\current\nvidia_gpu_exporter.exe"
Il passo finale è avviare il servizio:
Start-Service nvidia_gpu_exporter
Si noti che è necessario aggiungere il server remoto come target nel tuo prometheus.yml:
…
- job_name: 'nvidia'
scrape_interval: 5s
static_configs:
- targets: ['REMOTE_SERVER_IP:9835']
…
Vedi anche:
Aggiornato: 28.03.2025
Pubblicato: 25.06.2024