Не пересчитываем keys и values прошлого
После prefill на каждом layer сохраняются key/value tensors прошлых tokens. Для нового token вычисляются только новые Q/K/V; query сопоставляется со всеми cached keys, а новый K/V дописывается. Без cache decoder повторял бы projections прошлого prefix на каждом шаге. Cache — activations конкретного request, не model parameters.
Для L layers, H_kv KV-heads, head width d_h, T cached tokens и b bytes на scalar грубый payload:
Множитель2 соответствует K и V. Batch requests, beam copies, allocator blocks, alignment и runtime workspace добавляются сверху. Multi-query/grouped-query attention уменьшает число KV-heads, но queries всё равно могут иметь больше heads. F08, F09.
Что показывает модель. Визуальная модель показывает append-only logical sequence и отдельно physical blocks. PagedAttention мотивирован переменной длиной requests и фрагментацией: logical соседство не требует одного большого непрерывного allocation. Sharing prefix допустим только при идентичных model inputs и корректном управлении lifetime.
Граница применимости. Формула payload не является обещанием фактической VRAM. Quantized cache может уменьшить bytes, но добавляет scales/kernels и ошибку. Eviction или sliding window меняют доступный context. Нельзя переиспользовать cache после изменения weights, adapter, positions или части prefix только потому, что shape совпадает.