Что такое prefill и decode стадии в LLM inference
Что такое prefill и decode стадии при генерации LLM и почему их важно различать при оптимизации inference?
Короткий ответ
Prefill обрабатывает весь prompt и заполняет KV cache; decode генерирует новые токены по одному, переиспользуя KV cache. Prefill обычно compute-heavy, decode часто memory-bandwidth/latency sensitive.
Полный разбор
Prefill - это первый проход по входному prompt. Модель обрабатывает все prompt tokens, считает hidden states и складывает K/V для каждого слоя в KV cache. Эта стадия зависит от длины входного контекста и хорошо параллелится по токенам.
Decode - это autoregressive генерация следующих токенов. На каждом шаге добавляется один новый токен, query текущего токена attends к уже сохраненным K/V из cache, затем выбирается следующий token. Decode плохо параллелится по time dimension и часто упирается в memory bandwidth и scheduler.
Разделение важно для оптимизации: long prompt бьет по TTFT через prefill, long generation бьет по tokens/sec через decode. Continuous batching должен уметь смешивать запросы в разных стадиях.
Теория
KV cache связывает prefill и decode: expensive K/V для прошлого контекста считаются один раз, а затем используются на каждом decode-step.
Типичные ошибки
- Считать, что вся генерация одинаково обрабатывает весь контекст заново.
- Не связать prefill с TTFT.
- Не связать decode с autoregressive one-token-at-a-time loop.
Как отвечать на собеседовании
- Используй термины TTFT и tokens/sec.
- Скажи, что prefill parallel по prompt tokens, decode sequential по generated tokens.