Словарь
Форматы весов
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)
Режим, в котором модель сначала «думает вслух», потом отвечает. В наших замерах выключен.