Какой формат квантования запускать на практике
Стек инференса первым делом спрашивает про формат чисел, и от ответа ежемесячный инвойс меняется в восемь раз. Формат с наименьшими по размеру весами не всегда даёт наименьшую по объёму модель.
Коротко
- Эмпирическое правило
- Веса уменьшаются ровно в том соотношении, что указано в названии, — BF16 / FP16 2 B/param · FP8 1 B/param · 4-bit (AWQ, GPTQ) 0.5 B/param. Больше ничего.
- Цена вопроса
- Qwen 3 32B требует NVIDIA A100 PCIe за $1,091 в месяц при полной точности и NVIDIA L4 за $125 при 4-битной точности. Та же модель, тот же контекст.
- Ловушка
- Кэш ключей и значений не уменьшается вслед за весами. При контексте 128k 4-bit Llama 3.3 70B — это 53 % кэша и всего 47 % весов.
- Где 4-бит однозначно проигрывает
- Llama 3.1 8B при 128k требует 23.0 GB при 4-битной точности против 18.4 GB при FP8 — больше памяти при худшем качестве
Начните здесь
Большая часть этой страницы — арифметика, поэтому сначала — вывод. Формат определяют четыре вопроса, и они заданы именно в этом порядке, потому что каждый из них способен сам по себе закрыть тему.
Помещается ли модель уже при полной точности, с запасом под ваш контекст? Запускайте её в BF16 и не читайте дальше. Квантование — это способ купить машину поменьше, а вы уже купили ту, что подходит. За сжатие модели, которая и так помещается, приз не полагается.
У вас короткий контекст и крупная модель? Вот где 4-bit оправдывает свою репутацию. Основную часть памяти занимают веса, и сократить их до четверти — это почти то же самое, что сократить до четверти саму машину.
У вас длинный контекст и небольшая модель? Используйте FP8 на карте, которая его поддерживает. FP8 вдвое уменьшает не только веса, но и кэш, и начиная с определённой длины именно это второе уменьшение и оказывается важным — таблица ниже показывает точную точку, где FP8 обгоняет 4-bit.
Вы обслуживаете одного человека на одной машине? GGUF через Ollama — это на порядок меньше работы, а пропускная способность, которой вы жертвуете, — это та пропускная способность, которая одному читателю всё равно никогда не понадобилась бы.
Всё, что дальше, объясняет, почему эти четыре ответа именно такие, и даёт цифры, чтобы проверить их на вашей собственной модели, а не на нашей. Если вы ещё не подсчитали, сколько памяти вообще нужно вашей модели, эта арифметика — отдельное руководство, и начинать нужно с него.
Три формата, четыре названия
Для инференса в ходу всего три формата чисел, и различаются они только одним: сколько байт стоит каждый параметр. Всё остальное — AWQ, GPTQ, GGUF, bitsandbytes — это метод получения одного из этих трёх, а не четвёртый формат.
| Формат | Байт на вес | Байт на элемент кэша | Для чего это нужно |
|---|---|---|---|
| BF16 / FP16 | 2 | 2 | Эталонное качество |
| FP8 | 1 | 1 | Близко к эталону, Hopper и Blackwell |
| 4-bit (AWQ, GPTQ) | 0.5 | 2 | Самые маленькие веса, кэш остаётся FP16 |
Читайте два числовых столбца как пару. На первых двух строках они равны, а на третьей — не равны, и именно эта единственная асимметрия объясняет большинство сюрпризов, которые ждут вас дальше на этой странице.
Четыре названия, которые вы реально встретите в репозитории моделей, соотносятся с этой таблицей так.
AWQ и GPTQ
Два пути к одному и тому же результату — 4-битному представлению. AWQ определяет, какие веса важны, отслеживая активации, и защищает их; GPTQ сжимает слой за слоем, по ходу исправляя ошибку. Оба метода дают чекпоинт, который vLLM и SGLang загружают напрямую, и на любой модели разрыв между ними меньше, чем разрыв между каждым из них и 16-битным форматом.
GGUF
Семейство llama.cpp, и то, что использует Ollama внутри. Это скорее контейнер, чем единый метод: один файл хранит веса в любой из десятка точностей, и он будет сбрасывать слои в системную RAM, когда карты не хватает. Не имеет равных для одного пользователя на одной машине, и самый слабый из трёх при реальной параллельной нагрузке.
FP8
Это не столько формат чекпоинта, сколько режим. Дайте стеку инференса 16-битные веса, и он приведёт их к FP8 прямо при загрузке — без отдельной загрузки файлов и без калибровочного прохода. Это единственный из четырёх, который умеет сжимать ещё и кэш, поэтому ниже он появляется там, где вы бы этого не ожидали.
BF16 и FP16
Веса в том виде, в котором их выпустили авторы, — эталон, относительно которого измеряется каждая другая строка. Два байта на параметр, никакого калибровочного набора, никакой поддержки ядер, которую нужно проверять, никакого спора о качестве. Если модель помещается, это и есть правильный ответ, а всё остальное на этой странице — отвлечение внимания.
Запросить любой из них — это один флаг. Это те же самые опции, которые подробно разбирает руководство по vLLM; здесь важно лишь то, насколько короткая разница между ними.
# 1. Reference. The weights as published, nothing to prepare.
$ vllm serve meta-llama/Llama-3.3-70B-Instruct --dtype bfloat16
# 2. FP8, quantised while it loads. No second download, no calibration.
# --kv-cache-dtype is the half everyone forgets: it is what
# halves the CACHE as well as the weights.
$ vllm serve meta-llama/Llama-3.3-70B-Instruct \
--quantization fp8 --kv-cache-dtype fp8
# 3. Four-bit AWQ. A DIFFERENT checkpoint, prepared by someone else.
$ vllm serve casperhansen/llama-3.3-70b-instruct-awq \
--quantization awq_marlin
# 4. Four-bit GPTQ. Same idea, different repository and flag.
$ vllm serve TechxGenus/Llama-3.3-70B-Instruct-GPTQ \
--quantization gptq_marlin
Половина, которая не уменьшается
Квантование весов до 4 бит не квантует кэш ключей и значений. AWQ и GPTQ сжимают веса, и только веса; кэш остаётся на 16 битах, если вы отдельно не запросите кэш FP8, а на 4-битном чекпоинте почти никто этого не делает. Это третий столбец таблицы выше, и именно поэтому арифметика ниже идёт не так, как все ожидают.
Проще всего увидеть это следствие на одной модели. Ниже — Llama 3.3 70B в 4-bit при каждой длине контекста, которую предлагает конфигуратор — веса против кэша.
| Контекст | Веса | KV-кэш | Доля кэша |
|---|---|---|---|
| 4k токенов | 35.0 GB | 1.3 GB | 3 % |
| 8k токенов | 35.0 GB | 2.5 GB | 7 % |
| 32k токенов | 35.0 GB | 10.0 GB | 22 % |
| 128k токенов | 35.0 GB | 40.0 GB | 53 % |
Столбец весов никогда не меняется — в этом весь смысл их квантования. Столбец кэша растёт линейно вместе с контекстом, пока в последней строке не превышает размер самой модели, которой принадлежит.
Продолжайте в том же духе достаточно долго — и 4-bit вообще перестаёт выигрывать. FP8 уменьшает вдвое обе половины; 4-bit уменьшает в четыре раза одну половину, а вторую оставляет как есть. Поэтому для каждой модели есть длина контекста, на которой они меняются местами, и наступает она тем раньше, чем меньше модель — потому что у маленькой модели мало весов, чтобы на них сэкономить, а рост кэша на токен тот же самый.
| Модель | 4k | 8k | 32k | 128k |
|---|---|---|---|---|
| Llama 3.1 8B | 5.2 | 5.8 | 9.2 | 23.0 |
| Qwen 3 32B | 19.5 | 20.7 | 27.6 | 55.2 |
| Llama 3.3 70B | 41.7 | 43.1 | 51.7 | 86.3 |
Цифры в гигабайтах — для более компактного из двух форматов, с указанием проигравшего формата под ним. Читайте слева направо и смотрите, как преимущество столбца 4-bit тает по мере роста контекста.
Последняя строка сохраняет преимущество везде, потому что 70 миллиардов параметров — это очень много веса, на котором можно сэкономить. Средняя строка заканчивается вничью: при 128k Qwen 3 32B стоит ровно столько же в обоих форматах, и тогда FP8 стоит взять ради качества. А первая строка переворачивается полностью at 128k — там 4-bit требует больше памяти, чем FP8, и при этом хуже воспроизводит оригинал. Это сочетание — больше памяти и хуже результат — самая частая ошибка квантования, которую мы видим, и она незаметна, если смотреть только на размер файла весов.
На что реально способна ваша карта
FP8 — это в первую очередь аппаратная возможность, и лишь потом программная. Карта, тензорные ядра которой его не понимают, всё равно загрузит чекпоинт FP8 — стек распакует веса до 16 бит перед умножением — но вы получите только экономию на загрузке, а не в скорости, а кэш FP8 будет вам вообще недоступен. 4-bit — противоположный случай: он работает везде, потому что веса в любом случае распаковываются до 16 бит перед вычислениями.
| Генерация | Карты, которые мы сдаём в аренду | FP8 |
|---|---|---|
| Ampere | NVIDIA RTX A6000 48GB, NVIDIA A100 PCIe 40GB, NVIDIA A100 PCIe 80GB, NVIDIA A100 SXM4 80GB | Нет в оборудовании — распаковка до 16-bit |
| Ada Lovelace | NVIDIA L4 24GB, NVIDIA RTX 4090 24GB, NVIDIA L40S 48GB | В тензорных ядрах — веса и кэш |
| Hopper | NVIDIA H100 PCIe 80GB, NVIDIA H100 SXM5 80GB, NVIDIA H200 SXM5 141GB | В тензорных ядрах — веса и кэш |
| Blackwell | NVIDIA RTX 5090 32GB, NVIDIA B200 SXM6 180GB | В тензорных ядрах — веса и кэш |
Этот столбец описывает кремний, а это не совсем тот же вопрос, где FP8 действительно оправдан. Собственное примечание каталога рядом с форматом называет Hopper and Blackwell, и это утверждение касается скорее стеков инференса, чем тензорных ядер: это те поколения, на которых ядра и кэши FP8 использовались больше всего и вызывали меньше всего сюрпризов. Ada Lovelace его запустит. Hopper и Blackwell — это то, куда мы бы поместили развёртывание, зависящее от FP8.
Ещё кое-что стоит знать перед выбором карты. Llama 3.3 70B в FP8 при 8k требует 81.9 GB, а карте на 80 GB — в их числе NVIDIA A100 PCIe — не хватает 1.9 GB. Недостаточно, чтобы это бросалось в глаза в таблице, но вполне достаточно, чтобы всё упало на самой машине. Карта, которой хватает с запасом, — следующая по старшинству, и конфигуратор скажет вам, какая именно, до оплаты, а не после.
Прирост скорости
Генерация одного токена означает однократное чтение активных весов из памяти. Меньше байт на вес — значит меньше байт нужно прочитать, а значит больше токенов в секунду — и на одном небатчированном потоке эта зависимость почти линейна, потому что карте больше нечего ждать. Это тот же потолок по пропускной способности памяти, на который делит руководство по цене за токен, и он намеренно консервативен. Ниже он применён к модели, достаточно маленькой, чтобы работать на любой однокарточной машине, которую мы сдаём в аренду, — так формат и карту можно прочитать по одной и той же таблице.
| Карта | Пропускная способность | BF16 / FP16 | FP8 | 4-bit (AWQ, GPTQ) |
|---|---|---|---|---|
| NVIDIA L4 | 300 GB/s | ~ 8 ток/с | ~ 17 ток/с | ~ 34 ток/с |
| NVIDIA RTX A6000 | 768 GB/s | ~ 22 ток/с | ~ 43 ток/с | ~ 86 ток/с |
| NVIDIA L40S | 864 GB/s | ~ 24 ток/с | ~ 49 ток/с | ~ 97 ток/с |
| NVIDIA RTX 4090 | 1008 GB/s | ~ 28 ток/с | ~ 57 ток/с | ~ 113 ток/с |
| NVIDIA A100 PCIe | 1555 GB/s | ~ 44 ток/с | ~ 87 ток/с | ~ 175 ток/с |
| NVIDIA RTX 5090 | 1792 GB/s | ~ 50 ток/с | ~ 101 ток/с | ~ 202 ток/с |
| NVIDIA A100 PCIe | 1935 GB/s | ~ 54 ток/с | ~ 109 ток/с | ~ 218 ток/с |
| NVIDIA H100 PCIe | 2000 GB/s | ~ 56 ток/с | ~ 113 ток/с | ~ 225 ток/с |
Llama 3.1 8B на одной карте, один поток за раз. Каждая машина в списке вмещает её во всех трёх форматах, поэтому строки сравнимы и по горизонтали, и по вертикали — а соотношение между тремя столбцами одинаково в каждой строке, потому что оно определяется только количеством байт на вес.
Два предостережения по поводу этой таблицы. Первое: она описывает по одному запросу за раз, а так почти никто не работает — при непрерывном батчинге веса читаются один раз на весь батч, поэтому ограничением становится не память, а вычисления, и разрыв между столбцами сужается. Второе: деквантование тоже кое-что стоит. 4-битные веса нужно распаковать перед умножением, и на небольшой модели при низком размере батча эта распаковка может съесть заметную долю того, что дало более компактное чтение. Направление, которое показывает таблица, надёжно; точные коэффициенты — не обещание.
Во что это вам обходится
Это та часть темы, где уверенным цифрам, включая наши, доверять не стоит. Ошибка квантования зависит от модели куда больше, чем от метода, а опубликованные сравнения расходятся друг с другом, потому что измеряют разные модели на разных задачах. Честно можно сказать только про общую картину.
FP8 достаточно близок к оригиналу, чтобы не вызывать споров. Это по-прежнему формат с плавающей точкой — экспонента и мантисса, только с меньшим числом бит в каждой — а не целочисленная сетка, на которую приходится отображать 4-битный чекпоинт с масштабирующими коэффициентами по группам. Именно поэтому он деградирует так мягко и не требует калибровочного прохода. Большинство команд принимают его без отдельной оценки качества, и у большинства это сходит с рук.
4-bit — это настоящий компромисс, и он бьёт неравномерно. Средний результат по бенчмаркам обычно почти не меняется. Меняется хвост распределения: длинные цепочки рассуждений, точная арифметика, редкие языки, строгие форматы вывода. Модель, которая всё ещё хорошо показывает себя в тестах с выбором ответа, может начать неправильно закрывать JSON.
Крупные модели переносят это легче. 4-bit на 70B — обычное дело. 4-bit на 8B, где каждый параметр значит больше, — вот где деградация становится заметной — и, согласно таблице выше, именно там выгода от этого минимальна.
Калибровочные данные важнее названия метода. И AWQ, и GPTQ сжимают модель, опираясь на выборочный корпус. Чекпоинт, откалиброванный на английской прозе и применённый для кода, покажет результат хуже, чем заслуживает сам метод, — и ни одна таблица бенчмарков вам об этом не скажет.
Отсюда единственная рекомендация на этой странице, не основанная на арифметике: запустите оба варианта. Вы арендуете машину с root-доступом и без какой-либо почасовой тарификации, поэтому развернуть одну и ту же модель дважды на двух портах и прогнать через каждую сотню собственных промптов — дело одного вечера, и оно решает вопрос именно для вашей нагрузки, а не для чьей-то ещё. Это заметно лучший ответ, чем любая таблица, включая эту, — и именно поэтому мы предпочитаем показать вам формулу, а не оценку.
Какая это машина
Всё это имеет значение именно из-за инвойса. Ниже — самая дешёвая машина в нашем каталоге, которая вмещает каждую модель целиком при контексте 8k, в каждом из трёх форматов — целиком означает на одной карте, без разделения, потому что модель, разделённая между картами, добавляет в уравнение интерконнект, а это уже другое руководство.
| Модель | BF16 / FP16 | FP8 | 4-bit (AWQ, GPTQ) |
|---|---|---|---|
| Llama 3.1 8B | NVIDIA L4 | NVIDIA L4 | NVIDIA L4 |
| Qwen 3 32B | NVIDIA A100 PCIe | NVIDIA RTX A6000 | NVIDIA L4 |
| Llama 3.3 70B | 4 × NVIDIA B200 SXM6 | 4 × NVIDIA H200 SXM5 | NVIDIA RTX A6000 |
При контексте 8k, на машинах, которые мы реально сдаём в аренду. Там, где в ячейке указано несколько карт, речь о наименьшем узле, в котором поставляется эта карта, а не о разделённой модели: самые крупные карты продаются по четыре и по восемь штук, поэтому самый дешёвый способ не делить 70B при полной точности — купить четыре карты и использовать одну. Именно ради того, чтобы избежать такого инвойса, и существует квантование.
Есть две привычки, которые отличают правильное использование этой таблицы от попадания впросак. Считайте по контексту, который вы реально будете использовать, а не по максимуму модели — вторая таблица на этой странице показывает, что бывает с теми, кто путает эти два параметра. И сверяйте формат с картой до заказа, а не после: NVIDIA RTX A6000, NVIDIA A100 PCIe и NVIDIA A100 SXM4 не даст вам цифры FP8, какой бы флаг вы ни указали. Конфигуратор показывает необходимый объём памяти и то, помещается ли модель на одну карту, для каждого узла и каждого формата — ещё до оплаты. Если вы выбираете между арендой и оплатой API за токен, точка окупаемости рассчитана отдельно, и квантование существенно сдвигает её в пользу железа.
Выбирайте формат и машину вместе.
Конфигуратор показывает, что нужно вашей модели при каждой точности и какие узлы вмещают её на одной карте, — ещё до того, как вы что-то заплатите.
Другие руководства
- Расчёт · 10 мин
Запуск модели на основе смеси экспертов
Общее число параметров определяет машину, активные параметры — скорость. Сколько VRAM нужно DeepSeek V3 и Qwen 3 235B, и какой узел для них арендовать.
Читать руководство - Стоимость · 6 мин
Когда помесячная аренда выгоднее почасовой
Точка безубыточности на реальных цифрах, три статьи расходов, которые почасовая цена скрывает до счёта, и ловушка простоя, утраивающая оценку.
Читать руководство - Стоимость · 9 мин
Self-hosting против API с оплатой за токен
Точка безубыточности между оплатой API за токен и арендой GPU на наших ценах и пропускной способности — и четыре момента, которые арифметика не учитывает.
Читать руководство