KV cache

forkortelse for Key-Value cache

En KV cache er en hukommelsesstruktur, der gemmer Key- og Value-vektorerne fra tidligere attention-beregninger i en transformer-model for at undgå genberegning under autoregressiv generering.

Kort fortalt

KV cache gemmer de mellemliggende data fra self-attention, så modellen ikke skal genberegne dem for hvert nyt token – det gør tekstgenerering hurtigere.

Kategori
teknik
Niveau
øvet
Udtale
/ˈkeɪˈviː kæʃ/

Betydninger

1
  1. 1

    En teknik i transformer-modeller, hvor Key- og Value-vektorerne fra self-attention-lagene for tidligere tokens gemmes i en cache, så de kan genbruges i efterfølgende generationstrin uden at skulle genberegnes.

    • Implementering af KV cache reducerer inferenstiden markant, da den kvadratiske kompleksitet i attention-længden erstattes af lineær kompleksitet pr. trin.
    • For at minimere hukommelsesforbruget kan KV cachen komprimeres eller evictes efter en vis sekvenslængde.

Hvornår bruges det

KV cache bruges primært under inferens i autoregressive sprogmodeller som GPT-serien. Ved at cache Key- og Value-matricerne for alle tidligere tokens reduceres den beregningsmæssige byrde pr. nyt token betydeligt, især ved lange sekvenser.

Kodeeksempel

class KVCache:
    def __init__(self):
        self.cache = {}  # layer -> (keys, values)
    
    def update(self, layer, keys, values):
        if layer not in self.cache:
            self.cache[layer] = (keys, values)
        else:
            old_k, old_v = self.cache[layer]
            self.cache[layer] = (torch.cat([old_k, keys], dim=2),
                                 torch.cat([old_v, values], dim=2))
    
    def get(self, layer):
        return self.cache.get(layer, (None, None))

En simpel Python-klasse, der illustrerer en KV cache: Cachen gemmer Key- og Value-tensorer for hvert lag og samler dem over tid.

Oprindelse

Udtrykket er dannet af 'Key' og 'Value' fra attention-mekanismen i transformere og 'cache' (en buffer til hurtig genbrug af data).

Kilder

1
  • The Illustrated Transformer – Jay Alammar