Инференс и оптимизация 19 просмотров

KV-Cache

Key-Value Cache

KV-Cache — механизм кэширования ключей и значений (K, V) из предыдущих токенов при авторегрессивной генерации. Избавляет от повторных вычислений, ускоряя генерацию, но потребляет значительную VRAM.

Что такое KV-Cache

При генерации текста LLM (авторегрессивный режим) каждый новый токен требует attention ко всем предыдущим токенам. Без кэширования вычисление K и V для всех предыдущих токенов повторяется на каждом шаге.

KV-Cache сохраняет K и V предыдущих токенов, вычисляя на каждом шаге только K и V нового токена.

Без кэша vs с кэшем

Без KV-Cache (n токенов, L слоёв):
Шаг 1: вычислить K,V для 1 токена × L слоёв
Шаг 2: вычислить K,V для 2 токенов × L слоёв
...
Шаг n: вычислить K,V для n токенов × L слоёв
Итого: O(n² × L) вычислений

С KV-Cache:
Шаг 1: вычислить K,V для 1 токена × L слоёв → сохранить
Шаг 2: вычислить K,V для 1 нового токена → добавить в кэш
...
Шаг n: вычислить K,V для 1 нового токена → добавить в кэш
Итого: O(n × L) вычислений

Расчёт размера KV-Cache

KV-Cache = 2 × n_layers × n_kv_heads × d_head × seq_len × bytes

LLaMA 3 8B (32 слоя, 8 KV-heads, d_head=128, BF16):
= 2 × 32 × 8 × 128 × seq_len × 2 байта
= 131 KB на токен

При контексте 8K: 131 KB × 8192 = 1.05 GB на один запрос
При 100 параллельных запросах: 105 GB!

Оптимизации KV-Cache

  1. GQA — уменьшение количества KV-heads (4-8× меньше)
  2. PagedAttention — виртуальная память для KV-cache (vLLM)
  3. Квантизация KV-cache — INT8/FP8 (2× сжатие)
  4. Sliding Window — ограничение кэша последними N токенами
  5. Prefix Caching — переиспользование кэша для общих промптов

Связанные термины

Используется в
Улучшается

Попробуйте на практике

Арендуйте GPU и запустите ML-модели в Intelion Cloud

Начать работу