Data Portal | DS & ML
Фотография
нажмите — покажем
нажмите — покажем
Фотография
нажмите — покажем
нажмите — покажем
Фотография
нажмите — покажем
нажмите — покажем
Фотография
нажмите — покажем
нажмите — покажем
Нельзя просто выбрать модель и видеокарту и считать, что на этом всё.
Нужно выбрать формат файлов и путь выполнения ядер. Уже от них зависит, как именно будет работать GPU.
Начнём с самого цикла.
Текст превращается в токены. Токены проходят через Transformer. Механизм внимания определяет, какие предыдущие токены важны. Среда выполнения хранит KV-кэш, чтобы модель не пересчитывала весь разговор заново при каждом новом токене. Затем выбирается следующий токен, и цикл повторяется.
Модель не пишет весь ответ целиком за один проход. Она генерирует его по одному токену.
У этого цикла есть две фазы, и это разные задачи.
Prefill читает промпт и создаёт первый KV-кэш. Эта стадия сильно упирается в вычисления. Именно она во многом отвечает за паузу перед первым словом.
Decode генерирует ответ по одному токену. На этой стадии постоянно перечитываются веса и кэш, поэтому она сильнее зависит от пропускной способности памяти. Поэтому RTX PRO 6000 с 1,8 ТБ/с может заметно обгонять DGX Spark с 273 ГБ/с. Именно это ощущается как скорость «печатания».
Длинные промпты сильнее бьют по prefill. Длинные ответы — по decode. Длинные диалоги нагружают обе стадии, потому что растёт рабочая память.
Движок инференса — это не сама модель.
Это диспетчер трафика, менеджер памяти, планировщик, диспетчер ядер, система учёта кэша и API.
Он загружает веса, токенизирует вход, запускает прямой проход, выбирает следующий токен, хранит KV-кэш и отдаёт результат потоком.
Серьёзные движки ещё и выбирают ядра.
Ядро — это не «модель». Это конкретная тензорная программа: формы, раскладки, типы данных и то, какие именно операции разрешено выполнять железу.
На бумаге математика может быть одинаковой. Ядро — разное.
Формат файла тоже критически важен. Он определяет, что вообще можно загрузить, как это можно квантовать и насколько быстро всё будет работать.
Квантование — это не один переключатель.
Хранить веса в 4 битах — не то же самое, что выполнять вычисления в 4 битах. Квантование весов уменьшает размер модели. Активный контекст — отдельная история. Метка Q4 сама по себе ничего универсального не гарантирует.
Правильный формат — тот, под который в вашем движке есть оптимизированные ядра.
Именно из-за непонимания этого люди покупают RTX 5090, скачивают что-то с пометкой NVFP4 и всё равно не получают ожидаемую производительность.
Вот конкретный пример.
Я запустил Qwen 3.8 27B на RTX 5090. Два файла. Одна и та же модель. Та же видеокарта. В обеих папках написано NVFP4.
Но одна версия действительно выполняет 4-битную математику. Веса в 4 битах. Активации тоже в 4 битах. Матричные блоки могут умножать 4-битные значения на 4-битные.
Другая версия лишь хранит веса в 4 битах. Затем ядро распаковывает их и выполняет вычисления уже в 16 битах.
Это другой путь выполнения ядер.
RTX 5090 сама это не выбирала. Это определил чекпойнт. В особенности то, были ли активации тоже 4-битными.
Если нет, то корректного умножения 4 бит × 4 бита просто не существует. Движок тихо откатывается на другой вариант. Файл при этом всё равно нормально загружается.
Вот в чём разница между форматом, который можно загрузить, операцией, которую умеет выполнять бэкенд, и арифметикой, которую реально исполняет железо.
Это не одно и то же.
Поэтому prefill и decode тоже не получают одинаковый выигрыш.
Во время prefill токенов достаточно много, чтобы хорошо загрузить матричные блоки. Нативная 4-битная математика здесь действительно может дать заметный прирост.
Decode всё ещё идёт по весам и кэшу токен за токеном. Если рабочее состояние не было переведено в 4 бита, то и полноценного выигрыша от 4-битных вычислений на этой стадии не будет. Просто меняется узкое место.
Не тестируйте просто «модель».
Тестируйте весь стек, который реально собираетесь использовать. И отдельно измеряйте prefill и decode.
39 · 1.3K ·