Почему LLM тормозит: разбираем инференс по косточкам |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2026-07-01 11:10 Каждый вызов 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 Комментарии: |
|