Инференс и оптимизация
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
- GQA — уменьшение количества KV-heads (4-8× меньше)
- PagedAttention — виртуальная память для KV-cache (vLLM)
- Квантизация KV-cache — INT8/FP8 (2× сжатие)
- Sliding Window — ограничение кэша последними N токенами
- Prefix Caching — переиспользование кэша для общих промптов
Связанные термины
Используется в
Необходим для
Улучшается