KV-кэш
KV-кэш (Key-Value Cache) — механизм ускорения инференса языковых моделей, при котором промежуточные матрицы ключей и значений для уже обработанных токенов сохраняются в памяти GPU и не пересчитываются при генерации следующих токенов, ускоряя работу в десятки раз.
KV-кэш — внутренний механизм ускорения авторегрессивного инференса трансформерных моделей. При генерации текста модель последовательно предсказывает по одному токену; для вычисления каждого нового токена механизм внимания обращается к матрицам ключей (K) и значений (V), рассчитанным для всех предшествующих токенов. Без кэша эти матрицы пришлось бы пересчитывать заново при каждом шаге генерации.
При обработке входного промпта (prefill-фаза) модель вычисляет и сохраняет K и V для каждого слоя каждого трансформерного блока. На этапе генерации (decode-фаза) для нового токена вычисляются лишь его собственные K/V, которые добавляются к кэшу; внимание применяется к уже сохранённым значениям. Это снижает вычислительную нагрузку с O(n²) до O(n) на каждом шаге и даёт ускорение в десятки раз по сравнению с наивной реализацией.
Главный компромисс KV-кэша — потребление памяти GPU. Кэш для модели 70B параметров с контекстом 32 000 токенов может требовать от 30 до 80 ГБ VRAM в зависимости от типа данных и числа слоёв — сопоставимо с весами самой модели или больше. Именно поэтому развёртывание крупных LLM требует значительного объёма GPU-памяти даже при умеренной вычислительной нагрузке.
К 2026 году для управления KV-кэшем применяются специализированные техники. PagedAttention (фреймворк vLLM) разбивает кэш на страницы и динамически перераспределяет их между параллельными запросами по аналогии со страничной памятью ОС. Также используются квантизация KV-кэша (перевод с fp16 в int8/int4) и политики вытеснения (eviction), удаляющие наименее значимые токены при переполнении кэша.