Was ändert PagedAttention an der KV-Speicherzuweisung für LLMs?
Automatische Übersetzung
Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Mit PagedAttention kann der Attention-Cache einer Anfrage separate Speicherblöcke fester Größe belegen, statt einen großen zusammenhängenden Speicherbereich zu benötigen. Eine Blocktabelle ordnet die logischen Token-Positionen der Anfrage physischen Blöcken zu. Dadurch muss seltener im Voraus Speicher für die maximal mögliche Sequenzlänge einer Anfrage reserviert werden.
Der Hauptvorteil ist eine flexiblere KV-Speicherzuweisung für gleichzeitige Anfragen. Die pro gespeichertem Token erforderliche Menge an Key/Value-Daten sinkt dadurch nicht.
Ungenutzten Platz in Blöcken berechnen
Betrachten wir eine beispielhafte Implementierung mit Blöcken für 16 Token. Eine Sequenz mit 35 Token benötigt drei Blöcke, die Platz für 48 Token bieten. Dreizehn Positionen im letzten Block bleiben ungenutzt: bei dieser kurzen Sequenz etwa 27% der zugewiesenen Positionen.
Nur der letzte Block muss teilweise gefüllt sein. Mit zunehmender Sequenzlänge macht dieser ungenutzte Platz einen kleineren Anteil des zugewiesenen Speichers aus. Die tatsächliche Blockgröße und die unterstützten Layouts hängen von der Runtime, dem Attention-Backend und der Version ab.
Die Veröffentlichung zu PagedAttention beschreibt das Zuordnungs- und Zuweisungskonzept. Zusätzliche Blöcke werden zugewiesen, wenn eine Sequenz wächst, und freigegeben, wenn die Anfrage endet. Ein großer zusammenhängender Bereich pro Anfrage wird damit nicht vorab reserviert.
Gemeinsame Nutzung erfordert mehr als Speicherzuweisung
Mehrere Anfragen können auf denselben kompatiblen Cache-Block verweisen. Prefix Caching findet wiederverwendbare Blöcke für identische Präfixe; Copy-on-Write erlaubt es Anfragen, sich auseinanderzuentwickeln, ohne den gemeinsam genutzten Zustand zu beschädigen. Ein Layout mit Blöcken ermöglicht dies, stellt aber nicht automatisch eine Strategie zum Auffinden von Cache-Einträgen bereit und garantiert keine Wiederverwendung zwischen Anfragen.
Die ursprüngliche Einführung von vLLM berichtete von 60–80% ungenutztem Speicher bei den früheren, zum Vergleich herangezogenen Zuweisungsansätzen und von unter 4% bei den gemessenen PagedAttention-Workloads. Die obige Berechnung für eine kurze Sequenz zeigt, warum unter 4% keine allgemeingültige Obergrenze ist. Die großen Throughput-Unterschiede in den Vergleichen umfassen auch Unterschiede in der gesamten Runtime und sollten deshalb nicht allein der Speicherzuweisung zugeschrieben werden.
Messen Sie zugewiesene Blöcke, belegte Token-Positionen, Cache-Verdrängungen oder Unterbrechungen sowie die Kapazität für gleichzeitige Anfragen. Vergleichen Sie dieselben Längen und dieselbe Cache-Präzision. Wenn bereits die reinen KV-Daten den Speicher übersteigen, kann die Blockzuweisung diese Datenmenge nicht beseitigen; gegebenenfalls sind zusätzlich weniger KV-Heads, unterstützte Cache-Quantization oder ein kleinerer Workload nötig.
Engineering-Leitfaden: PagedAttention enthält ein Beispiel für eine Blocktabelle.