Unser GB10-Gerät schaltete sich immer wieder selbst aus. Das Protokoll machte den Speicher verantwortlich; es war die Hitze.
Ops
Eines unserer drei NVIDIA GB10-Geräte fiel im September dreimal innerhalb von vier Tagen aus: am 10. September, am 12. September (es blieb 17 Stunden ausgeschaltet) und am 13. September, zwölf Minuten nach dem erneuten Einschalten. Jedes Mal musste eine Person den Ein-/Aus-Schalter drücken.
So sieht eine Abschaltung wegen Überhitzung aus
Das Systemjournal endete einfach mitten in der Aktivität, ohne einen Eintrag zur Herunterfahrsequenz: Ein harter Stromausfall lässt journald keine Zeit, seinen Puffer zu schreiben. Im Juli zeigte die Uhr nach einer ähnlichen Abschaltung sogar ein altes Datum an. Und der Hardware-Watchdog, der ein hängendes Gerät neu startet, griff nicht ein, weil das Gerät nicht gehangen hatte: Der Strom war weg.
Der falsche Hinweis
Die letzten Kernel-Zeilen vor jedem Ausfall waren GPU-Speicherüberlauf-Fehler (NV_ERR_NO_MEMORY), daher schien der Speicher schuld zu sein. Das war er nicht. Diese Zeilen waren schlicht das Häufigste, was der Kernel schrieb: 440.580 davon in einem einzigen Start, der 19 Tage lief, bevor er endete. Wenn eine Zeile so oft erscheint, wird sie immer die letzte Zeile vor einem beliebigen Ereignis sein. Bevor Sie eine Log-Zeile beschuldigen, zählen Sie, wie oft sie erscheint, wenn nichts schiefgeht.
Der richtige Hinweis
Weil das Journal bei einem Stromausfall die letzten Minuten verliert, hatten wir einen kleinen Sampler hinzugefügt, der jede Minute Temperaturen, Last und Speicher in eine Datei schreibt und auf die Festplatte sichert. Er erfasste alle fünf Ausfälle seit Juli. Jeder trat bei voller GPU-Last (96 %) auf, mit einer CPU-Temperatur von 85 bis 97 °C.
Das Timing erklärte den Rest. Um den Anfang September herum hatten wir das Video-Rendering auf dieses Gerät verlagert. Die GPU-Leistung unter Volllast stieg von etwa 24 W auf 46 W, die Median-GPU-Temperatur von 68 auf 86 °C und die Minuten pro Woche mit einer CPU-Temperatur von 95 °C oder mehr von null auf 4.283. Unsere beiden anderen GB10-Geräte, die das Sprachmodell bei derselben Last von 96 % ausführen, blieben bei 65 bis 81 °C. Dieses Gerät kühlte einfach schlechter.
Die erste Lösung: eine GPU-Taktbegrenzung
Auf GB10 kann nvidia-smi kein Leistungslimit setzen, aber es kann den GPU-Takt begrenzen: nvidia-smi -lgc 0,2000. Im Juli sank die Temperatur der heißesten Zone dadurch innerhalb von Sekunden von 91 °C auf 77 bis 83 °C. Zwei Details sind wichtig:
- Wenden Sie die Begrenzung an, bevor die schweren Dienste starten. Unser Begrenzungsdienst lief zunächst etwa 15 Sekunden nach dem Start, als der Modellserver bereits mit voller Leistung lud – genau der Moment, in dem das Gerät zuvor abgestürzt war. Jetzt läuft er, bevor Docker startet.
- Prüfen Sie es unter Last. Mit aktivierter Begrenzung zeigt die gemeldete GPU-Taktung im Leerlauf weiterhin etwa 2.400 MHz an. Unter Last hält sie sich bei 1.976 MHz.
Die zweite Maßnahme: eine Hitzeschutzregel in Stufen
Die Begrenzung reichte nicht aus, sobald das Rendering hinzukam. Daher liest eine Sicherheitsregel nun jede Sekunde jeden Sensor und greift stufenweise ein: eine niedrigere GPU-Taktung ab 89 °C und eine weitere Reduzierung ab 92 °C; ab 94 °C wird der Renderer pausiert (SIGSTOP) und die CPU gedrosselt; ab 96 °C werden alle GPU-Jobs für die zur Abkühlung benötigten Sekunden pausiert. Die Stufen werden erst zurückgenommen, wenn die Maschine eine Weile kühler geblieben ist. Bei 97 °C über 20 Sekunden stoppt eine Notbremsung den Videodienst vollständig.
In den ersten neun Minuten unter Rendering erreichte die heißeste Zone einen Spitzenwert von 94 °C mit einem Median von 89 °C, verglichen mit Plateaus bei 97 °C zuvor. Das hat seinen Preis: An einem Tag Mitte September war der Renderer für 17 % der Zeit pausiert, und die GPU lief den größten Teil des Tages mit 900 MHz oder weniger. Und es ist keine Heilung: Die Maschine schaltete sich am 11. Oktober noch einmal selbst ab, bei 97 bis 98 °C. Seitdem läuft sie ohne Unterbrechung, 20 Tage zum Zeitpunkt dieses Textes.
Vier Fehler, die wir auf dem Weg gemacht haben
- Das Pausieren eines einzelnen Jobs kühlte die Maschine nicht. Die Bremse griff, obwohl der Renderer bereits pausiert war, weil ein Bildmodell noch rechnete und ein Dutzend Timer in derselben Minute starteten. Die oberste Stufe pausiert nun jeden schweren GPU-Job, nicht nur den Renderer.
- Die Sicherheitsregel pausiert Jobs nach Namen, und die Namen haben sich geändert. Zweimal wäre ein neuer Engine der Pause entgangen: ein Bildmodell mit einem neuen Prozessnamen im September und im Oktober ein Renderer, der in einem Container läuft, anstatt als Kind des Render-Dienstes. Jede Änderung der Engine umfasst nun eine Überprüfung der Liste der Sicherheitsregel.
- Die Haltefunktion der Bremse wurde nie aufgehoben. Sie stoppte den Videodienst und hinterließ eine Halte-Datei, damit nichts ihn neu startete. Auch niemand wurde alarmiert, und die Ausgabe kam für drei Tage zum Stillstand, bevor wir es bemerkten. Die Haltefunktion hebt sich nun selbst auf: fünf Minuten nach der letzten Bremsung, ohne neue Bremsung, mindestens 30 GB freier Speicher und ein Zehn-Minuten-Durchschnitt von 93 °C oder weniger. Auf die Abkühlung der Maschine zu warten, war nie eine Option: Sie lag im Durchschnitt bei 88 °C, mit und ohne Rendering.
- Der Alarm löste bei der normalen Temperatur der Maschine aus. Der Alarm-Schwellenwert lag bei 88 °C, was dem Durchschnitt dieser Maschine entsprach. Innerhalb eines Tages verbrachte sie 32 % der Zeit bei 90 °C oder mehr, 8 % bei 93 °C oder mehr und 3 % bei 95 °C oder mehr, erreichte aber nie 97 °C. Wir setzten den Alarm auf 97 °C, das Plateau, bei dem sie tatsächlich ausfiel, und die Alarm-E-Mails hörten auf.
Das Fazit
Software hielt diese Maschine am Laufen, aber die Ursache war physisch: Ihre Kühlung war zwei- bis dreimal schlechter als die ihrer Geschwistergeräte. Wenn sich eine GB10-Maschine unter Last selbst abschaltet, prüfen Sie zuerst den Luftstrom. Begrenzen Sie dann den GPU-Takt, bevor Ihre Dienste starten, pausieren Sie die schweren Jobs, bevor die Maschine ihre Grenze erreicht, und setzen Sie Alarme basierend auf den Temperaturen, bei denen sie tatsächlich läuft.
Factory Floor enthält eine solche Wärmeschutzregel: Sie liest den höchsten Wert der GPU- und Thermal-Zonen-Sensoren, pausiert die von Ihnen benannten schweren Jobs bei einer festgelegten Temperatur (standardmäßig 92 °C) und setzt sie erst unterhalb einer niedrigeren Temperatur (84 °C) wieder fort, flankiert von Speicher- und Festplatten-Schutzregeln.