Attention-Speicher berechnen
Eingaben
| Sequenzlänge | 4.096 |
|---|---|
| Attention-Heads | 32 |
| Batch-Größe | 1 |
| Präzision | FP16 / BF16 (2 Bytes) |
Attention-Speicher berechnen
Schätzt den Speicher der materialisierten Attention-Score-Matrix in der Standard-Transformer-Attention aus Sequenzlänge, Anzahl der Heads, Batch-Größe und Bytes pro Element — der quadratische Term, den FlashAttention entfernt.
Eingaben
Workload
Ergebnisse
Geben Sie einen Wert ein, um die Ergebnisse zu sehen.
Attention-Speicher
Die Standard-Transformer-Attention vergleicht jedes Token mit jedem anderen Token und baut vor dem Softmax eine Score-Matrix auf. Diese Matrix ist quadratisch in der Sequenzlänge, daher wächst ihr Speicher mit dem Quadrat des Kontexts — die berühmten quadratischen Kosten der Attention. Dieser Rechner schätzt die Größe dieser materialisierten Matrix aus der Sequenzlänge, der Anzahl der Attention-Heads, der Batch-Größe und den pro Score genutzten Bytes. Es ist genau der Speicher, den FlashAttention nicht ablegt.
Der quadratische Term
Für eine Sequenz von Tokens bildet die Attention eine -Matrix von Scores: Zeile , Spalte enthält, wie stark Token das Token beachtet. Sie zu speichern benötigt Speicher proportional zu . Das unterscheidet sich von den Modellgewichten oder dem Key-Value-Cache, die linear mit dem Kontext wachsen — die Score-Matrix wächst mit ihrem Quadrat, sodass sie bei langem Kontext zum dominierenden Zwischenpuffer wird und der Grund ist, warum naive Attention den Speicher sprengt.
Die Formel
Jeder Head baut seine eigene Score-Matrix und jede Sequenz im Batch trägt ihre eigene Kopie, daher beträgt der Speicher in Bytes
Abytes=B⋅H⋅s2⋅ewobei die Batch-Größe ist, die Anzahl der Attention-Heads, die Sequenzlänge und die Bytes pro gespeichertem Score. Die Division durch ergibt Gigabytes. Das Quadrat auf macht langen Kontext teuer: Anzahl der Heads und Batch multiplizieren nur linear.
Was dieser Speicher ist
Der Wert misst die materialisierte Score-Matrix, die die Standard-Attention zwischen dem Query-Key-Produkt und der softmax-gewichteten Summe über die Values in den Speicher schreibt. Es ist der Aktivierungspuffer, den eine naive Implementierung halten muss. Ob er bestehen bleibt, hängt vom Kontext ab: In einem einfachen Forward-Pass ist er transient und kann über die Layer wiederverwendet werden, während Trainings-Frameworks eine Kopie pro Layer für den Backward-Pass behalten können, sofern nicht Checkpointing oder ein fused Kernel eingreift.
FlashAttention
FlashAttention berechnet die identische Ausgabe, ohne die vollständige -Matrix jemals zu schreiben. Es durchläuft die Keys und Values in kleinen Blöcken und führt laufende Softmax-Statistiken mit, sodass es immer nur einen Block im Speicher braucht, was die Ablage von quadratisch auf linear in der Sequenzlänge umstellt. Die Matrix, deren Größe dieser Rechner bestimmt, ist genau das, was FlashAttention nicht ablegt — das Ergebnis hier ist also ein guter Näherungswert für den Speicher, den ein fused Attention-Kernel bei einer gegebenen Kontextlänge spart.
Rechenbeispiel
Nehmen wir eine einzelne Sequenz von 4.096 Tokens mit 32 Attention-Heads in 16-Bit-Präzision:
Abytes=1×32×40962×2=1073741824etwa 1,07 GB für die Score-Matrix eines Layers. Verdoppelt man den Kontext auf 8.192 Tokens, übernimmt der quadratische Term: derselbe Ausdruck ergibt rund 4,29 GB, viermal so viel für die doppelte Länge. Die Key-Value-Seite desselben Attention-Budgets behandelt der KV-Cache-Größe berechnen, und den Modellgewichts-Anteil der VRAM-Rechner für LLM-Inferenz.
Häufig gestellte Fragen (FAQ)
Warum ist der Attention-Speicher quadratisch in der Sequenzlänge?
Attention vergleicht jedes Token mit jedem anderen Token und erzeugt eine Score-Matrix, deren beide Dimensionen die Sequenzlänge sind. Diese vollständige Matrix zu speichern benötigt daher Speicher proportional zum Quadrat der Sequenzlänge.
Eine Verdopplung des Kontexts vervierfacht die Score-Matrix, weshalb die Standard-Attention bei langem Kontext speichergebunden wird — der quadratische Term überholt die linearen Kosten von Gewichten und Aktivierungen.
Wie reduziert FlashAttention diesen Speicher?
FlashAttention berechnet dasselbe Ergebnis, ohne die vollständige Score-Matrix jemals zu materialisieren. Es streamt die Attention über kleine Blöcke von Keys und Values und führt laufende Softmax-Statistiken mit, sodass es immer nur einen Block gleichzeitig hält.
Die quadratische Matrix, die dieser Rechner misst, ist genau der Speicher, den FlashAttention nicht ablegt, was es erlaubt, auf deutlich längere Sequenzen zu skalieren. Die Arithmetik bleibt unverändert; nur der Zwischenspeicher schrumpft von quadratisch auf linear.
Ist dieser Speicher pro Layer oder für das ganze Modell?
Das hängt von der Implementierung ab. Der Wert hier ist die Größe der Score-Matrix eines einzelnen Layers. In einem naiven Forward-Pass kann dieser Puffer zwischen den Layern freigegeben und wiederverwendet werden, ist also transient und nicht mit der Anzahl der Layer multipliziert.
Beim Training jedoch können Frameworks die Attention-Tensoren pro Layer für den Backward-Pass behalten, sofern nicht Gradient Checkpointing oder FlashAttention eingesetzt wird; in diesem Fall kann der Gesamtwert mit der Anzahl der Layer skalieren.
Haftungsausschluss
Diese Schätzung deckt nur die materialisierte Score-Matrix bei der angegebenen Präzision ab; sie schließt die Query-, Key- und Value-Tensoren, die Output-Projektion und andere Aktivierungen aus. Sie beschreibt die Standard-Attention — Kernel wie FlashAttention legen diese Matrix gar nicht erst ab.