Calcolatore della memoria dell'attenzione
Dati di input
| Lunghezza della sequenza | 4.096 |
|---|---|
| Teste di attenzione | 32 |
| Dimensione del batch | 1 |
| Precisione | FP16 / BF16 (2 byte) |
Calcolatore della memoria dell'attenzione
Stima la memoria della matrice dei punteggi di attenzione materializzata nell'attenzione standard dei transformer, a partire dalla lunghezza della sequenza, dal numero di teste, dalla dimensione del batch e dai byte per elemento — il termine quadratico che FlashAttention elimina.
Dati di input
Carico di lavoro
Risultati
Inserisci un valore per visualizzare i risultati.
La memoria dell'attenzione
L'attenzione standard dei transformer confronta ogni token con ogni altro token, costruendo una matrice dei punteggi prima della softmax. Quella matrice è quadrata nella lunghezza della sequenza, quindi la sua memoria cresce con il quadrato del contesto — il famoso costo quadratico dell'attenzione. Questo calcolatore stima la dimensione di quella matrice materializzata a partire dalla lunghezza della sequenza, dal numero di teste di attenzione, dalla dimensione del batch e dai byte usati per ogni punteggio. È precisamente la memoria che FlashAttention evita di memorizzare.
Il termine quadratico
Per una sequenza di token, l'attenzione forma una matrice di punteggi : la riga , colonna contiene quanto il token si attende al token . Memorizzarla richiede una memoria proporzionale a . Questo è diverso dai pesi del modello o dalla cache chiave-valore, che crescono in modo lineare con il contesto — la matrice dei punteggi cresce con il suo quadrato, quindi con contesti lunghi diventa il buffer intermedio dominante e la ragione per cui l'attenzione ingenua esaurisce la memoria.
La formula
Ogni testa costruisce la propria matrice dei punteggi e ogni sequenza nel batch porta con sé la propria copia, quindi la memoria in byte è
Abyte=B⋅H⋅s2⋅edove è la dimensione del batch, il numero di teste di attenzione, la lunghezza della sequenza ed i byte per punteggio memorizzato. Dividendo per si ottengono i gigabyte. Il quadrato su è ciò che rende costoso il contesto lungo: il numero di teste e il batch moltiplicano solo in modo lineare.
Che cos'è questa memoria
Il valore misura la matrice dei punteggi materializzata che l'attenzione standard scrive in memoria tra il prodotto query-chiave e la somma sui valori pesata dalla softmax. È il buffer di attivazione che un'implementazione ingenua deve mantenere. Se persista o meno dipende dal contesto: in un semplice passaggio in avanti è transitorio e può essere riutilizzato tra gli strati, mentre i framework di addestramento possono conservare una copia per strato per il passaggio all'indietro, a meno che non intervengano il checkpointing o un kernel fuso.
FlashAttention
FlashAttention calcola lo stesso output senza mai scrivere la matrice completa. Percorre le chiavi e i valori in piccoli blocchi, mantenendo statistiche della softmax aggiornate progressivamente, così da aver bisogno di un solo blocco in memoria alla volta, il che trasforma la memoria da quadratica a lineare nella lunghezza della sequenza. La matrice che questo calcolatore dimensiona è esattamente ciò che FlashAttention rinuncia a memorizzare — quindi il risultato qui riportato è una buona approssimazione della memoria che un kernel di attenzione fuso risparmia a una data lunghezza di contesto.
Esempio svolto
Consideriamo una singola sequenza di 4.096 token con 32 teste di attenzione in precisione a 16 bit:
Abyte=1×32×40962×2=1073741824circa 1,07 GB per la matrice dei punteggi di un singolo strato. Raddoppiando il contesto a 8.192 token, il termine quadratico prende il sopravvento: la stessa espressione dà circa 4,29 GB, quattro volte tanto per il doppio della lunghezza. Il lato chiave-valore dello stesso budget di attenzione è trattato nel Calcolatore della dimensione della cache KV, mentre la parte relativa ai pesi del modello nel Calcolatore della VRAM di inferenza per LLM.
Domande frequenti (FAQ)
Perché la memoria dell'attenzione è quadratica nella lunghezza della sequenza?
L'attenzione confronta ogni token con ogni altro token, producendo una matrice dei punteggi le cui dimensioni corrispondono entrambe alla lunghezza della sequenza. Memorizzare quella matrice completa richiede quindi una memoria proporzionale al quadrato della lunghezza della sequenza.
Raddoppiare il contesto quadruplica la matrice dei punteggi: è per questo che l'attenzione standard diventa limitata dalla memoria con contesti lunghi — il termine quadratico supera il costo lineare dei pesi e delle attivazioni.
Come fa FlashAttention a ridurre questa memoria?
FlashAttention calcola lo stesso risultato senza mai materializzare la matrice dei punteggi completa. Scorre l'attenzione su piccoli blocchi di chiavi e valori, mantenendo statistiche della softmax aggiornate progressivamente, così da tenere in memoria un solo blocco alla volta.
La matrice quadratica che questo calcolatore misura è esattamente la memoria che FlashAttention evita di memorizzare, ed è ciò che le permette di scalare a sequenze molto più lunghe. L'aritmetica resta invariata; si riduce soltanto la memoria intermedia, da quadratica a lineare.
Questa memoria è per strato o per l'intero modello?
Dipende dall'implementazione. Il valore qui riportato è la dimensione della matrice dei punteggi di un singolo strato. In un passaggio in avanti ingenuo quel buffer può essere liberato e riutilizzato tra gli strati, quindi è transitorio anziché moltiplicato per il numero di strati.
Durante l'addestramento, però, i framework possono conservare i tensori di attenzione per strato per il passaggio all'indietro, a meno che non si usi il gradient checkpointing o FlashAttention, nel qual caso il totale può crescere con il numero di strati.
Avvertenze legali
Questa stima considera solo la matrice dei punteggi materializzata alla precisione indicata; esclude i tensori di query, chiave e valore, la proiezione di output e le altre attivazioni. Descrive l'attenzione standard — kernel come FlashAttention non memorizzano affatto questa matrice.
Da provare dopo
Calcolatore della dimensione della cache KV
Stima la memoria della cache chiave-valore che un transformer mantiene durante l'inferenza, a partire da numero di strati, teste chiave/valore, dimensione della testa, lunghezza del contesto, dimensione del batch e byte per elemento.
Calcolatore della VRAM di inferenza per LLM
Stima la VRAM della GPU necessaria per servire in inferenza un modello linguistico di grandi dimensioni a partire dal numero di parametri, dalla precisione dei pesi e dall'overhead di runtime per la cache KV, le attivazioni e la frammentazione.