Eine lokale KI-Laufzeitumgebung reserviert nach einer Anfrage Speicher, damit zukünftige Tensoren Geräteblöcke wiederverwenden können, ohne wiederholt Kosten für Allokation und Synchronisierung zu verursachen.
Das sichtbare Ergebnis kann wie ein Speicherleck wirken: Die GPU-Auslastung fällt auf null, die Antwort ist vollständig, aber der Prozess belegt weiterhin den größten Teil des Beschleunigerspeichers. Ein Teil dieses Speicherbedarfs kann auf aktive Modellgewichte oder den KV-Zustand entfallen, während ein anderer Teil zu einem Caching-Allocator, Ausführungskontext, Graph-Capture, Bibliotheks-Workspace oder einer Keep-Alive-Richtlinie des Modells gehört. Die folgenden Abschnitte unterscheiden aktive Allokationen von wiederverwendbaren Reservierungen und zeigen, wann persistenter Speicher normal, verschwenderisch oder ein Hinweis auf ein echtes Leck ist.
Geräteallokation ist teuer genug, um zwischengespeichert zu werden
Während einer Anfrage erstellte Tensoren werden wiederholt angelegt und freigegeben. Jeden Block an den Treiber zurückzugeben, kann Synchronisierung verursachen und dazu führen, dass die Speicheranordnung für die nächste Anfrage erneut aufgebaut werden muss.
Der CUDA-Allocator von PyTorch trennt zwischengespeicherte Allocator-Blöcke von Tensoren, die weiterhin aktiv allokiert sind.
Das Behalten freier Blöcke innerhalb des Prozesses verbessert die Latenz bei wiederholten Anfragen. Ein anderer KI-Dienst kann diese Bytes jedoch erst nutzen, wenn der Allocator sie an den Treiber freigibt.
Allokierter, reservierter und auf dem Gerät freier Speicher sind unterschiedliche Messwerte
Allokierter Speicher gehört zu noch aktiven Tensoren. Reservierter Speicher wird vom Laufzeit-Allocator verwaltet und kann sowohl aktive Allokationen als auch derzeit ungenutzte, wiederverwendbare Blöcke umfassen.
Eine Laufzeitumgebung kann daher auch nach der Zerstörung temporärer Tensoren eine Lücke beim reservierten Speicher anzeigen.
Gerätewerkzeuge wie nvidia-smi melden den für den Treiber sichtbaren Speicherbedarf des Prozesses, nicht, welche Blöcke innerhalb des Frameworks logisch frei sind.
Modell- und Laufzeitstatus können absichtlich aktiv gehalten werden
Der Prozess kann Modellgewichte, Tokenizer-Status, Kernel, Ausführungsgraphen und Beschleunigerkontexte bereithalten, weil ihre Entladung die nächste Anfrage in einen Kaltstart verwandeln würde.
Die Erklärung von ZimaSpace zu im Speicher gehaltenen Modellen zeigt, warum ein warmer Dienst Speicher verbraucht, selbst wenn gerade kein Benutzer Tokens generiert.
Dies ist ein bewusster Kompromiss zwischen Kapazität und Latenz. Aus Sicht der Rechenleistung ist der Speicher ungenutzt, als bereithaltender Status jedoch weiterhin wertvoll.
Fragmentierung kann reservierte Blöcke nur schlecht wiederverwendbar machen
Ein Pool kann insgesamt genügend ungenutzte Bytes enthalten, während deren Blockgrößen nicht zur nächsten Anfrage passen. Unterschiedliche Prompts, Bildgrößen, Batches und Modellwechsel können ein fragmentiertes Reservierungsmuster erzeugen.
GMLake untersucht die durch unregelmäßige Allokationsgrößen verursachte Fragmentierung von Allocators.
In diesem Fall ist der zurückgehaltene Speicher weder aktiv nützlich noch für andere Prozesse verfügbar. Ein Neustart des Prozesses kann vorübergehend wieder für eine sauberere Anordnung sorgen.
Messen Sie, ob sich der Speicherbedarf stabilisiert oder wächst
Führen Sie wiederholt dieselbe feste Anfrage aus und protokollieren Sie nach jedem Abschluss den allokierten und reservierten Speicher sowie KV-Cache, Modellgewichte und auf dem Gerät freien Speicher.
Ein stabiler Höchstwert deutet auf normales Caching oder ein Keep-Alive-Verhalten hin. Ein Speicherbedarf, der mit jeder identischen Anfrage wächst und alte Blöcke nie wiederverwendet, deutet auf ein Leck, einen unbegrenzten Cache, eine beibehaltene Sitzung oder eine veränderte Arbeitslast hin.
Testen Sie Steuerungen zur Cache-Freigabe erst, nachdem Sie bestätigt haben, welchen Status sie entfernen. Das Leeren ungenutzter Allocator-Blöcke entlädt keine aktiven Modellgewichte, und das Entladen des Modells kann die Antwortzeit verschlechtern.
Legen Sie für einen Heimserver mit mehreren Diensten pro Laufzeitumgebung ein Speicherbudget und eine Richtlinie für Leerlaufzeiten fest, damit die Reservierung eines Dienstes nicht unbemerkt den Start eines anderen verhindert.
Tech- & KI-Zentrum
Mehr zum Lesen

Warum werden Smart-Home-Prognosen nach saisonalen Änderungen der Routinen ungenauer?
Saisonale Routinen verändern das Verhältnis zwischen Zeit, Sensoren, Belegung und gewünschten Aktionen, wodurch ein auf früheren Gewohnheiten trainiertes Modell veraltet.

Warum verpasst ein Heim-NVR kurze Ereignisse, wenn die Objektverfolgung aktiviert ist?
Das Tracking benötigt ausreichend Erkennungen, um eine Trajektorie zu starten und zu bestätigen. Daher kann ein kurzzeitig auftauchendes Objekt verschwinden, bevor der NVR ein...

Warum ändern sich KI-Fotobezeichnungen nach einem Modell-Upgrade?
Ein Modell-Upgrade verändert die zur Zuweisung von Labels verwendete Repräsentation und Rangfolge, sodass dasselbe Foto unterschiedliche semantische Grenzen oder Konfidenzschwellen überschreiten kann.

