Когда вы обращаетесь к модели с открытым весом через API, разные провайдеры могут предоставлять ее с различной точностью, например 16-бит bf16, 8-бит fp8 или 4-бит fp4. Точность может влиять как на ответы, так и на стоимость. Квантование LLM создает такие версии путем сохранения весов модели в меньшем количестве бит, поэтому модели требуется меньше памяти и аппаратных ресурсов, но это происходит с определенной потерей точности.
В этой статье объясняются форматы и приводятся результаты наших измерений на OpenRouter по состоянию на 20 октября 2026 года для 1455 эндпоинтов провайдеров и шести эндпоинтов, обслуживающих Qwen3.8 27B. В ходе нашего тестирования мы не обнаружили разницы в точности между fp8, fp4 и fp16, поэтому сама по себе метка точности не позволяла предсказать точность результатов. Более низкая точность обычно была дешевле, но не для каждой модели.
Кратко (TL;DR)
- Мы не обнаружили разницы в точности между fp8, fp4 и fp16 по результатам выполнения 240 задач с оценкой. Все шесть эндпоинтов набрали от 98,3% до 99,2%.
Мы не обнаружили разницы в точности между fp8, fp4 и fp16 по результатам выполнения 240 задач с оценкой. Все шесть эндпоинтов набрали от 98,3% до 99,2%.
- На дополнительных 40 задачах на умножение один эндпоинт fp4 показал самый низкий результат, однако разрыв был слишком мал, чтобы исключить случайность.
На дополнительных 40 задачах на умножение один эндпоинт fp4 показал самый низкий результат, однако разрыв был слишком мал, чтобы исключить случайность.
- Версия с точностью 8 бит оказалась дешевле 16-битной для 14 из 24 моделей, представленных в обоих вариантах, и дороже для 7. Версия с точностью 4 бита оказалась дешевле 8-битной для 26 моделей из 33.
Версия с точностью 8 бит оказалась дешевле 16-битной для 14 из 24 моделей, представленных в обоих вариантах, и дороже для 7. Версия с точностью 4 бита оказалась дешевле 8-битной для 26 моделей из 33.
- Параметр provider.quantizations фиксирует получаемую точность. Укажите каждую точность, которую вы готовы принять, чтобы у роутера было более одного эндпоинта для резервного переключения.
Параметр provider.quantizations фиксирует получаемую точность. Укажите каждую точность, которую вы готовы принять, чтобы у роутера было более одного эндпоинта для резервного переключения.
Что такое квантование LLM?
Квантование LLM означает сохранение чисел большой языковой модели с использованием меньшего количества бит, чем при ее обучении. Большинство современных LLM используют форматы FP16 или BF16, которые являются 16-битными. fp8 сокращает объем памяти, занимаемый каждым весом, вдвое, а fp4 или int4 — в четыре раза, благодаря чему один и тот же графический процессор может вмещать большую модель или обслуживать больше запросов. Цена за это — точность, поскольку каждый вес округляется до ближайшего значения, которое может сохранить уменьшенный формат.
Эти цифры относятся только к весам. Работающей модели также требуется память для KV-кэша — сохраненного состояния внимания для каждого токена в контексте.
Существует два основных типа квантования. Посттренировочное квантование преобразует веса уже готовой модели. Оно может быть динамическим, вычисляющим диапазон каждой активации во время выполнения, или статическим, вычисляющим эти диапазоны заранее путем передачи примеров данных через модель. Квантование с учетом обучения (Quantization-aware training) симулирует округление в процессе обучения, чтобы веса научились переносить его. В руководстве по концепциям Hugging Face Optimum объясняются оба метода, а в обзоре квантования Transformers рассмотрены методы квантования, которые вы можете запустить самостоятельно.
fp8 против bf16: в чем разница?
Форматы с плавающей запятой распределяют свои биты между знаком, экспонентой и мантиссой. Экспонента задает диапазон значений, а мантисса определяет точность разделения значений в этом диапазоне.
bf16 имеет 1 бит знака, 8 бит экспоненты и 7 бит мантиссы, поэтому он обладает тем же диапазоном, что и 32-битный fp32, но с меньшей точностью. fp16 делит свои 16 бит на 5 бит экспоненты и 10 бит мантиссы. Стандарт OCP 8-bit floating point spec определяет два варианта кодирования fp8: E4M3 (4 бита экспоненты, 3 бита мантиссы) и E5M2 (5 бит экспоненты, 2 бита мантиссы). fp8 жертвует как диапазоном, так и точностью, поэтому квантованные модели сохраняют масштабный коэффициент для каждого тензора или для каждого блока весов. MXFP4 использует общий масштаб для каждого блока из 32 значений, а NVFP4 применяет один масштаб fp8 на 16 значений.
Для пользователя API разница между fp8 и bf16 проявляется в виде другой метки и цены для одной и той же модели. В нашем тесте мы не обнаружили разницы между тремя эндпоинтами fp8 и эндпоинтом fp16.
Сколько качества теряется при использовании fp8 и fp4?
В нашем тесте мы не обнаружили потери качества при использовании fp8 или fp4. Все шесть эндпоинтов набрали от 98,3% до 99,2%, а тест такого масштаба не позволяет исключить разницу в один-два пункта.
Мы прогнали 280 задач с точными ответами через модель qwen/qwen3.8-27b, зафиксировав ее на шести эндпоинтах. Cerebras обслуживает ее в формате fp16. Parasail, CoreWeave и AkashML предоставляют ее в fp8, а Darkbloom и ModelRun — в fp4. В каждом запросе устанавливались параметры provider.only, quantizations и allow_fallbacks: false, чтобы обращение шло только к указанному эндпоинту, при температуре 0 и отключенном рассуждении (reasoning off). Задачи представляли собой многошаговую арифметику с промежуточными вычислениями, программы на Python для пошагового анализа, списки из 20–30 чисел для сортировки, поиск ключа среди 240 или 1200 элементов (около 4000 и 20 000 токенов), а также четырехшаговую цепочку поиска примерно по 9000 токенов. Мы сгенерировали каждую задачу самостоятельно, поэтому каждая имеет точный ответ и судья не требуется. Еще 40 задач требовали найти произведение двух четырехзначных чисел без промежуточных вычислений, они оценивались отдельно.
Ни одна категория задач не выявила разделения по точности. Каждый эндпоинт допускал ошибки не более чем в двух задачах из любой категории, причем эти ошибки были обычными описками, такими как пропущенное в отсортированном списке число. Эндпоинты fp8 расходились друг с другом в 2–5 задачах из 240, а два эндпоинта fp4 — в 4. Эндпоинт Darkbloom чаще всего расходился с эндпоинтами fp16 и fp8 (в 7 или 8 задачах), однако его общий результат отличался от fp16 менее чем на полпункта.
Единственной областью, где проявился разрыв, стало умножение без промежуточных вычислений. Darkbloom на fp4 правильно вычислил 26 произведений из 40 по сравнению с 30–33 на остальных пяти эндпоинтах, включая 30 на ModelRun при fp4. Z-тест для двух долей относительно лучшего эндпоинта (33), выбранный нами после просмотра результатов, оценивает вероятность появления столь большого разрыва при отсутствии реальной разницы примерно в 7,5%, поэтому мы не можем назвать это эффектом точности. Неправильные результаты были близки к правильным при любой точности, причем медианная погрешность составляла менее 0,01%.
Мы выполнили все 280 задач дважды на Cerebras, и оба запуска выдали идентичный текст для каждой задачи. Небольшие различия между эндпоинтами могут быть обусловлены точностью, аппаратным и инференс-программным обеспечением каждого провайдера или вариациями от запуска к запуску на других эндпоинтах, и при текущем объеме данных мы не можем их разделить. Cerebras является единственным эндпоинтом fp16, поэтому у fp16 нет второго эндпоинта для сравнения.
Этот тест охватывает одну модель, 280 задач и шесть эндпоинтов за один день. Он не доказывает, что 4-битный формат безопасен для любой модели или рабочей нагрузки, поэтому тестируйте собственные промпты, прежде чем направлять трафик на 4-битный эндпоинт.
Какую точность предоставляют провайдеры API?
fp8 — это наиболее часто обозначаемая точность, однако большинство эндпоинтов вообще не указывают точность. Мы выгрузили эндпоинты для каждой модели через наш API эндпоинтов, который вернул 1455 эндпоинтов для 470 моделей.
610 из 865 эндпоинтов с неизвестной точностью принадлежат моделям с закрытым весом, у которых вообще нет пометок о точности, включая все модели Claude, Gemini и все модели OpenAI, кроме gpt-oss. Из оставшихся 255 эндпоинтов 253 относятся к моделям с открытым весом, провайдеры которых не указывают точность. Лишь 54 из 163 моделей с помеченной точностью имеют 16-битный вариант, поэтому для большинства моделей с открытым весом 8-битный или 4-битный формат является единственным вариантом с явной маркировкой.
Является ли квантованный эндпоинт более дешевым?
Обычно да, но не всегда. Для каждой модели мы сравнили самый дешевый эндпоинт при каждом уровне точности, исходя из усредненной цены: три токена ввода на один токен вывода.
Ниже приведены самые дешевые эндпоинты для пяти моделей при каждом уровне точности (в долларах за миллион смешанных токенов). В двух случаях есть исключения. Модель gpt-oss-120b стоит дороже в 8-битном формате, чем в 16-битном, а MiniMax M3 стоит дороже в 4-битном формате, чем в 8-битном.
Провайдер влияет на цену сильнее, чем точность. Если у одной модели есть несколько эндпоинтов с одинаковой точностью, самый дорогой из них стоил в среднем в 1,72 раза дороже самого дешевого. Для Qwen3.8 27B десять эндпоинтов fp8 стоили от $0,342 до $1,137 за миллион смешанных токенов. Чтобы отправить запрос на самый дешевый эндпоинт, который проходит ваш фильтр точности, добавьте :floor к идентификатору модели, как описано в нашем руководстве по самым недорогим инференс-решениям. При использовании квантования [“fp8”] параметры qwen/qwen3.8-27b:floor в обоих наших тестах перенаправлялись на Chutes — самый дешевый эндпоинт fp8.
В нашем тестировании самый дешевый полный прогон из 280 задач был выполнен на fp4, а самый дорогой — на fp16, однако промежуточный порядок не зависел напрямую от точности. Один запуск обошелся в $0,58 на Darkbloom (fp4), $0,72 на AkashML (fp8), $0,77 на ModelRun (fp4), $0,81 на Parasail (fp8), $1,19 на CoreWeave (fp8) и $1,24 на Cerebras (fp16). Скорость также не зависела от точности. Cerebras (fp16) и ModelRun (fp4) отвечали в среднем за 1,3 и 2,4 секунды соответственно, в то время как у остальных четырех этот показатель составлял от 8,4 до 15,0 секунд. Среди всех эндпоинтов медианное время безотказной работы (аптайм) за 24 часа составляло 99,8% или выше для каждого указанного уровня точности, за исключением fp32, для которого доступен только один эндпоинт.
Как выбрать нужную вам точность?
Проверьте, какие эндпоинты поддерживает модель, а затем задайте provider.quantizations в своих запросах. Запрос GET на https://openrouter.ai/api/v1/models/qwen/qwen3.8-27b/endpoints возвращает по одной записи для каждого эндпоинта с указанием его квантования, цены, длины контекста и аптайма. Он ответил без API-ключа при нашем вызове, а вкладка провайдеров модели отображает тот же список. Для Qwen3.8 27B было указано 21 эндпоинт: один bf16, один fp16, десять fp8, три fp4 и шесть с неизвестной точностью. Перед тем как зафиксировать выбор, проверьте количество эндпоинтов для нужной точности, так как именно это число определяет, сколько резервных вариантов смогут принять нагрузку при сбое одного из них.
Чтобы запросы выполнялись с точностью 8 бит или выше, перечислите приемлемые для вас значения точности.
Мы запустили тест три раза, и при каждом запуске выводилась одна и та же строка.
Reka Canberra $0.000007
В документации по маршрутизации квантования у провайдеров перечислены все допустимые значения и объясняется, как параметры quantizations сочетаются с only, order и sort.
Параметр quantizations фильтрует список эндпоинтов. Мы отсеиваем все эндпоинты, точность которых не входит в список, затем распределяем нагрузку между оставшимися с учетом наименьшей цены, а в случае сбоя провайдера переключаемся на следующий эндпоинт. Никакой фильтр не гарантирует выбор одного и того же провайдера каждый раз, поэтому записывайте поле провайдера из ответа, если вы отслеживаете качество. В документации также отмечается, что fp4 включает mxfp4 и nvfp4, а fp8 включает mxfp8.
Распространенные проблемы с фильтрами точности и способы их решения
Фильтр срабатывает до обращения к какому-либо провайдеру, поэтому пустой список кандидатов приводит к быстрому сбою. Запрос к Qwen3.8 27B с параметром int8, который не поддерживает ни один эндпоинт, вернул ошибку 404 за 0,4 секунды.
Поле routing_funnel показывает, сколько эндпоинтов проходило каждый этап, а failed_routing_step указывает название этапа, после которого список опустел. Запрос {“quantizations”: [“fp8”], “only”: [“cerebras”]} вернул ту же ошибку 404 с квантованием fp8, поскольку Cerebras поддерживает fp16, из-за чего воронка сократилась с 21 эндпоинта до 1, а затем до нуля.
Более медленный сбой происходит тогда, когда под критерии подходит только один эндпоинт. Cerebras — единственный эндпоинт fp16 для Qwen3.8 27B. Во время нашего тестирования, в котором для Cerebras был жестко задан параметр allow_fallbacks: false, 93 из первых 280 запросов завершились неудачей три раза подряд с этой ошибкой (в сокращенном виде).
Мы повторяли запросы до тех пор, пока все 280 не были успешно выполнены. Использование параметра quantizations: [“fp16”] в одиночку оставляет тот же единственный вариант, поэтому в случае превышения лимита запросов (rate limit) у маршрутизатора не останется других вариантов. Расширение списка до [“fp16”, “bf16”] предоставило маршрутизатору второго кандидата, и аналогичный запрос был направлен на DeepInfra.
Сбой провайдера также может сопровождаться статусом HTTP 200, поскольку мы отправляем статус сразу же, как только провайдер принимает запрос. Проверяйте тело ответа на наличие ошибок, а не только код состояния.
Сортировка эндпоинтов по показателям качества с помощью Exacto
Качество квантования зависит «от используемого метода», и каждый провайдер запускает собственное ПО для инференса, поэтому нет гарантии, что два эндпоинта с одинаковой меткой будут работать одинаково. Для запросов с использованием инструментов (tools) функция Auto Exacto автоматически перемещает в конец списка эндпоинты с более низкой пропускной способностью, худшим процентом успешных вызовов инструментов и баллами в бенчмарках. Чтобы применить такую сортировку к запросам без инструментов, добавьте :exacto к идентификатору модели. Exacto ранжирует эндпоинты по сигналам вызова инструментов, а не по точности в вашей конкретной задаче, поэтому обязательно запускайте собственные промпты на рассматриваемых эндпоинтах. В материале о том, как оценивать производительность LLM-провайдеров, рассказывается, как сравнить их задержку (latency), пропускную способность и аптайм.
Часто задаваемые вопросы
Какое квантование лучше — более высокое или более низкое?
Большее количество бит сохраняет больше исходной точности модели и требует больше памяти. В нашем тесте Qwen3.8 27B от 20 октября 2026 года мы не обнаружили разницы в точности между эндпоинтами fp8, fp4 и fp16 на 240 задачах с точными ответами. Этот результат касается одной модели за один день, поэтому перед внедрением протестируйте 4-битный формат на собственной рабочей нагрузке.
Почему квантование не разрушает точность LLM?
Не все веса имеют одинаковое значение. AWQ обнаружило, что защита примерно 1% наиболее важных весов значительно снижает ошибку квантования, а LLM.int8() использует смешанную точность, сохраняя выбросы в 16-битном формате при умножении более 99,9% значений в 8-битном. Наш тест Qwen3.8 27B не позволяет определить, какие именно методы используют провайдеры, но эндпоинт fp16 дал сбой в 3 задачах из 240, а эндпоинты fp8 и fp4 — от 2 до 4.
Когда следует квантовать модель?
Квантуйте модель, если она не помещается в ваше аппаратное обеспечение в 16-битном формате или если вам требуется более высокая пропускная способность от тех же графических процессоров. В нашем тесте мы не заметили потерь на fp8, а fp8 искажает каждый вес меньше, чем 4-битный формат, поэтому этот шаг является менее радикальным. Сначала протестируйте любой из вариантов на собственных задачах. Через API вы не квантуете модель самостоятельно. Вы выбираете на OpenRouter эндпоинт, который поддерживает нужную вам точность, с помощью параметра provider.quantizations.
Что означает «неизвестное» (unknown) квантование у провайдера?
Это означает, что провайдер не передал информацию о точности для данного эндпоинта. На OpenRouter из 1455 эндпоинтов 865 имели неизвестную точность по состоянию на 20 октября 2026 года, причем 610 из них принадлежат моделям с закрытыми весами, таким как Claude и Gemini. Значение unknown также является допустимым в параметре provider.quantizations, что позволяет включать такие эндпоинты в поиск или исключать их.










