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 preglednvidia-smi -l 1— ponavljanje na sekunduwatch -n 1 nvidia-smi— osvežavanje na istom mestunvidia-smi --query-gpu=... --format=csv— izbor polja--format=csv,noheader,nounits— čist broj za skriptenvidia-smi --help-query-gpu— spisak svih poljanvidia-smi --query-compute-apps=...— procesi na karticinvidia-smi -L— spisak karticanvidia-smi -pm 1— trajni režimnvidia-smi -pl 280— ograničenje potrošnjenvidia-smi --gpu-reset— reset karticenvtop— grafikoni kroz vremefuser -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
- Pokreni
nvidia-smiu mirovanju i zapiši potrošnju, temperaturu i P-stanje. - Pusti model da generiše duži odgovor i uporedi iste tri vrednosti sa prethodnim merenjem.
- Napiši komandu koja svakih pet sekundi upisuje vreme, memoriju i potrošnju u CSV fajl.
- Instaliraj
nvtopi posmatraj oblik grafikona tokom generisanja. Da li je ravan? - 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:
- AI na Linux serveru — pregled celog serijala
- Instalacija NVIDIA drajvera i CUDA toolkit-a — prethodni tekst
- Monitoring inferencije sa Prometheusom i Grafanom — kada ovo treba da radi bez tebe
Comments
Post a Comment