A. Smyntyna / Code
ENRU

KV-кеш

KV cache

Кратковременная память модели на текущий разговор. Читая ваш промпт, она сохраняет вектор ключа и значения для каждого токена, чтобы не перечитывать их заново ради каждого нового слова. Кеш растёт вместе с длиной контекста: примерно 1–4 ГБ для модели класса 27B на 32 тысячах токенов, и живёт он в оперативке рядом с весами.

Кеш — это та сделка, которая делает генерацию посильной: немного памяти потрачено, зато модель никогда не перечитывает разговор, чтобы написать следующее слово. Он растёт по прямой вместе с числом токенов, и это как раз то слагаемое, которое теряется, когда считают, влезет ли модель, — потому что его нет ни в имени модели, ни в размере загрузки.

Разброс от 1 до 4 ГБ такой широкий потому, что его задаёт схема внимания. Grouped-query attention делит один ключ и значение между несколькими головами и режет кеш в четыре-восемь раз, поэтому двум моделям с одинаковым числом параметров под один и тот же чат может требоваться совершенно разный объём.

И он не подкрадывается к вам посреди разговора. Контекстное окно вы выбираете при загрузке модели, и большинство рантаймов резервирует весь кеш прямо тогда, до первого напечатанного слова. За длинный чат платят в момент загрузки — из-за чего длина контекста и есть та единственная настройка, которая превращает влезающую модель в невлезающую.

Читать дальше