KV Cache
Scopri come la KV Cache ottimizza modelli Transformer come gli LLM. Impara come questa tecnica riduce la latenza di inferenza e aumenta l'efficienza per Ultralytics YOLO26.
KV Cache (Key-Value Cache) è una tecnica di ottimizzazione fondamentale utilizzata principalmente nei Large Language Models (LLMs) e in altre architetture basate su Transformer per accelerare la latenza di inferenza e ridurre i costi computazionali. Alla sua base, la KV cache memorizza le matrici Key e Value generate dal meccanismo di attenzione per i token precedenti in una sequenza. Salvando questi calcoli intermedi, il modello evita di ricalcolare gli stati di attenzione per l'intera cronologia della conversazione ogni volta che genera un nuovo token. Questo processo trasforma il flusso di lavoro della generazione di testo da un'operazione a complessità quadratica a una lineare, rendendo fattibili le interazioni in tempo reale con i chatbot e gli agenti AI.
Meccanismo e vantaggi#
In un modello Transformer standard, la generazione della parola successiva richiede di prestare attenzione a tutte le parole precedenti per comprendere il contesto. Senza il caching, il modello dovrebbe ricalcolare le relazioni matematiche per l'intera sequenza a ogni passaggio. La KV cache risolve questo problema agendo come una banca di memoria.
- Miglioramento della velocità: Recuperando chiavi e valori pre-calcolati dalla memoria, il sistema accelera drasticamente il motore di inferenza. Questo è essenziale per le applicazioni che richiedono una bassa latenza, come l'inferenza in tempo reale nei bot del servizio clienti.
- Efficienza delle risorse: Sebbene aumenti l'utilizzo della memoria (VRAM), riduce significativamente il calcolo (FLOP) richiesto per token. Questo compromesso viene spesso gestito tramite tecniche come la quantizzazione del modello o il paging, in modo simile a come i sistemi operativi gestiscono la RAM.
- Contesto esteso: La gestione efficiente della KV cache consente ai modelli di gestire una finestra di contesto più ampia, permettendo loro di elaborare documenti lunghi o mantenere conversazioni coerenti per lunghi periodi.
Applicazioni nel mondo reale#
La KV cache è un componente fondamentale nell'implementazione dell'AI generativa moderna, ma i suoi principi si estendono anche alla computer vision (CV).
-
Chatbot generativi: Servizi come ChatGPT o Claude fanno grande affidamento sul KV caching. Quando un utente fa una domanda di follow-up, il modello non rilegge l'intera cronologia della chat da zero. Al contrario, aggiunge il nuovo input agli stati memorizzati nella cache del turno precedente, consentendo risposte quasi istantanee.
-
Comprensione video: Nei compiti di comprensione video, i modelli elaborano i fotogrammi in sequenza. Analogamente ai token di testo, le caratteristiche visive dei fotogrammi passati possono essere messe in cache per aiutare il modello a tracciare oggetti o riconoscere azioni senza rielaborare l'intera cronologia video. Questo è particolarmente rilevante per il riconoscimento delle azioni, dove il contesto temporale è cruciale.
Gestione efficiente della memoria#
Man mano che i modelli diventano più grandi, la dimensione della KV cache può diventare un collo di bottiglia, consumando gigabyte di memoria GPU. I recenti progressi si concentrano sull'ottimizzazione di questa archiviazione.
- PagedAttention: Ispirato alla memoria virtuale nei sistemi operativi, PagedAttention (introdotto da vLLM) consente di archiviare la KV cache in blocchi di memoria non contigui. Questo riduce la frammentazione e consente batch size maggiori durante il serving del modello.
- Quantizzazione della KV Cache: Per risparmiare spazio, gli sviluppatori applicano spesso la precisione mista o la quantizzazione int8 specificamente ai valori memorizzati nella cache. Questo riduce l'impronta di memoria, consentendo ai dispositivi edge AI con RAM limitata di eseguire modelli potenti.
- Prompt Caching: Una tecnica correlata in cui gli stati KV di un system prompt statico (ad esempio, "Sei un assistente di codifica utile") vengono calcolati una sola volta e riutilizzati in molte sessioni utente diverse. Questa è una funzionalità fondamentale per ottimizzare i flussi di lavoro di prompt engineering su scala.
Distinguere concetti correlati#
È utile differenziare la KV Cache da altri termini di caching e ottimizzazione:
- KV Cache vs. Prompt Caching: La KV cache si riferisce tipicamente alla memoria dinamica, token per token, utilizzata durante un singolo flusso di generazione. Il prompt caching si riferisce specificamente alla memorizzazione dello stato elaborato di un'istruzione di input fissa da riutilizzare su più chiamate di inferenza indipendenti.
- KV Cache vs. Embeddings: Gli embedding sono rappresentazioni vettoriali di dati di input (testo o immagini) che catturano il significato semantico. La KV cache memorizza le attivazioni (chiavi e valori) derivate da questi embedding all'interno dei layer di attenzione, specificamente allo scopo di generare sequenze.
- KV Cache vs. Model Weights: I pesi del modello sono i parametri statici e appresi della rete neurale. La KV cache è costituita da dati dinamici e temporanei generati durante il forward pass di una specifica sequenza di input.
Esempio: Contesto nei modelli di visione#
Sebbene il KV caching sia più famoso nell'NLP, il concetto di mantenimento dello stato si applica ai modelli di visione avanzati. Nell'esempio sottostante, simuliamo l'idea di passare lo stato (contesto) in uno scenario di tracciamento video utilizzando Ultralytics YOLO26. Qui, il tracker mantiene l'identità degli oggetti tra i fotogrammi, in modo concettualmente simile a come una cache mantiene il contesto tra i token.
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")Gli sviluppatori che desiderano gestire dataset e distribuire modelli ottimizzati possono utilizzare la Ultralytics Platform, che semplifica il flusso di lavoro dall'annotazione dei dati all'implementazione del modello efficiente. Per chi è interessato ai meccanismi più profondi dell'attenzione, librerie come PyTorch forniscono i blocchi fondamentali in cui vengono implementati questi meccanismi di caching.






