KV-cache: не пересчитывать прошлое
KV-cache хранит ключи и значения уже обработанных токенов, чтобы не считать их заново при каждом новом токене.
Зачем это нужно
При обучении все позиции считаются параллельно. При генерации токены появляются по одному, и без кэша модель пересчитывала бы ключи и значения всех предыдущих токенов на каждом шаге. По словам источника, это бессмысленная трата вычислений.
Как это работает
Когда появляется новый токен, для него считаются запрос, ключ и значение. Ключи и значения предыдущих токенов уже вычислялись на прошлых шагах, поэтому их сохраняют в памяти и берут оттуда. Для вычисления внимания нужен только запрос нового токена, а ключи и значения берутся из кэша.
Пример
Для четвёртого токена ключи и значения первых трёх токенов берутся из кэша, а новый запрос q_4 сравнивается с ними. Источник показывает, что в этом случае кэшируется всё, кроме текущих векторов.
Что запомнить
- Обучение параллельное, генерация последовательная.
- KV-cache хранит ключи и значения, чтобы не пересчитывать их.
- Кэш экономит вычисления, но занимает память.
Где читать дальше
- SLP3, гл. 7 «Transformers and Pretraining», раздел 7.8