Суть
Без кэша на каждом новом токене сеть пересчитывала бы K/V для всей последовательности заново. С кэшем — считаем K/V только для нового токена, а K/V прошлых берём из памяти.
Зачем это нужно
Генерация авторегрессивна (токен за токеном, см. Sampling Parameters); без KV-cache она была бы квадратично дорогой. Кэш переводит это в линейную работу на шаг — но платой становится память: VRAM при инференсе = веса модели + KV-cache.
Как работает
- Causal attention (Attention) гарантирует, что токен N зависит только от 0..N → K/V прошлых неизменны → кэшируемы.
- Память KV-cache растёт линейно с длиной контекста (и с числом слоёв/голов) — поэтому длинный контекст «дорогой» не только по compute, но и по VRAM (см. Context Window).
- GQA (Grouped Query Attention) уменьшает KV-cache в несколько раз (например, ×4), разделяя K/V-головы между группами Q-голов.
- На практике это определяет, сколько контекста влезет в локальную карту (см. Local LLM Deployment).
Связано с
- Attention — кэшируются именно K/V из attention; GQA уменьшает кэш
- Context Window — длина контекста = линейный рост KV-cache в памяти
- Local LLM Deployment — VRAM = веса + KV-cache, лимит локального инференса
Открытые вопросы
- paged attention / vLLM — как управляют KV-cache эффективно
- квантизация KV-cache — что теряем по качеству