Wie viel Speicher benötigt der KV cache einer LLM-Anfrage?
Automatische Übersetzung
Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Bei einem herkömmlichen Transformer mit vollständiger Attention wächst der Speicherbedarf des KV cache mit der Anzahl der gespeicherten Tokens, der Schichten, der Key/Value Heads und der Bytes pro Wert. Multiplizieren Sie den Speicherbedarf pro Sequenz mit der Anzahl gleichzeitiger Sequenzen, um die reine Datenmenge zu schätzen. Reservieren Sie anschließend zusätzlichen Speicher für Weights und Runtime-Aufgaben.
Diese Schätzung hilft Serving Engineers, den Speicherbedarf einer Arbeitslast zu bestimmen. Multi-head latent attention (MLA), Sliding-Window-, hybride und rekurrente Caches benötigen architekturspezifische Schätzungen.
Verwenden Sie KV Heads statt Query Heads
Der Cache speichert die Key- und Value-Projektionen früherer Tokens, damit das Model sie nicht bei jedem Generierungsschritt erneut berechnet. Dichte Attention liest weiterhin einen mit jedem Token wachsenden Verlauf. Für Caches mit vollständiger Attention und getrennten Key/Value Heads, wie bei MHA, MQA oder GQA, und gleich langen Sequenzen gilt:
cache bytes = 2 × layers × KV_heads × head_dimension
× cached_tokens × concurrent_sequences × bytes_per_element
Der Faktor zwei berücksichtigt Keys und Values. Bei unterschiedlich langen Sequenzen verwenden Sie die Summe ihrer gespeicherten Token-Anzahlen. Lesen Sie einen expliziten head_dim aus der Model-Konfiguration, sofern vorhanden; hidden_size / num_attention_heads dient nur als Ersatz für Architekturen, die diesen Zusammenhang verwenden.
Metas Tabelle zur Llama-3-Architektur liefert die Dimensionen für diese Beispiele mit einem FP16/BF16-Cache mit zwei Bytes pro Wert:
| Model | Schichten / KV Heads / Head-Dimension | Tokens pro Sequenz | Reine Cache-Daten pro Sequenz |
|---|---|---|---|
| Llama 3.1 8B | 32 / 8 / 128 | 8,192 | 1 GiB |
| Llama 3.1 8B | 32 / 8 / 128 | 131,072 | 16 GiB |
| Llama 3.1 70B | 80 / 8 / 128 | 4,096 | 1.25 GiB |
| Llama 3.1 70B | 80 / 8 / 128 | 131,072 | 40 GiB |
Ein Cache-Budget von 40 GiB reicht nach dieser Rechnung für höchstens 32 vollständige 70B-Sequenzen mit je 4,096 Tokens. Das zählt nur die Cache-Daten; legen Sie die maximale Parallelität erst fest, nachdem Sie Speicher für die Runtime reserviert haben.
Prüfen Sie die tatsächliche Speicherbelegung des Servers
Weights, temporäre Puffer, Activations, teilweise gefüllte Blöcke und reservierte Kapazität benötigen zusätzlichen Speicher. Verteilte Server können KV Heads aufteilen oder replizieren. Ein unterstützter Ein-Byte-Cache halbiert diese reine Datenmenge, doch Skalierungsfaktoren, die Unterstützung durch die Implementierung und die Qualität können die nutzbare Kapazität verändern.
Messen Sie die maximale Speicherbelegung und die Verdrängung von Sequenzen mit repräsentativen Prompt- und Ausgabelängen. PagedAttention verbessert die Blockzuweisung; es beseitigt weder die gespeicherten Key/Value-Daten noch den Einfluss der Sequenzlänge.
Engineering-Leitfaden: Speicherbedarf des KV cache enthält eine ausführbare Kapazitätsberechnung.