Kv cache in llm inferentie
Werking van de KV-cache
Tijdens de inferentie van een transformer-model wordt voor elk token een query-, key- en value-vector berekend. Bij het genereren van tekst wordt elk nieuw token toegevoegd aan de reeds gegenereerde reeks. Zonder optimalisatie zou het model voor elk nieuw token alle voorgaande tokens opnieuw moeten verwerken, wat rekenintensief is. De KV-cache lost dit op door de key- en value-matrices van eerdere tokens op te slaan. Hierdoor hoeft het model bij het genereren van een nieuw token alleen de query voor dat token te berekenen en de opgeslagen keys en values te gebruiken. Dit reduceert de rekentijd aanzienlijk, vooral bij lange sequenties. De KV-cache is een standaardtechniek in vrijwel alle LLM-implementaties. Het geheugengebruik van de KV-cache groeit lineair met de sequentielengte en het aantal lagen en attention-heads. Voor zeer lange contexten kan de cache groot worden en geheugenproblemen veroorzaken. Daarom zijn er technieken zoals multi-query attention en grouped-query attention ontwikkeld om de cache te verkleinen.
Optimalisaties en uitdagingen
Het beheren van de KV-cache is cruciaal voor efficiënte LLM-inferentie. Bij batchverwerking moeten caches voor meerdere sequenties worden opgeslagen, wat de geheugendruk verhoogt. PagedAttention, gebruikt in systemen zoals vLLM, beheert de cache in pagina's en vermindert fragmentatie. Ook het delen van caches tussen vergelijkbare prompts kan geheugen besparen. Bij zeer lange contexten kan de cache het beschikbare GPU-geheugen overschrijden. Technieken zoals cache quantization en het verwijderen van minder belangrijke tokens (eviction) kunnen helpen. Een uitdaging is dat de KV-cache niet goed werkt bij bepaalde attention-varianten, zoals sliding window attention, waar alleen een deel van de cache nodig is. Desondanks is de KV-cache een fundamentele optimalisatie die de interactieve prestaties van LLM's mogelijk maakt. Zonder deze techniek zou het genereren van lange teksten te langzaam en te duur zijn. Het begrijpen van de KV-cache is belangrijk voor iedereen die LLM's implementeert of optimaliseert.