I ricercatori di Nvidia hanno sviluppato una nuova tecnica che riduce significativamente la quantità di memoria necessaria ai modelli linguistici di grandi dimensioni per tenere traccia della cronologia delle conversazioni fino a 20 volte, senza modificare il modello stesso. Metodo, Si chiama KV Cache Transformation Coding (KVTC)Applica idee provenienti da formati di compressione multimediale come JPEG per ridurre la cache chiave/valore dietro i sistemi di intelligenza artificiale multi-round, ridurre le richieste di memoria della GPU e accelerare i tempi di prima moneta fino a 8 volte.

Per le applicazioni IA aziendali che si basano su agenti e contesti lunghi, ciò significa costi di memoria GPU ridotti, riutilizzo più rapido e riduzione fino a 8 volte della latenza eliminando la necessità di ricalcolare i valori della cache KV perduti.

La fornitura di modelli linguistici di grandi dimensioni su larga scala richiede la gestione di grandi quantità di dati, in particolare per conversazioni a più turni e lunghe sessioni di codifica. Ogni volta che un utente aggiunge un messaggio, il sistema fa affidamento sulla memoria archiviata per impedire che l’intera cronologia delle conversazioni venga ricalcolata da zero.

Tuttavia, questa occupazione di memoria sta crescendo rapidamente, creando un grave collo di bottiglia in termini di latenza e costi di infrastruttura.

Perché la cache KV sta diventando un collo di bottiglia su larga scala?

Modelli linguistici di grandi dimensioni per supportare applicazioni AI versatili come assistenti di codifica o applicazioni di chat cache chiave/valore (KV).. Questa cache memorizza le rappresentazioni numeriche segrete di ciascun token precedente in una conversazione. Poiché il modello ricorda la conversazione passata, l’utente non deve rielaborare inutilmente l’intera cronologia della chat ogni volta che invia un nuovo messaggio.

Ma per le applicazioni AI con attività di contesto lunghe, questa cache può facilmente raggiungere più gigabyte. Man mano che i modelli si ridimensionano e creano catene di ragionamento sempre più lunghe, la cache KV diventa un collo di bottiglia critico in termini di throughput e latenza del sistema.

Ciò rappresenta una sfida formidabile per gli ambienti di produzione. Poiché gli LLM sono fortemente vincolati alla memoria durante l’inferenza, servire più utenti contemporaneamente è vincolato dall’esaurimento della memoria della GPU piuttosto che dal tempo di calcolo. “Una gestione efficace della cache KV diventa fondamentale poiché le cache inattive devono essere rapidamente evacuate dalla memoria della GPU per accogliere altri utenti e ripristinate rapidamente per le conversazioni in corso”, ha dichiarato a VentureBeat Adrian Lancucki, Senior Deep Learning Engineer di Nvidia. “Questi costi infrastrutturali si riflettono ora nei prezzi commerciali (ad esempio come ‘caching veloce’) con costi aggiuntivi per il caching.”

Anche le soluzioni di compromesso, come lo scaricamento della cache su dispositivi di archiviazione di livello inferiore come la memoria della CPU o gli SSD, impongono un notevole sovraccarico di trasferimento dei dati che può saturare la larghezza di banda della rete e creare colli di bottiglia.

Una soluzione comune è comprimere la cache KV in modo che occupi meno memoria. Tuttavia, le soluzioni esistenti sono spesso insufficienti per risolvere il problema in modo olistico. Gli strumenti progettati per comprimere le cache per il trasferimento in rete raggiungono rapporti di compressione bassi. Altri metodi di compressione richiedono calcoli al volo ad alto consumo di risorse per ciascuna richiesta dell’utente. A proposito, tecniche popolari come quantizzazione oppure la sparsificazione può causare diminuzioni di latenza e precisione o richiedere modifiche permanenti ai pesi del modello, limitandone la praticità.

Gli approcci attuali “raramente sfruttano la forte struttura di basso ordine dei tensori KV”, osservano i ricercatori di Nvidia nel loro articolo. Ciò significa che, nonostante il numero elevato e le dimensioni dei gigabyte, le informazioni sottostanti effettive nella cache KV sono altamente correlate e possono essere rappresentate accuratamente utilizzando un numero molto inferiore di variabili. L’utilizzo di questa funzionalità è ciò su cui si concentra KVTC.

Suggerimenti per prendere in prestito dai codec multimediali

Ad alto livello, KVTC combatte il collo di bottiglia della memoria AI prendendo in prestito un concetto collaudato dai media classici: trasforma la codifica, la metodologia che supporta formati di compressione di immagini e video familiari come JPEG. Il framework riduce l’ingombro della cache attraverso un processo rapido a più passaggi eseguito tra le fasi di inferenza per evitare di rallentare la generazione effettiva dei token. “Questo approccio di” compressione dei media “è vantaggioso per l’implementazione aziendale in quanto non è invasivo: non richiede modifiche ai pesi del modello o al codice e opera vicino al livello di trasporto”, ha affermato Lancucki.

Utilizzato per la prima volta da KVTC analisi delle componenti principali (PCA) per allineare le caratteristiche dei dati della cache KV in base alla loro importanza. La PCA è una tecnica statistica spesso utilizzato nell’apprendimento automatico Rendere i modelli più efficienti isolando le caratteristiche più critiche dei dati ed eliminando le ridondanze. Questa parte del processo viene eseguita una sola volta per ciascun modello, durante la fase di calibrazione iniziale. Poiché la matrice di allineamento PCA viene calcolata e riutilizzata offline, non rallenta il processo di compressione al momento dell’inferenza per le richieste dei singoli utenti.

Il sistema utilizza quindi un algoritmo di programmazione dinamica per stabilire automaticamente la quantità di memoria effettivamente richiesta da ciascuna dimensione di dati. I componenti principali più critici ricevono un’elevata precisione, mentre successivamente i componenti meno importanti ricevono meno bit o vengono assegnati a zero bit e vengono eliminati del tutto.

Infine, la pipeline prende questi dati ottimizzati e quantizzati, li impacchetta in un array di byte e li esegue attraverso un codificatore entropico chiamato DEFLATE. Poiché questo passaggio viene eseguito in parallelo direttamente sulla GPU utilizzando la libreria nvCOMP di Nvidia, funziona a velocità molto elevate.

Per decomprimere i dati al ritorno dell’utente, KVTC esegue i calcoli al contrario. Per accelerare il processo, esegue pesanti operazioni di decompressione in parti, strato per strato. Ciò consente al modello AI di iniziare anticipatamente a calcolare la risposta successiva, utilizzando il primo frammento compresso mentre i frammenti successivi vengono decompressi in background.

Compressione 20x, penalità di precisione inferiore all’1%.

I ricercatori di Nvidia hanno testato KVTC su una varietà di modelli che vanno da 1.5B a 70B, tra cui la famiglia Llama 3, Mistral NeMo e i modelli Qwen 2.5 distillati con il ragionamento pesante R1. Hanno valutato questi modelli in una varietà di benchmark, comprese sfide complesse di matematica e codifica come MATH-500 e LiveCodeBench, nonché attività intensive di recupero di contesti lunghi come “Needle in the Haystack” e recupero di valori-chiave.

Hanno confrontato KVTC con diverse linee di base popolari: metodi di token drain (ad esempio, H2O e TOVA), tecniche di quantizzazione pesante (ad esempio, KIVI e GEAR) e xKV ( scomposizione in valori singolari).

Con un rapporto di compressione effettivo di 20x, KVTC ha mantenuto costantemente le prestazioni nella maggior parte delle attività, con una perdita di precisione di un punto percentuale rispetto ai modelli vanilla originali non compressi. Quando i ricercatori hanno spinto il sistema ai limiti estremi, fino alla compressione 32x e 64x, KVTC ha resistito abbastanza bene.

Al contrario, linee di base popolari come KIVI e GEAR hanno iniziato a subire una notevole perdita di precisione con una compressione di soli 5x, soprattutto su attività a lungo contesto. I metodi standard di eliminazione della cache come H2O e TOVA si sono rivelati del tutto inadeguati come compressori generali, rompendosi effettivamente quando era richiesto il recupero di informazioni contestuali profonde.

Prendi in considerazione l’implementazione di un modello di ragionamento più piccolo come Qwen 2.5 1.5B per l’assistente di codifica. Normalmente questo modello richiede 29 KB di memoria per ciascun token. Utilizzando un’impostazione di compressione 8x, KVTC ha ridotto questo ingombro a circa 3,2 KB per token, con un trascurabile calo dello 0,3% nella precisione della codifica.

Per gli architetti aziendali, decidere quando applicare questa tecnica dipende in gran parte dal caso d’uso. “KVTC è ottimizzato per scenari a lungo contesto e multi-turno”, ha affermato Lancucki. Ha notato gli assistenti di codifica, i flussi di lavoro di ragionamento mediato iterativo (specialmente in attesa di output di agenti ad alta latenza) e il RAG iterativo come applicazioni ideali. “Ma gli utenti dovrebbero evitare KVTC per conversazioni brevi”, ha aggiunto, perché la finestra mobile non compressa dei token più recenti domina il thread per interazioni più brevi, impedendo tassi di compressione significativi.

KVTC è altamente portabile e un’implementazione ottimizzata sarà presto integrata nel KV Block Manager (KVBM) all’interno del framework Dynamo, rendendolo compatibile con i più diffusi motori di inferenza open source come vLLM.

Ancora più importante dal punto di vista dell’esperienza utente, KVTC riduce significativamente il tempo al primo token (TTFT), il ritardo tra l’invio di un prompt e il modello che genera il primo token di risposta. Alla richiesta di 8.000 monete, il modello vanilla 12B in esecuzione su una GPU Nvidia H100 impiega circa 3 secondi per ricalcolare la cronologia da zero. Nel frattempo, un sistema può decomprimere la cache KVTC in soli 380 millisecondi, riducendo il tempo necessario per generare il primo token fino a 8 volte.

KVTC è teoricamente compatibile con i metodi di sfratto dei token poiché non cambia il modo in cui il modello si prende cura dei token. Diluizione dinamica della memoria (DMS) è un’altra tecnica di compressione avanzata. DMS è un metodo di estrazione autoregressiva dei token che ottimizza la memoria identificando ed eliminando completamente i token meno importanti dalla finestra di contesto.

“In linea di principio, KVTC è complementare al DMS”, ha affermato Lancucki. “DMS estrae i singoli token lungo l’asse del tempo, mentre KVTC comprime i dati in ciascuna posizione separatamente.” Tuttavia, ha avvertito che, anche se prendono di mira dimensioni diverse, “resta da testare quali rapporti di compressione possono essere raggiunti con KVTC in cache sparse”.

Poiché i modelli continuano a scalare in modo nativo fino a finestre di contesto di milioni di token, la necessità di una solida gestione della memoria non potrà che aumentare. “Date le somiglianze strutturali e i modelli ricorrenti nelle cache KV attraverso varie architetture di modelli, è probabile che emerga uno strato di compressione dedicato e standardizzato”, ha affermato Lancucki. L’infrastruttura AI alimentata dai progressi hardware potrebbe presto trattare la compressione della cache KV come un livello invisibile e standardizzato, proprio come fa oggi la compressione video nello streaming.

Collegamento alla fonte