alterna ai
ALTERNA AI / ГЛАВА 17 · 01

17.1 Первый запуск обрабатывает введённую фразу

Веса уже подобраны; теперь держим их фиксированными.

До первого выбора нужно рассчитать представления всех уже известных токенов. Этот запуск называется предварительным заполнением — prefill.

Первый запуск обрабатывает префикс. Каждый последующий добавляет одну позицию; K/V прошлых позиций можно сохранять. Выборка и сжатое хранение решают разные задачи.

Используем фиксированные веса

Один forward создаёт состояния всех позиций

Inference decoder состоит из двух режимов. На prefill вся prompt-последовательность проходит layers параллельно по token dimension; causal attention позиции i использует keys 0..i. Для length n существует n(n+1)/2 разрешённых query-key pairs на head. Это не полный FLOP count: projections, FFN, normalization и memory traffic считаются отдельно.

Nscoresprefill=∑i=1ni=n(n+1)2,Nscoresnext=n+1.N_{scores}^{prefill}=\sum_{i=1}^{n}i=\frac{n(n+1)}2, \qquad N_{scores}^{next}=n+1.

Prefill обычно лучше насыщает accelerator крупными matrix multiplications, тогда как decode добавляет по одной позиции и чаще ограничен чтением weights/cache. FlashAttention меняет IO-план точного attention и не обязан материализовать всю score matrix в HBM; математический результат при одинаковой точности остаётся тем же. F07, F08.

Что показывает модель. Матрица prefill раскрывает нижний треугольник, после чего decode добавляет одну новую query-строку. Prompt tokens не генерируются заново: модель вычисляет их hidden states и cache. Метрики prefill удобно выражать TTFT и input tokens/s, а decode — time per output token и output tokens/s.

Граница применимости. Формула pairs не учитывает grouped/multi-query attention, padding, packed requests, kernels и parallelism. Более длинный context увеличивает не только arithmetic, но и cache/transfer pressure. Название «prefill параллельный» не означает нулевую зависимость между layers или бесконечное ускорение.

prompt_len_17a=4
prefill_pairs_17a=sum(range(1,prompt_len_17a+1))
next_decode_pairs_17a=prompt_len_17a+1
assert prefill_pairs_17a==10 and next_decode_pairs_17a==5

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Prefill создаёт hidden states и K/V для всех prompt positions при фиксированных weights.

Следующий запуск использует сохранённое. Как этот вопрос продолжает полученный результат?

Python-примеры главы 17 Академическая база →