Calcolatore della dimensione della cache KV
Dati di input
| Strati | 32 |
|---|---|
| Teste chiave/valore | 32 |
| Dimensione della testa | 128 |
| Lunghezza del contesto | 4.096 |
| Dimensione del batch | 1 |
| Precisione | FP16 / BF16 (2 byte) |
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.
Dati di input
Modello
Carico di lavoro
Risultati
Inserisci un valore per visualizzare i risultati.
Dimensione della cache KV
Durante l'inferenza di un transformer il modello attende su ogni token visto finora. Per evitare di ricalcolare i vettori di chiave e valore dell'intero contesto a ogni passo di generazione, li memorizza e li riutilizza — la cache chiave-valore. Quella cache è spesso il principale consumatore di memoria dell'acceleratore nel serving a contesto lungo, a volte più grande dei pesi del modello stessi. Questo calcolatore ne stima la dimensione a partire dal numero di strati, dal numero di teste chiave/valore, dalla dimensione della testa, dalla lunghezza del contesto, dalla dimensione del batch e dai byte usati per ogni numero memorizzato.
Perché la cache esiste
Generare testo un token alla volta significa che ogni nuovo token deve attendere su tutti i token che lo precedono. Senza una cache, ogni passo rielaborerebbe l'intero prompt e tutto l'output precedente, facendo crescere il costo della generazione con il quadrato della lunghezza della sequenza. Conservando le chiavi e i valori dei token passati, il modello trasforma ogni passo in un lavoro proporzionale solo al nuovo token. Il prezzo di quella velocità è la memoria: una coppia di vettori — una chiave e un valore — per ogni strato, ogni testa chiave/valore e ogni token nel contesto.
La formula
La cache contiene due tensori, chiavi e valori, quindi la dimensione in byte è
Kbyte=2⋅L⋅H⋅d⋅s⋅B⋅edove è il numero di strati, il numero di teste chiave/valore, la dimensione della testa, la lunghezza del contesto in token, la dimensione del batch ed i byte per elemento memorizzato. Dividendo per si ottengono i gigabyte. La dimensione cresce in modo lineare con ogni fattore, ed è questa l'intuizione chiave: raddoppiare il contesto, il batch o il numero di strati raddoppia la cache.
Attenzione a query raggruppate
Il numero di teste chiave/valore è ciò che l'attenzione a query raggruppate (GQA) prende di mira. Nell'attenzione multi-testa semplice ogni testa di query possiede una coppia chiave/valore. La GQA consente a un gruppo di teste di query di condividere una sola testa chiave/valore, e l'attenzione a query multipla ne condivide una sola per l'intero strato. Poiché la cache scala con , passare da 32 teste chiave/valore a 8 riduce la cache a un quarto, mentre le teste di query — e gran parte della qualità del modello — restano al loro posto. La maggior parte dei modelli grandi recenti adotta la GQA esattamente per questo motivo.
Esempio svolto
Consideriamo un modello con 32 strati, 32 teste chiave/valore, una dimensione della testa di 128, che tiene 4.096 token di contesto e serve una singola sequenza a 16 bit di precisione:
Kbyte=2×32×32×128×4096×1×2=2147483648ovvero circa 2,15 GB. Servire quattro sequenze di questo tipo contemporaneamente quadruplica il valore a circa 8,59 GB. Passare la cache alla precisione a 8 bit dimezzerebbe entrambe le cifre.
Leggere il risultato
Poiché ogni fattore moltiplica in modo lineare, il serving a contesto lungo e ad alto batch li accumula insieme e la cache può superare i pesi. Ecco perché i motori di inferenza di produzione si appoggiano alla quantizzazione della cache a meno byte per elemento, alla GQA per ridurre le teste chiave/valore e all'attenzione paginata per impacchettare la cache senza frammentazione. Il lato computazionale dello stesso budget hardware compare nel Calcolatore della memoria dell'attenzione, e la parte relativa ai pesi del modello nel Calcolatore della VRAM di inferenza per LLM.
Domande frequenti (FAQ)
Che cos'è la cache KV?
Durante la generazione autoregressiva un transformer attende su ogni token precedente. Invece di ricalcolare i vettori di chiave e valore per l'intero contesto a ogni passo, li memorizza e li riutilizza — quel deposito è la cache KV.
Baratta memoria con velocità: senza di essa, generare ogni nuovo token significherebbe rielaborare l'intero prompt e tutto l'output precedente. La cache contiene due tensori, chiavi e valori, per ogni strato e ogni testa chiave/valore, con una voce per ciascun token nel contesto.
Come riduce la cache l'attenzione a query raggruppate?
L'attenzione multi-testa standard mantiene una coppia chiave/valore separata per ogni testa di query. L'attenzione a query raggruppate (GQA) consente a più teste di query di condividere una sola testa chiave/valore, e l'attenzione a query multipla porta tutto questo all'estremo di un'unica testa chiave/valore condivisa.
Poiché la dimensione della cache è proporzionale al numero di teste chiave/valore, ridurle, per esempio, da 32 a 8 riduce la cache di quattro volte lasciando intatte le teste di query — e gran parte della qualità del modello.
Perché il contesto lungo costa così tanta memoria?
La cache cresce in modo lineare con la lunghezza del contesto: raddoppiare il numero di token nel contesto raddoppia la cache. Cresce anche in modo lineare con la dimensione del batch, quindi servire molte sequenze a contesto lungo contemporaneamente moltiplica i due fattori.
Con contesti molto lunghi la cache KV può superare la memoria occupata dai pesi del modello stesso, ed è per questo che il serving a contesto lungo si appoggia a tecniche come la quantizzazione della cache, la GQA e l'attenzione paginata.
Avvertenze legali
Questa stima conta solo i tensori di chiavi e valori alla precisione indicata e ignora l'overhead di serving come la frammentazione della memoria, i metadati di paginazione e le riserve del framework. L'utilizzo effettivo su un dato motore di inferenza sarà un po' più alto.
Da provare dopo
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.