Как Kimi 3 обрабатывает 1 000 000 токенов без роста памяти
В основе Kimi 3 лежит новый механизм под названием delta attention, который не хранит постоянно растущий KV-кеш. Именно поэтому модель может работать с контекстом в миллион токенов без взрывного роста потребления памяти.
Но прежде чем разбираться в delta attention, нужно понять, как работает обычный attention.
По сути, это поиск по таблице. Каждый токен хранит:
- key - что-то вроде адреса; - value - содержимое по этому адресу.
Чтобы сформировать выход, токен отправляет query, сравнивает его со всеми ключами в последовательности и получает смесь значений, ключи которых подошли лучше всего. Именно это показано в верхней части схемы.
Обычный attention хранит каждую такую пару key-value в виде списка - по одной записи на токен. Этот список и называется KV-кешем.
Он растёт вместе с длиной последовательности, поэтому каждому новому токену приходится просматривать весь кеш, чтобы сформировать результат. Если удвоить длину контекста, удвоятся и объём хранения, и количество операций поиска. Отсюда берутся квадратичная стоимость и быстро растущее потребление памяти.
Delta attention сохраняет сам механизм поиска, но избавляется от списка.
Вся история сжимается в одну матрицу фиксированного размера, которая продолжает работать как таблица поиска. Передаёте ей ключ и она возвращает значение, которое прошлый контекст связал с этим ключом. Неважно, тысяча токенов в контексте или миллион - размер матрицы остаётся прежним.
Самая сложная часть это запись новых данных. Нельзя просто добавить новую пару в матрицу фиксированного размера (новые записи начнут накладываться на старые и смешиваться с ними). Delta rule решает эту проблему в два шага для каждого токена. Они показаны в нижней части схемы.
-> Сначала чтение, затем запись. Матрице передаётся ключ нового токена, после чего проверяется, какое значение память уже возвращает по этому адресу — то есть её текущая оценка.
-> Записывается не само значение, а разница. Текущая оценка сравнивается со значением, которое нужно сохранить. В матрицу записывается только расхождение между ними. Это расхождение и называется delta. Оно корректирует старую ассоциацию, а не накладывает поверх неё новую.
Матрица также позволяет старым записям постепенно затухать. Благодаря этому память фиксированного размера может продолжать поглощать длинную последовательность, не переполняясь.
Именно в этом заключается разница, показанная на схеме.
Обычный attention запоминает всё, сохраняя каждую запись, и платит за это квадратичной стоимостью повторного сканирования.
Delta attention запоминает, постоянно перезаписывая одну матрицу, и работает с линейной стоимостью. Но компромисс здесь реальный.
Сжатая матрица не может хранить каждый токен абсолютно точно, поэтому восстановление конкретного токена становится приблизительным. Именно поэтому в реальных моделях обычно комбинируют оба подхода: несколько слоёв full attention оставляют для точного поиска, а остальные работают в линейном режиме.
Вся разница сводится к одному глаголу: Обычный attention добавляет. Delta attention корректирует.
Подробнее: https://kimi.com/blog/kimi-k3
===
♻ Сделайте репост, чтобы помочь автору с охватами 👤 Буду очень признателен если подпишитесь и включите уведомления
===