Auf dem GB10 in meinem Lab hat nvidia-smi eine Lücke. In der Spalte Memory-Usage steht nur “Not Supported”:

|   0  NVIDIA GB10                    On  |   0000000F:01:00.0 Off |                  N/A |
| N/A   72C    P0             63W /  N/A  | Not Supported          |     96%      Default |

Die gezielte Abfrage liefert auch nichts:

$ nvidia-smi --query-gpu=name,memory.total,memory.used --format=csv
name, memory.total [MiB], memory.used [MiB]
NVIDIA GB10, [N/A], [N/A]

Wie voll der Speicher ist, sehe ich so nicht auf einen Blick. Die Prozessliste von nvidia-smi funktioniert dagegen. Sie zeigt für jeden Prozess, wie viel GPU-Speicher er belegt.

Warum der Wert fehlt

GB10 hat keinen eigenen Grafikspeicher. CPU und GPU teilen sich denselben Arbeitsspeicher. Für so ein Gerät liefert der Treiber keine Gesamtwerte für den Speicher.

nvitop holt die Werte vom System

nvitop erkennt seit v1.6.1 Geräte mit Unified Memory. Für sie liest es den Systemspeicher aus. Ich habe nvitop aus dem aktuellen Git-Stand installiert:

git clone https://github.com/XuehaiPan/nvitop.git
cd nvitop
uv tool install .

Das ergibt die Version 1.7.3.dev4. Der GB10 zeigt jetzt eine Belegung:

╒═════════════════════════════════════════════════════════════════════════════╕
│ NVITOP 1.7.3.dev4    Driver Version: 580.173.02   CUDA Driver Version: 13.0 │
├───────────────────────────────┬──────────────────────┬──────────────────────┤
│ GPU  Name        Persistence-M│ Bus-Id        Disp.A │ Volatile Uncorr. ECC │
│ Fan  Temp  Perf  Pwr:Usage/Cap│         Memory-Usage │ GPU-Util  Compute M. │
╞═══════════════════════════════╪══════════════════════╪══════════════════════╪════════════════════╕
│   0  GB10                  On │ 0000000F:01:00.0 Off │                  N/A │ MEM: ██████▏ 68.7% │
│ N/A   72C   P0      58W / N/A │  83.62GiB / 121.7GiB │     96%      Default │ UTL: ████████▋ 96% │
╘═══════════════════════════════╧══════════════════════╧══════════════════════╧════════════════════╛
[ CPU: ████████▋ 17.2%                      UPTIME: 49.9 days ]  ( Load Average:  4.01  5.91  6.54 )
[ MEM: ██████████████████████████████████▍ 68.7%              ]  [ SWP: ████████████████████▎ 92%  ]

Der GPU-Balken und der Balken für den Hauptspeicher zeigen beide 68,7 %. Das ist derselbe Speicher.

Die Unterstützung für Unified Memory steckt auch in den Releases auf PyPI, die aktuelle Rechnung seit v1.7.2. Wer nicht aus Git installieren will, kommt also auch mit uv tool install nvitop ans Ziel.

Wie nvitop rechnet

Mit v1.7.2 hat nvitop die Rechnung für Unified Memory korrigiert (#234). Als frei gilt jetzt der verfügbare Speicher, also einschließlich des Caches, den der Kernel wieder freigeben kann. Als belegt gilt der Gesamtspeicher minus den verfügbaren Speicher.

Damit passt die Anzeige zu free -m. Dort stehen 124.610 MiB gesamt und 39.016 MiB verfügbar. Die Differenz von 85.594 MiB sind die 83,6 GiB, die nvitop anzeigt.

Was die Zahl bedeutet

Der Balken zeigt den Speicher des ganzen Systems, nicht nur die Allokationen der GPU. Auf meinem GB10 belegen die sieben GPU-Prozesse zusammen rund 50,4 GiB. Den Rest der 83,6 GiB belegen andere Prozesse und das System. Was jeder Prozess auf der GPU belegt, steht in nvitop weiter in der Prozessliste.

RTX Spark N1X

Auf dem N1X in meinem ASUS ProArt P16 zeigt nvitop die Belegung genauso an. Der N1X teilt sich den Speicher ebenfalls mit der CPU, und nvitop behandelt ihn wie den GB10.