Инференс: авторегрессия токен за токеном
Обучение позади — теперь модель работает. Разберём, что буквально происходит на каждом шаге, когда ChatGPT печатает ответ.
Инференс (inference) — применение обученной модели для генерации: авторегрессивный цикл, где ответ строится по одному токену.
Цикл генерации
Генерация ответа — это повторение одного и того же шага:
- Подать текущую последовательность токенов (промпт + уже сгенерированное) в модель.
- Получить распределение вероятностей следующего токена.
- Выбрать один токен (greedy или сэмплированием — следующий урок).
- Добавить его к последовательности.
- Вернуться к шагу 1, пока не появится токен конца или не достигнут лимит.
Именно поэтому в интерфейсе ответ «печатается» по словам: вы видите токены ровно в тот момент, когда модель их порождает. Это не анимация ради красоты — это и есть реальный темп авторегрессии.
Каждый токен — полный проход модели
Ключевая мысль: чтобы выдать один токен, модель прогоняет всю текущую последовательность через все свои слои. Для следующего токена — снова полный проход с уже более длинной последовательностью. Отсюда два важных следствия:
- Длинный ответ генерируется дольше — токенов больше, проходов больше.
- Генерация по своей природе последовательна: следующий токен нельзя посчитать, не получив предыдущий. Это фундаментально отличает инференс от обучения, где весь текст обрабатывается параллельно.
KV-кэш: чтобы не считать заново
Наивно при каждом новом токене пришлось бы пересчитывать внимание для всей последовательности с нуля — расточительно. На помощь приходит KV-кэш: ключи и значения (key/value) уже обработанных токенов сохраняют и переиспользуют. Для нового токена считают только его собственные Q/K/V, а K/V прошлых токенов берут из кэша. Это резко ускоряет генерацию, но требует памяти, растущей с длиной контекста, — ещё одна причина, почему длинные диалоги «тяжелее».
Префилл и декодирование
Инференс делят на две фазы:
| Фаза | Что происходит |
| Префилл (prefill) | весь промпт обрабатывается разом, заполняется KV-кэш |
| Декодирование (decode) | ответ генерируется по одному токену, опираясь на кэш |
Префилл быстрый (всё параллельно), а вот декодирование — последовательное и обычно определяет, сколько вы ждёте длинный ответ.
Почему генерация дороже, чем кажется
Каждый токен ответа — это работа всей многомиллиардной сети. Поэтому стоимость и скорость инференса считают в токенах, длинные ответы дороже коротких, а оптимизация скорости генерации (KV-кэш, квантизация и пр.) — большая инженерная тема.
Итог
- Инференс — авторегрессивный цикл: предсказать токен, добавить, повторить.
- Каждый токен требует полного прохода модели, поэтому генерация последовательна и длинные ответы медленнее.
- KV-кэш переиспользует ключи/значения прошлых токенов, ускоряя генерацию ценой памяти.
- Инференс делится на быстрый префилл промпта и последовательное декодирование ответа.