Как устроена autoregressive generation и зачем KV cache
Как LLM генерирует ответ токен за токеном и какую роль в этом играет KV cache?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Autoregressive модель предсказывает следующий токен по всем предыдущим. KV cache хранит key/value tensors прошлых токенов, чтобы на каждом новом шаге не пересчитывать attention для всего префикса заново.
Полный разбор
В autoregressive generation вероятность ответа раскладывается как произведение вероятностей следующего токена при уже известном префиксе. На шаге t модель видит prompt и ранее сгенерированные токены, строит распределение следующего токена, выбирает его и переходит к шагу t+1.
Без кеша каждый новый шаг заново прогонял бы весь префикс через attention. KV cache сохраняет key/value представления прошлых токенов в каждом attention layer. Для нового токена достаточно посчитать query/key/value для него и attention к уже сохраненным key/value.
Trade-off: KV cache сильно ускоряет decoding, но занимает память пропорционально длине контекста, batch size, числу слоев и hidden size. Поэтому длинные контексты и много параллельных запросов быстро упираются в GPU memory.
Теория
KV cache — одна из главных причин, почему serving LLM является memory-bound задачей. Он не меняет качество ответа, а оптимизирует повторное использование attention state.
Типичные ошибки
- Думать, что KV cache хранит сами текстовые токены, а не tensors attention state.
- Не замечать memory trade-off при длинном контексте.
- Смешивать prefill prompt и decode phase.
Как отвечать на собеседовании
- Раздели prefill и decoding: prompt считается пачкой, дальше идут токены по одному.
- Сразу назови главный trade-off: faster decoding vs GPU memory.