KV-Cache
Entdecken Sie, wie KV Cache Transformer-Modelle wie LLMs optimiert. Erfahren Sie, wie diese Technik die Inferenzlatenz reduziert und die Effizienz von Ultralytics steigert.
KV-Cache (Key-Value-Cache) ist eine wichtige Optimierungstechnik, die vor allem in
großen Sprachmodellen (LLMs)
und anderen Transformer-basierten Architekturen eingesetzt wird, um die
Inferenzlatenz zu beschleunigen zu beschleunigen und die
Rechenkosten zu senken. Im Kern speichert der KV-Cache die Schlüssel- und Wertematrizen, die vom
Aufmerksamkeitsmechanismus für
vorherige Token in einer Sequenz generiert wurden. Durch das Speichern dieser Zwischenberechnungen vermeidet das Modell, die Aufmerksamkeitszustände
für die gesamte Konversationshistorie jedes Mal neu zu berechnen, wenn es ein neues Token generiert. Dieser Prozess transformiert die
Textgenerierungs-Workflow von einer
quadratischen Komplexität in eine lineare und ermöglicht so Echtzeit-Interaktionen mit Chatbots und
KI-Agenten ermöglicht.
Mechanismus und Vorteile
In einem Standard Transformer-Modell Modell
müssen für die Generierung des nächsten Wortes alle vorherigen Wörter berücksichtigt werden, um den Kontext zu verstehen. Ohne Caching
müsste das Modell bei jedem Schritt die mathematischen Beziehungen für die gesamte Sequenz neu berechnen. Der KV-Cache
löst dieses Problem, indem er als Speicherbank fungiert.
-
Geschwindigkeitsverbesserung: Durch das Abrufen vorab berechneter Schlüssel und Werte aus dem Speicher beschleunigt das System die
Inferenz-Engine Inferenz-Engine. Dies ist für Anwendungen mit geringer Latenz, wie z. B.
Echtzeit-Inferenz in
Kundenservice-Bots.
-
Ressourceneffizienz: Es erhöht zwar den Speicherbedarf (VRAM), reduziert jedoch erheblich die
pro Token erforderliche Rechenleistung (FLOPs). Dieser Kompromiss wird häufig durch Techniken wie die
Modellquantisierung oder Paging gesteuert,
ähnlich wie Betriebssysteme den RAM verwalten.
-
Erweiterter Kontext: Durch die effiziente Verwaltung des KV-Caches können Modelle ein größeres
Kontextfenster, wodurch sie lange Dokumente verarbeiten oder über längere Zeiträume hinweg kohärente Gespräche führen können.
Anwendungsfälle in der Praxis
Der KV-Cache ist eine grundlegende Komponente bei der Bereitstellung moderner generativer KI, aber seine Prinzipien erstrecken sich auch auf
Computer Vision (CV).
-
Generative Chatbots: Dienste wie
ChatGPT oder
Claude stützen sich stark auf KV-Caching. Wenn ein Benutzer
eine Folgefrage stellt, liest das Modell nicht den gesamten Chat-Verlauf von Grund auf neu. Stattdessen hängt es die
neue Eingabe an die zwischengespeicherten Zustände der vorherigen Runde an, was nahezu sofortige Antworten ermöglicht.
-
Video-Verständnis: In
Video-Verständnisaufgaben verarbeiten
Modelle Frames sequenziell. Ähnlich wie bei Text-Tokens können visuelle Merkmale aus vergangenen Frames zwischengespeichert werden, um
dem Modell zu helfen, track oder Aktionen zu erkennen, ohne den gesamten Videoverlauf erneut zu verarbeiten. Dies ist besonders
relevant für die
Aktionserkennung , bei der
der zeitliche Kontext entscheidend ist.
Effiziente Speicherverwaltung
Da Modelle immer größer werden, kann die Größe des KV-Caches zu einem Engpass werden, der Gigabytes an GPU verbraucht. Jüngste
Fortschritte konzentrieren sich auf die Optimierung dieses Speichers.
-
PagedAttention: Inspiriert durch den virtuellen Speicher in Betriebssystemen,
PagedAttention (eingeführt durch vLLM) ermöglicht es, den KV-Cache
in nicht zusammenhängenden Speicherblöcken zu speichern. Dies reduziert die Fragmentierung und ermöglicht größere Batch-Größen
während des Modellbereitstellung.
-
KV-Cache-Quantisierung: Um Platz zu sparen, wenden Entwickler häufig
Mixed-Precision- oder int8
speziell auf die zwischengespeicherten Werte an. Dies reduziert den Speicherbedarf und ermöglicht
Edge-AI-Geräte Geräte mit begrenztem RAM in die Lage versetzt,
leistungsfähige Modelle auszuführen.
-
Prompt-Caching: Eine verwandte Technik, bei der die KV-Zustände eines statischen System-Prompts (z. B. „Du
bist ein hilfreicher Programmierassistent“) einmal berechnet und dann in vielen verschiedenen Benutzersitzungen wiederverwendet werden. Dies ist eine
Kernfunktion zur Optimierung der
Prompt-Engineering- Workflows
in großem Maßstab.
Unterscheidung von verwandten Konzepten
Es ist hilfreich, den KV-Cache von anderen Caching- und Optimierungsbegriffen zu unterscheiden:
-
KV-Cache vs. Prompt-Caching: Der KV-Cache
bezieht sich in der Regel auf den dynamischen, tokenweisen Speicher, der während eines einzelnen Generierungs-Streams verwendet wird. Prompt-Caching
bezieht sich speziell auf die Speicherung des verarbeiteten Zustands einer festen Eingabeanweisung, die über mehrere
unabhängige Inferenzaufrufe hinweg wiederverwendet werden soll.
-
KV-Cache vs. Einbettungen: Einbettungen
sind Vektordarstellungen von Eingabedaten (Text oder Bilder), die die semantische Bedeutung erfassen. Der KV-Cache speichert die
Aktivierungen (Schlüssel und Werte), die aus diesen Einbettungen innerhalb der Aufmerksamkeits-Schichten abgeleitet werden, speziell zum
Zweck der Sequenzgenerierung.
-
KV-Cache vs. Modellgewichte: Modellgewichte
sind die statischen, gelernten Parameter des neuronalen Netzwerks. Der KV-Cache besteht aus dynamischen, temporären Daten, die
während des Vorwärtsdurchlaufs einer bestimmten Eingabesequenz generiert werden.
Beispiel: Kontext in Visionsmodellen
Während KV-Caching vor allem im Bereich NLP bekannt ist, gilt das Konzept der Zustandserhaltung auch für fortschrittliche Bildverarbeitungsmodelle. Im
nachfolgenden Beispiel simulieren wir die Idee der Zustandsübergabe (Kontext) in einem Video-Tracking-Szenario unter Verwendung von
Ultralytics . Hier behält der Tracker die Identität von Objekten über mehrere Frames hinweg bei, was konzeptionell der Art und Weise ähnelt, wie ein Cache den
Kontext über mehrere Tokens hinweg beibehält.
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")
Entwickler, die Datensätze verwalten und optimierte Modelle bereitstellen möchten, können die
Ultralytics , die den Prozess von der Datenannotation bis zur effizienten
Modellbereitstellungvereinfacht. Für diejenigen, die sich für die tieferen Mechanismen der Aufmerksamkeit interessieren, gibt es Bibliotheken wie
PyTorch
die grundlegenden Bausteine, in denen diese Caching-Mechanismen implementiert sind.