Почему LLM тормозит: разбираем инференс по косточкам

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



Каждый вызов generate() запускает на GPU две фазы с совершенно разным характером. Prefill обрабатывает ваш промпт и упирается в вычисления. Decode генерирует токены по одному и упирается в память. Почти любая оптимизация бьёт либо по одной фазе, либо по другой, поэтому сначала важно понять, какая из них стала узким местом.

Сначала текст превращается в числа. Токенизатор режет строку на токены, заменяет их целочисленными ID и достаёт из таблицы эмбеддингов вектор для каждого. Дальше последовательность идёт через десятки слоёв трансформера, где self-attention перемешивает информацию между токенами, а feed-forward сеть её преобразует.

В фазе prefill все токены считаются параллельно одним большим перемножением матриц, загрузка GPU высокая. Ключевая метрика здесь Time to First Token. Заодно заполняется KV-кэш: тензоры K и V каждого слоя складываются в память для повторного использования.

В фазе decode модель выдаёт по токену за шаг и тянет из памяти все веса и весь кэш ради крохотного вычисления. Узкое место смещается на пропускную способность памяти, а метрикой становится Inter-Token Latency. Без KV-кэша генерация была бы квадратичной по сложности, с ним ускорение примерно пять раз и больше. Но кэш растёт линейно с длиной контекста: для модели на 13 млрд параметров это около 1 МБ на токен, а контекст на 4 тысячи токенов съедает уже 4 ГБ видеопамяти.

Поэтому длинный контекст стоит дорого и конкурирует за память с размером батча. Лечат это квантованием кэша, скользящим окном, grouped-query attention и PagedAttention. А DeepSeek V4, вышедший в апреле 2025, пошёл дальше и перестроил само внимание так, чтобы кэш был меньше изначально: на контексте в миллион токенов V4-Pro требует около 10 процентов KV-кэша от уровня V3.2.

Отдельно стоит квантование весов. Модель на 7 млрд параметров в FP32 занимает 28 ГБ, в FP16 уже 14 ГБ, в INT8 всего 7 ГБ, а в INT4 всего 3,5 ГБ. Именно поэтому модели на 7 млрд запускаются на ноутбучных видеокартах, а GPTQ и AWQ держат потерю качества в пределах пары процентных пунктов.

Вывод простой. Длинные промпты дороги по prefill, длинные ответы по decode, и они нагружают разные ресурсы. Когда вам говорят, что модель медленная, первый вопрос: она медленно стартует или медленно стримит. От ответа зависит, что именно оптимизировать.

Оригинал разбора от Avi Chawla: https://x.com/_avichawla/status/2071201619530956863


Телеграм: t.me/ainewsline

Источник: x.com

Комментарии: