Vigilant Inference Governor

ADR-0021: Die Hardware wird gelesen, nie gestellt

Status: Akzeptiert · 2026-09-09 Betrifft: neues Crate vig-platform, cli/doctor, cli/profile; Paket NV-04 Ausloeser: Ein Profil, das unter einem Leistungslimit entstand, beschreibt nicht die Karte, sondern die Karte unter diesem Limit — und nichts im System konnte das sehen

Kontext

NV-03 hat das Profilmanifest eingefuehrt: Geraetename, Treiber, Compute Capability, Speicher. Der Betreiber musste sie als Flags eintippen. Das ist richtig, solange niemand sie beobachten kann — aber nvidia-smi liegt auf jedem System mit Treiber, laeuft ohne Root und weiss all das.

Wichtiger noch ist, was es ausserdem weiss: warum die Karte gerade langsamer laeuft. Auf dem Messrechner dieses Projekts sind das 1830 statt 2100 MHz, Grund SwPowerCap. Die Gate-M3-Zahlen sind unter genau diesem Zustand entstanden. Das ist nicht falsch — beide Vergleichsseiten liefen darunter — aber es stand nirgends.

Entscheidung

Ein eigenes, optionales Crate, das ausschliesslich liest. Kein Taktsetzen, kein Persistence-Mode, kein Power-Limit, kein nvpmodel. Ein Governor, der die Hardware verstellt, braucht Rechte, die ein Governor nicht haben sollte — und macht jede Messung des Betreibers zu einer Messung des Governors. Kein Root fuer irgendetwas davon.

nvidia-smi statt NVML. NVML waere direkter und braeuchte eine Bindung an eine Herstellerbibliothek, die zur Treiberversion passen muss. Ein Prozessstart je Messung ist bei Sekundentakt kein Argument; die Kopplung waere eines.

Drei Zustaende, die nicht dasselbe sind. Observed, Unsupported, Unavailable — plus quer dazu die Frische. Der haeufigste Telemetriefehler ist, „geht hier nicht", „weiss ich gerade nicht" und „ist alt" in einen Nullwert zu falten. Ein Laptop-Ampere meldet kein power.limit; das ist kein Ausfall und schon gar nicht null Watt.

Vollstaendige Momentaufnahmen mit Zeitstempel, kein Dauerstrom. Ein Zustand, der zwischen zwei Messungen wechselt, ist nicht beobachtet, sondern erschlossen. Erst der Vergleich zweier Aufnahmen ergibt eine Aenderung — und die traegt dann beide Zeitpunkte, nicht einen. Das ist der Unterschied zwischen „der Takt fiel irgendwann" und „der Takt fiel zwischen 12:03:11 und 12:03:12", und nur die zweite Aussage beantwortet die Frage, ob die Hardware vor der ersten langsamen Fertigstellung schon anders war.

Der Vergleich ist grob, wo die Groesse rauscht. Temperatur und Leistungsaufnahme werden gar nicht verglichen, der SM-Takt nur in Stufen von 100 MHz. Ein Aenderungsstrom, in dem jede Taktschwankung steht, versteckt die eine Nachricht, um die es geht.

Der Rueckfall ist Teil des Entwurfs. Nach drei aufeinanderfolgenden Fehlversuchen gilt Fallback::QualifiedProfileOnly: keine staerkere Zulassung als das fest qualifizierte Betriebsprofil. Der Governor laeuft weiter, er laeuft nur nicht mutiger, als er es belegen kann. Drei und nicht eins, weil nvidia-smi unter Last einmal in einen Timeout laufen kann, ohne dass sich an der Hardware etwas geaendert haette — die Betriebsart des Governors darf nicht an der Laune eines Unterprozesses haengen.

Beobachtung belegt vor, sie ueberschreibt nicht. vig profile und vig calibrate fuellen Geraetefelder aus der Beobachtung, die der Betreiber nicht angegeben hat. Eine ausdrueckliche Angabe bleibt stehen: die Beobachtung weiss nicht, welche Karte gemeint war, wenn mehrere im Rechner stecken. Was ergaenzt wurde, wird genannt, statt es spaeter in der Datei zu entdecken. --no-hardware-probe schaltet es ab.

Konsequenzen

vig doctor meldet jetzt vor jeder Messung, ob die Karte gedrosselt ist und warum. Das ist der eigentliche Gewinn: der Betreiber erfaehrt vor dem Messen, was seine Zahlen bedeuten werden.

Ein aufgezeichneter Verlauf laesst sich abspielen (Recorded). Damit sind Zustandswechsel testbar, die sich auf einem Messrechner nicht bestellen lassen — ein thermisches Limit tritt ein, wenn es eintritt, und nicht, wenn ein Test es braucht. Ein Replay markiert seine Werte als solche und gibt sich nicht als Messung aus.

Jetson ist damit noch nicht bedient. nvpmodel und tegrastats sind eigene Quellen; das Feld power_mode existiert und steht auf Unsupported, statt einen Standardwert zu erfinden.

Alternativen

Die Werte im Governor-Prozess ueber NVML lesen. Schneller, und die Bibliotheksbindung haette den Governor an Treiberversionen gekoppelt — bei einem Produkt, das auf fremder Hardware laufen soll, der teuerste denkbare Tausch fuer ein paar Millisekunden.

Bei Collector-Ausfall den letzten bekannten Zustand weiterbenutzen. Waere bequem und waere eine Planung auf einer Beobachtung, die es nicht mehr gibt.

Auch stellen duerfen, etwa Persistence-Mode aktivieren. Haette messbar geholfen und den Governor zu einem Werkzeug gemacht, das die Bedingungen veraendert, unter denen es gemessen wird.