nvidia-smi i nvtop — praćenje GPU-a iz terminala

Kada model radi sporije nego što bi trebalo, odgovor je gotovo uvek u ispisu nvidia-smi. Problem je što taj ispis na prvi pogled deluje kao gomila brojeva bez hijerarhije, pa se gleda samo zauzeće memorije — a to je često najmanje zanimljiva kolona.

Ovaj tekst objašnjava šta se stvarno čita, kojim redom i šta koja vrednost znači za inferenciju.

Anatomija ispisa

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.07   Driver Version: 570.133.07   CUDA Version: 12.8      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce RTX 3090  On  | 00000000:01:00.0 Off |                  N/A |
| 68%   71C    P2   287W / 350W |  18432MiB / 24576MiB |     94%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2847      C   /usr/local/bin/ollama            18420MiB |
+-----------------------------------------------------------------------------+

Zaglavlje sadrži verziju drajvera i najvišu podržanu CUDA verziju — to je, kako je rečeno u tekstu o drajverima, gornja granica, ne ono što je instalirano.

Kolone koje su bitne

Kolona Šta znači Šta gledaš
Memory-Usage Zauzeta i ukupna memorija Ima li mesta za kontekst
GPU-Util Procenat vremena u kome je kartica imala posao Radi li kartica uopšte
Pwr:Usage/Cap Trenutna i najveća potrošnja Najpouzdaniji znak stvarnog opterećenja
Temp Temperatura jezgra Blizina praga usporavanja
Perf P-stanje, nivo takta P0 ili P2 pod opterećenjem, P8 u mirovanju
Persistence-M Trajni režim drajvera Treba da bude On

GPU-Util zavarava

Ovo je najveći izvor zabune. Kolona meri da li je kartica imala bilo kakav posao, ne koliko ga je dobro obavila. Inferencija često pokazuje devedeset odsto iskorišćenosti dok kartica zapravo čeka memoriju — jer je, kako objašnjava tekst o CPU i GPU inferenciji, usko grlo propusnost, a ne račun.

Potrošnja je pošteniji pokazatelj. Kartica na tri stotine vati od tri stotine pedeset stvarno radi; kartica na sto vati uz devedeset odsto iskorišćenosti čeka podatke.

P-stanja

Stanje Značenje
P0 Najviši takt, puno opterećenje
P2 Uobičajeno za CUDA poslove, normalno
P5 – P8 Mirovanje, snižen takt

Ako je model učitan a stanje ostaje P8 tokom generisanja, kartica ne radi posao — traži uzrok drugde, najverovatnije u tome što je model završio na procesoru.

Praćenje uživo

Ugrađena mogućnost, osvežavanje na sekundu:

$ nvidia-smi -l 1

Ispis se ponavlja i ekran se puni. Za stalan pogled na jedno mesto:

$ watch -n 1 nvidia-smi

Kompaktnije, samo ono što pratiš:

$ nvidia-smi --query-gpu=timestamp,utilization.gpu,memory.used,power.draw,temperature.gpu \
    --format=csv -l 1
timestamp, utilization.gpu [%], memory.used [MiB], power.draw [W], temperature.gpu
2026/08/22 14:23:01.234, 94 %, 18432 MiB, 287.43 W, 71
2026/08/22 14:23:02.235, 96 %, 18448 MiB, 291.12 W, 71

Ovaj oblik je i osnova za snimanje u fajl:

$ nvidia-smi --query-gpu=timestamp,utilization.gpu,memory.used,power.draw \
    --format=csv -l 5 >> /var/log/gpu.csv &

nvtop

Ono što je htop za procesor, nvtop je za karticu — grafikoni kroz vreme umesto trenutnog preseka.

$ sudo apt install -y nvtop        # Debian, Ubuntu
$ sudo dnf install -y nvtop        # Fedora, RHEL uz EPEL
$ nvtop

Gornji deo prikazuje dva grafikona — iskorišćenost i memoriju kroz poslednjih nekoliko minuta. Donji je spisak procesa sa zauzećem.

Grafikon je ovde prava vrednost. Ravna linija kroz generisanje znači zdravu postavku; testerasti oblik znači da nešto prekida rad — obično prelivanje na procesor ili čekanje na podatke.

Korisni tasteri: F2 podešavanja, F6 sortiranje procesa, F9 prekid procesa, q izlaz.

Vrednosti za skripte

Za monitoring i automatiku ne parsiraj tabelu — traži tačno ono što ti treba, bez zaglavlja:

$ nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits
6144

Provera pre pokretanja modela:

#!/bin/bash
POTREBNO=17000
SLOBODNO=$(nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits)

if [ "$SLOBODNO" -lt "$POTREBNO" ]; then
    echo "Nedovoljno memorije: ${SLOBODNO}MiB, potrebno ${POTREBNO}MiB"
    exit 1
fi

echo "Slobodno ${SLOBODNO}MiB, pokrećem model"

Sve dostupno za upit:

$ nvidia-smi --help-query-gpu | less

Najčešće korišćena polja:

Polje Vraća
memory.total, memory.used, memory.free Memorija u MiB
utilization.gpu, utilization.memory Iskorišćenost u procentima
temperature.gpu Temperatura
power.draw, power.limit Potrošnja
clocks.sm, clocks.mem Taktovi
clocks_throttle_reasons.active Razlog usporavanja

Procesi na kartici

$ nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
pid, process_name, used_memory [MiB]
2847, /usr/local/bin/ollama, 18420 MiB

Ako memorija ostane zauzeta a proces više ne postoji, u pitanju je zaostali proces:

$ sudo fuser -v /dev/nvidia*
$ sudo kill -9 PID

Krajnja mera, kada ništa drugo ne pomaže i kartica nije u upotrebi:

$ sudo nvidia-smi --gpu-reset

Termalno usporavanje

Kartica pod dugim opterećenjem snižava takt kada pređe prag. Model tada bez ikakve greške postaje sporiji.

$ nvidia-smi --query-gpu=clocks_throttle_reasons.active,clocks.sm,temperature.gpu \
    --format=csv
clocks_throttle_reasons.active, clocks.sm [MHz], temperature.gpu
0x0000000000000001, 1695, 71

Vrednost 0x1 znači da nema ograničenja. Bilo šta drugo pogledaj ovako:

$ nvidia-smi -q -d PERFORMANCE | grep -A 10 'Clocks Event Reasons'
    SW Thermal Slowdown          : Not Active
    HW Thermal Slowdown          : Not Active
    HW Power Brake Slowdown      : Not Active

Termalno usporavanje kreće oko osamdeset tri stepena. Ako ga stalno pogađaš, ograniči potrošnju — gubitak brzine je mali, dobitak u temperaturi značajan:

$ sudo nvidia-smi -pl 280

Na potrošačkim karticama je ograničenje potrošnje na osamdeset odsto tipično jedva primetno u brzini, a temperaturu spusti za desetak stepeni.

Praktični scenariji

Scenario 1: model radi, kartica na nuli

Ako GPU-Util stoji na nuli i stanje je P8 dok model generiše, model je na procesoru. Uzrok je najčešće nedostatak memorije ili neučitan nvidia_uvm.

Scenario 2: memorija zauzeta, ništa nije pokrenuto

Zaostali proces posle pada servisa. Nađi ga preko fuser -v /dev/nvidia* i ugasi.

Scenario 3: brzina opada tokom dugog rada

Proveri temperaturu i razlog usporavanja. Ako je termalno, ograniči potrošnju ili sredi provetravanje kućišta.

Scenario 4: devedeset odsto iskorišćenosti, a sporo je

Pogledaj potrošnju. Niska potrošnja uz visoku iskorišćenost znači čekanje na memoriju — to je normalno za inferenciju i ne popravlja se podešavanjem.

Scenario 5: dve kartice, opterećena samo jedna

$ nvidia-smi --query-gpu=index,name,memory.used,utilization.gpu --format=csv

Model verovatno staje u jednu i alat ga ne deli bez potrebe. Za namerno korišćenje obe treba postavka na nivou servisa.

Kratka referenca

  • nvidia-smi — osnovni pregled
  • nvidia-smi -l 1 — ponavljanje na sekundu
  • watch -n 1 nvidia-smi — osvežavanje na istom mestu
  • nvidia-smi --query-gpu=... --format=csv — izbor polja
  • --format=csv,noheader,nounits — čist broj za skripte
  • nvidia-smi --help-query-gpu — spisak svih polja
  • nvidia-smi --query-compute-apps=... — procesi na kartici
  • nvidia-smi -L — spisak kartica
  • nvidia-smi -pm 1 — trajni režim
  • nvidia-smi -pl 280 — ograničenje potrošnje
  • nvidia-smi --gpu-reset — reset kartice
  • nvtop — grafikoni kroz vreme
  • fuser -v /dev/nvidia* — procesi koji drže karticu
  • GPU-Util — meri da li ima posla, ne koliko ga dobro radi
  • Power draw — pouzdaniji pokazatelj stvarnog opterećenja
  • P8 pod opterećenjem — kartica ne radi posao

Vežba

  1. Pokreni nvidia-smi u mirovanju i zapiši potrošnju, temperaturu i P-stanje.
  2. Pusti model da generiše duži odgovor i uporedi iste tri vrednosti sa prethodnim merenjem.
  3. Napiši komandu koja svakih pet sekundi upisuje vreme, memoriju i potrošnju u CSV fajl.
  4. Instaliraj nvtop i posmatraj oblik grafikona tokom generisanja. Da li je ravan?
  5. Napiši skriptu koja odbija da pokrene model ako je slobodno manje od zadatog broja megabajta.

Sledeći tekst u serijalu: Kvantizacija u praksi: GGUF, Q4_K_M i AWQ

Povezano:

Comments

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd