Yolo Vision Shenzhen
Shenzhen
Iscriviti ora
Glossario

Cache KV

Scopri come KV Cache ottimizza i modelli Transformer come gli LLM. Scopri come questa tecnica riduce la latenza di inferenza e aumenta l'efficienza per Ultralytics .

La cache KV (Key-Value Cache) è una tecnica di ottimizzazione fondamentale utilizzata principalmente nei modelli linguistici di grandi dimensioni (LLM) e altre architetture basate su Transformer per accelerare la latenza dell'inferenza e ridurre i costi computazionali. Fondamentalmente, la cache KV memorizza le matrici chiave e valore 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 la flusso di lavoro della generazione di testo da un'operazione di complessità quadratica a una lineare, rendendo le interazioni in tempo reale con chatbot e agenti AI .

Meccanismo e vantaggi

In un trasformatore standard Transformer , per generare la parola successiva è necessario prestare attenzione a tutte le parole precedenti per comprenderne il contesto. Senza la cache, il modello dovrebbe ricalcolare le relazioni matematiche per l'intera sequenza ad ogni passo. La cache KV risolve questo problema fungendo da banca dati.

  • Miglioramento della velocità: recuperando chiavi e valori precalcolati dalla memoria, il sistema accelera notevolmente il motore di inferenza. Ciò è 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 la potenza di calcolo (FLOP) richiesta per ogni token. Questo compromesso viene spesso gestito attraverso tecniche come la quantizzazione del modello o il paging, simili a quelle utilizzate dai sistemi operativi per gestire la RAM.
  • Contesto esteso: una gestione efficiente della cache KV consente ai modelli di gestire un contesto più ampio finestra di contesto, consentendo loro di elaborare documenti lunghi o mantenere conversazioni coerenti per periodi prolungati.

Applicazioni nel mondo reale

La cache KV è un componente fondamentale nell'implementazione della moderna IA generativa, ma i suoi principi si estendono anche alla visione artificiale (CV).

  1. Chatbot generativi: servizi come ChatGPT o Claude si basano fortemente sul caching KV. Quando un utente pone una domanda di follow-up, il modello non rilegge l'intera cronologia della chat da zero. Invece, aggiunge il nuovo input agli stati memorizzati nella cache del turno precedente, consentendo risposte quasi istantanee.
  2. Comprensione dei video: attività di comprensione dei video , i modelli elaborano i fotogrammi in modo sequenziale. Analogamente ai token di testo, le caratteristiche visive dei fotogrammi precedenti possono essere memorizzate nella cache per aiutare il modello track o riconoscere le azioni senza rielaborare l'intera cronologia video. Ciò è particolarmente rilevante per il riconoscimento delle azioni in cui il contesto temporale è fondamentale.

Gestione efficiente della memoria

Man mano che i modelli diventano più grandi, la dimensione della cache KV può diventare un collo di bottiglia, consumando gigabyte di GPU . I recenti progressi si concentrano sull'ottimizzazione di questa memoria.

  • PagedAttention: Ispirato alla memoria virtuale nei sistemi operativi, PagedAttention (introdotto da vLLM) consente alla cache KV di essere memorizzata in blocchi di memoria non contigui. Ciò riduce la frammentazione e consente dimensioni di batch più elevate durante il servizio del modello.
  • Quantizzazione della cache KV: per risparmiare spazio, gli sviluppatori spesso applicano quantizzazione a precisione mista o int8 specificamente ai valori memorizzati nella cache. Ciò riduce l'ingombro di memoria, consentendo all' ai dispositivi edge AI con RAM limitata di eseguire modelli capaci.
  • Prompt Caching: una tecnica correlata in cui gli stati KV di un prompt di sistema statico (ad esempio, "Sei un utile assistente di codifica") vengono calcolati una sola volta e riutilizzati in molte sessioni utente diverse. Si tratta di una funzionalità fondamentale per l'ottimizzazione dell' ingegneria dei prompt su larga scala .

Distinguere i concetti correlati

È utile distinguere la cache KV dagli altri termini relativi alla cache e all'ottimizzazione:

  • Cache KV vs. Caching immediato: la cache KV si riferisce in genere alla memoria dinamica, token per token, utilizzata durante un singolo flusso di generazione. Il caching immediato si riferisce in particolare alla memorizzazione dello stato elaborato di un'istruzione di input fissa da riutilizzare in più chiamate di inferenza indipendenti.
  • Cache KV vs. Embedding: Gli embedding sono rappresentazioni vettoriali dei dati di input (testo o immagini) che catturano il significato semantico. La cache KV memorizza le attivazioni (chiavi e valori) derivate da questi embedding all'interno dei livelli di attenzione, in particolare allo scopo di generare sequenze.
  • Cache KV vs. Pesi del modello: I pesi del modello sono i parametri statici appresi della rete neurale. La cache KV è costituita da dati dinamici e temporanei generati durante il passaggio in avanti di una sequenza di input specifica.

Esempio: contesto nei modelli di visione

Sebbene il caching KV sia più famoso nell'NLP, il concetto di mantenimento dello stato si applica ai modelli di visione avanzati. Nell' esempio seguente, simuliamo l'idea di passare lo stato (contesto) in uno scenario di tracciamento video utilizzando Ultralytics . Qui, il tracker mantiene l'identità degli oggetti attraverso i fotogrammi, concettualmente simile a come una cache mantiene il contesto attraverso 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 set di dati e implementare modelli ottimizzati possono utilizzare la Ultralytics , che semplifica il processo dall'annotazione dei dati all'implementazione efficiente dei modelli implementazione dei modelli. Per chi è interessato ai meccanismi più approfonditi dell'attenzione, librerie come PyTorch forniscono i blocchi fondamentali in cui sono implementati questi meccanismi di caching.

Unitevi alla comunità di Ultralytics

Entra nel futuro dell'AI. Connettiti, collabora e cresci con innovatori globali

Iscriviti ora