Лаборатория

Словарь

Форматы весов

BF16

Исходный формат весов: 16 бит на число, без квантования. Это формат, в котором модели обычно публикуют и обучают. Диапазон чисел — как у 32-битных, а точность ниже. Модель на 27 млрд параметров в BF16 занимает около 50 ГиБ и на одну карту 40 ГБ не помещается.

У нас: эталон качества для Qwen3.8-27B, работает на двух картах.

FP8

8 бит на число с плавающей точкой: веса почти вдвое меньше, чем в BF16. Новые карты (H100, L40S, RTX 4090) умеют считать в FP8 напрямую. У A100 такой возможности нет, поэтому движок хранит веса в FP8, а перед умножением переводит их в BF16. Память экономится, скорость — нет.

У нас: официальная FP8 авторов модели; на A100 — «только веса».

INT8

8-битные целые числа вместо дробных. В варианте W8A8 в целые переводятся и веса, и активации, поэтому A100 умножает их напрямую, тензорными ядрами. Это единственный формат, который на A100 ускоряет чтение длинного ввода.

У нас: свой квант INT8 W8A8 — длинный документ читает вдвое быстрее FP8.

INT4

4 бита на вес вместо 16: модель примерно втрое меньше, чем в BF16. Не вчетверо: часть слоёв не квантуют, и у каждой группы весов свой масштаб. Активации остаются 16-битными, веса перед умножением распаковываются. Ответ пишется быстрее, потому что на каждый токен карта читает втрое меньше весов. Потери качества зависят от того, как именно квантовали.

У нас: Qwen3.8-27B в INT4 весит 16,7–18,3 ГиБ против 50,3 в BF16; три варианта INT4 и один для MoE.

W4A16, W8A8

Запись «сколько бит у весов и сколько у активаций». W4A16 — веса 4 бита, активации 16. W8A8 — и то и другое 8 бит.

Только веса

Квантованы только веса, вычисления идут в 16 битах. Экономит память и ускоряет генерацию, но не чтение длинного ввода.

Как квантуют

Квантование

Перевод весов модели в формат с меньшим числом бит. Модель становится меньше и обычно быстрее, но немного теряет в качестве. Сколько — зависит от формата, метода и настроек. Это и проверяет серия S1.

GPTQ

Метод квантования, который исправляет ошибку по ходу. Веса слоя квантуются по очереди, а ещё не квантованные подправляются так, чтобы ошибка уже сделанных скомпенсировалась. Для этого через модель прогоняют небольшой набор текстов — калибровочные данные.

У нас: свои кванты INT4 GPTQ g128, INT4 GPTQ g32 и INT8 W8A8.

AWQ

Метод квантования, который бережёт самые важные веса. Важные каналы находятся по величине активаций на калибровочных данных и перед квантованием масштабируются, чтобы их ошибка была меньше.

У нас: готовые кванты INT4 AWQ g32 и MoE INT4 AWQ g128.

Калибровочные данные

Тексты, на которых подбирают параметры квантования. Модель их только читает, не учится. От их выбора зависит, что квантованная модель сохранит лучше.

У нас: для своих квантов — русская Википедия и диалоги UltraChat.

Группа (g32, g128)

Сколько весов делят один масштаб. g128 — один масштаб на 128 весов, g32 — на 32. Чем меньше группа, тем точнее квантование и тем немного больше памяти.

У нас: переход с g128 на g32 вдвое уменьшил расхождение с исходной моделью.

Симметричное и асимметричное

Асимметричное квантование умеет сдвигать ноль. Симметричное раскладывает значения поровну вокруг нуля. Асимметричное добавляет к масштабу сдвиг и точнее, когда веса в группе смещены в одну сторону.

SmoothQuant

Приём, который переносит выбросы из активаций в веса. Нужен, чтобы квантовать в 8 бит и активации. В llm-compressor 0.15.0 для архитектуры Qwen3.8 его нет.

У нас: поэтому INT8 W8A8 сделан без него и теряет на знаниях больше всех.

Официальный, готовый, свой

Кто сделал квант. Официальный — авторы модели. Готовый — сторонний автор на Hugging Face, его имя стоит рядом. Свой — мы, по открытому рецепту.

Устройство модели

Параметры

Числа, из которых состоит модель. 27B — 27 миллиардов. От их числа и формата зависит, сколько памяти модель займёт.

MoE

Смесь экспертов: на каждый токен работает только часть модели. Модель разбита на «экспертов», и для каждого токена выбирается несколько из них. В памяти лежит вся модель, а читается на токен малая часть — поэтому MoE отвечает быстро.

У нас: Qwen3.6-35B-A3B — 35 млрд параметров, на токен работают 3 млрд («A3B»).

Плотная модель

Модель, у которой на каждом токене работают все параметры. Обычное устройство большинства моделей.

Гибрид

В части слоёв вместо обычного внимания — линейное. У таких слоёв нет KV-кэша, поэтому запрос занимает меньше памяти. Калькуляторы, которые этого не учитывают, ошибаются в расчёте.

У нас: обе модели S1 гибридные: обычное внимание в каждом четвёртом слое.

KV-кэш

Память, в которой модель держит прочитанный текст запроса. Растёт с длиной запроса и числом одновременных пользователей. Кончилась — новые запросы ждут в очереди.

Скорость

Токен

Кусок слова, которым модель читает и пишет текст. Русское слово обычно занимает несколько токенов, частое короткое слово — один.

Время до первого токена

Сколько ждать, пока модель начнёт отвечать. Сюда входит очередь и чтение запроса. На длинном документе это главная задержка.

Скорость на пользователя

Сколько токенов в секунду видит один человек, пока модель пишет ему ответ.

Пропускная способность

Сколько токенов в секунду сервер выдаёт всем пользователям вместе. Растёт с числом пользователей, пока хватает памяти и вычислений.

95-й процентиль

Время, в которое укладываются 95 запросов из 100. Показывает, сколько ждут невезучие, а не средние.

Чтение и генерация (prefill и decode)

Две фазы ответа: прочитать запрос и написать ответ. Чтение упирается в вычисления карты, генерация — в скорость чтения весов из памяти. Поэтому квантование ускоряет их по-разному.

Как считаем

Прогон

Один полный проход нагрузки с заданными параметрами. Скорость измеряем по три прогона на точку и показываем среднее и разброс.

Процентный пункт, п.п.

Разница между процентами. 77,4 % и 77,0 % отличаются на 0,4 п.п.

В пределах шума

Разница слишком мала, чтобы отличить её от случайности. Значит, на этом наборе вопросов варианты не различаются.

Интервал разности

Диапазон, в котором с вероятностью 95 % лежит настоящая разница. Считаем по одним и тем же вопросам у обоих вариантов (парный бутстреп).

KL-дивергенция

Насколько квантованная модель «думает» иначе, чем исходная. Сравнивает, какие следующие слова и с какой вероятностью предлагают обе модели. Ноль — одинаково. Чувствительнее, чем доля верных ответов.

Эталон

Вариант, с которым сравниваем остальные. Обычно исходная модель без квантования.

Стенд

Весовая категория

Бюджет железа, внутри которого сравниваем модели. Например, «одна A100 40 ГБ». Варианту, которому нужна вторая карта, место в другой категории.

vLLM

Программа, которая запускает модель и отвечает на запросы. Открытая, одна из самых распространённых для серверов. Версия влияет на скорость и память, поэтому указана у каждого замера.

Tensor parallel, NVLink

Одна модель на нескольких картах. Каждый слой делится между картами, карты обмениваются данными по NVLink — быстрой связи между ними.

ГиБ и ГБ

ГиБ — 2³⁰ байт, ГБ — 10⁹ байт. «A100 40GB» — это 40 ГиБ, из которых CUDA видит 39,49.

Холодный и тёплый старт

Холодный — запуск сервера с нуля, тёплый — повторный. При самом первом запуске vLLM 0.32.0 компилирует модель и после этого держит лишние ~2,3 ГиБ на карту, поэтому место под запросы мы показываем и для первого запуска, и после перезапуска.

Режим рассуждения (thinking)

Режим, в котором модель сначала «думает вслух», потом отвечает. В наших замерах выключен.