Квантование делает модель меньше и быстрее за счет хранения ее весов и активаций в формате с более низкой точностью. NVFP4 представляет каждое значение в виде 4 бит. При таком грубом округлении некоторые слои теряют информацию, от которой зависит модель. Другие слои справляются с 4 битами практически без снижения качества вывода. Главное — определить, какие слои могут работать с 4 битами, а каким требуется более высокая точность. В этой статье мы объясним, как мы оптимизируем процесс для получения высококачественного 4-битного квантования, рассмотрев три подхода: эвристические правила, оценку чувствительности изолированных слоев и SaturationQuant.
Где помогает квантование?
Рабочие нагрузки, ограниченные пропускной способностью памяти
Веса модели хранятся в VRAM (высокоскоростной памяти, подключенной к GPU). Во время инференса графическому процессору необходимо перемещать эти веса из VRAM в вычислительные блоки (например, регистры или разделяемую память) для выполнения расчетов.
Если уменьшить размер весов, объем байтов, которые необходимо считывать, сокращается примерно в 2 или 4 раза. Например, FP16 использует 2 байта на вес, в то время как FP8 использует 1 байт, а FP4 — 0,5 байта.
Вычислительно ограниченные рабочие нагрузки
При вычислениях, ограниченных производительностью процессора, GPU тратит большую часть времени на арифметические операции, а не на перенос весов и активаций из VRAM в вычислительные блоки. Для LLM большая часть этих вычислений представляет собой матричное умножение, которое выполняется на тензорных ядрах GPU. Преимущество квантования для вычислительно ограниченных задач заключается в более высокой арифметической пропускной способности: на таком оборудовании, как GPU NVIDIA Blackwell с нативной поддержкой FP4, операции на тензорных ядрах FP4 могут обеспечивать пиковые значения FLOPS до 4 раз выше, чем FP16.
Что подвергается квантованию и в каком виде?
Веса — это параметры, изучаемые в процессе обучения. При инференсе они остаются фиксированными. Каждое соединение между двумя нейронами имеет свой вес, и каждый слой имеет собственный тензор весов.
Активации: Во время инференса активации создаются на основе входных данных и весов. Каждый нейрон объединяет поступающие к нему значения, а затем пропускает результат через нелинейную функцию. Этот вывод и является его активацией.
Демонстрация того, как два входных сигнала проходят через небольшую сеть, с приближением к одному нейрону, который умножает входящие активации на фиксированные веса, суммирует их и пропускает результат через ReLU для получения своей активации. Веса задаются один раз при обучении, но активации пересчитываются для каждого входного сигнала, поэтому их квантование сложнее, чем весов.
В зависимости от конфигурации квантования, веса слоя, его активации или и то, и другое могут быть квантованы в формат с более низкой точностью. каждое значение должно быть округлено до одного из немногих чисел, которые могут быть представлены 4 битами.
Зачем нужны масштабы?
FP4 может представлять только фиксированный набор из 16 значений: 0, ±0,5, ±1, ±1,5, ±2, ±3, ±4, ±6, но веса и активации часто намного меньше этого диапазона. Каждая группа весов или активаций имеет собственный динамический диапазон — промежуток от наименьшего до наибольшего значения. Масштаб проецирует сетку на диапазон, в который попадают значения (подгоняется под наибольшее абсолютное значение). Веса и активации используют раздельные масштабы, поскольку их диапазоны не связаны между собой.
Для большей наглядности на следующих схемах опущен масштаб FP32 тензорного уровня NVFP4 и показан только шаг масштабирования на уровне блоков.
Квантование FP4 с масштабом и без него.
Блочные масштабы: один масштаб на 16 значений
В NVFP4 тензор (например, массив весов или активаций) разбивается на блоки по 16 последовательных значений, и для каждого блока устанавливается собственный масштаб.
Квантование одного блока из 16 значений с использованием его блочного масштаба.
Зачем нужны блоки?
Если у нас есть один масштаб для всего массива весов, например, то наибольшее аномальное значение (выброс) повлияет на все остальные значения во время квантования. Масштаб задается этим выбросом. Предположим, наибольшее значение массива равно 84, в то время как остальные находятся в районе 1 или 2. Масштаб становится равным 84 ÷ 6 = 14, поэтому величины, которые может представлять NVFP4, теперь читаются как 0, 7, 14, 21, 28, 42, 56, 84, и каждое значение ниже 3,5 оказывается ближе к 0, чем к 7.
Блочный масштаб в сравнении с масштабом всего массива.
Масштабы весов могут быть вычислены на основе самих весов, поскольку они фиксированы. Но активации существуют только после того, как входные данные проходят через модель, поэтому их диапазоны необходимо предварительно измерить посредством калибровки.
Калибровка
Калибровка прогоняет через модель небольшой набор репрезентативных входных данных и регистрирует распределение значений активации. Эти статистические данные используются для вычисления масштабов.
Калибровка в конвейере квантования. Для установки масштабов активациям требуются выборочные данные, поскольку их значения зависят от входных данных, в то время как фиксированные веса могут быть масштабированы без них.
Калибровка включает в себя три этапа:
- Выберите набор данных для калибровки: выберите примеры, которые точно отражают структуру, контент и типы рабочих нагрузок (например, написание кода или задачи агентов) ваших ожидаемых входных и выходных данных. Пропустите примеры через модель, чтобы записать распределение значений активации.
Выберите набор данных для калибровки: выберите примеры, которые точно отражают структуру, контент и типы рабочих нагрузок (например, написание кода или задачи агентов) ваших ожидаемых входных и выходных данных. Пропустите примеры через модель, чтобы записать распределение значений активации.
- Выберите диапазон обрезки: квантование должно отображать активации в ограниченный набор представляемых значений. Использование минимума и максимума позволяет избежать обрезки, но редкие выбросы могут расширить диапазон и снизить точность для большинства активаций. Методы калибровки на основе перцентилей, гистограмм и ошибок могут отсекать небольшое количество выбросов, чтобы более точно представлять типичные значения активации модели.
Выберите диапазон обрезки: квантование должно отображать активации в ограниченный набор представляемых значений. Использование минимума и максимума позволяет избежать обрезки, но редкие выбросы могут расширить диапазон и снизить точность для большинства активаций. Методы калибровки на основе перцентилей, гистограмм и ошибок могут отсекать небольшое количество выбросов, чтобы более точно представлять типичные значения активации модели.
- Вычислите масштабы активации: разделите каждый тензор активации на блоки по 16 значений. Для каждого блока найдите его наибольшее абсолютное значение и используйте его для вычисления масштаба, который преобразует значения блока в представляемый диапазон NVFP4 от -6 до 6.
Вычислите масштабы активации: разделите каждый тензор активации на блоки по 16 значений. Для каждого блока найдите его наибольшее абсолютное значение и используйте его для вычисления масштаба, который преобразует значения блока в представляемый диапазон NVFP4 от -6 до 6.
Как выбрать формат точности для каждого слоя
Эвристические алгоритмы
Алгоритмы на основе эвристики определяют точность каждого слоя на основе архитектуры, а не путем измерения чувствительности каждого слоя к квантованию. (Измерение чувствительности требует наличия калибровочного набора данных, послойного квантования и сравнения результатов с моделью полной точности.) Распространенной эвристикой является квантование матриц экспертов MoE до более низкой точности при сохранении слоев внимания на более высокой точности, так как внимание часто более чувствительно к квантованию. Это экономит память, поскольку весовые матрицы экспертов составляют большую часть параметров модели MoE. Короче говоря, во многих MoE LLM экспертные слои более устойчивы к квантованию, чем слои внимания.
NVIDIA ModelOpt предоставляет предопределенные конфигурации, реализующие эвристические методы квантования на основе архитектуры:
- NVFP4_EXPERTS_ONLY_CFG квантует только экспертные слои MoE.
NVFP4_EXPERTS_ONLY_CFG квантует только экспертные слои MoE.
- NVFP4_MLP_ONLY_CFG квантует слои MLP и MoE, оставляя слои внимания с более высокой точностью.
NVFP4_MLP_ONLY_CFG квантует слои MLP и MoE, оставляя слои внимания с более высокой точностью.
В отличие от функции AutoQuantize в ModelOpt (см. ниже), эти конфигурации не измеряют чувствительность каждого слоя для определения его точности. Точность каждого слоя основана на архитектуре.
Примечание: MoE — это архитектура, в которой модель разделена на множество специализированных подсетей (экспертов), но для любого заданного токена активируется лишь небольшая подмножество.
ModelOpt AutoQuantize
AutoQuantize выбирает формат точности для каждого слоя (например, NVFP4, FP8, оставляя его неквантованным). Используя оценки чувствительности, AutoQuantize выбирает комбинацию форматов, которая минимизирует предполагаемые потери без превышения целевого объема памяти.
AutoQuantize поддерживает три метода оценки чувствительности: на основе градиентов, дивергенции Кульбака–Лейблера (KL) и метода Оумана–Шепли.
Что такое чувствительность?
Чувствительность — это степень влияния округления весов и активаций слоя до формата пониженной точности на выходные данные модели. Некоторые слои могут использовать форматы пониженной точности, такие как NVFP4, практически без изменения качества выходных данных модели. Другие слои теряют информацию, на которую опирается модель, поэтому AutoQuantize назначает им форматы более высокой точности.
Оценка чувствительности изолированного слоя: градиентный метод
Градиентный метод оценивает, насколько возрастут потери модели, если один слой будет квантован в заданный формат, в то время как все остальные слои остаются в своей базовой конфигурации.
AutoQuantize имеет четыре этапа:
Четыре этапа AutoQuantize: калибровка, оценка, решение и применение.
Формат-кандидат — это один из форматов квантования, которые AutoQuantize пробует для каждого слоя, например FP8 или NVFP4. Вы выбираете кандидатов с помощью параметра quantization_formats, и «без квантования» всегда включается в качестве опции. Предел стоимости — это целевой размер памяти (или количество бит).
Ограничение оценки чувствительности изолированного слоя
AutoQuantize использует оценки чувствительности для сравнения рецептов со смешанной точностью и принятия решения о том, какой формат квантования назначить каждому слою. Чтобы оценить увеличение потерь от квантования нескольких слоев одновременно, AutoQuantize не может просто сложить их индивидуальные оценки чувствительности.
Как AutoQuantize оценивает слои изолированно. Один слой квантуется за раз в NVFP4, в то время как остальные остаются с базовой точностью, после чего каждая оценка измеряется как увеличение потерь по сравнению с неквантованным базовым уровнем. Поскольку каждая оценка предполагает, что никакой другой слой не квантован, их суммирование переоценивает потери для рецепта, который квантует несколько слоев одновременно.
Эффект квантования слоя зависит от того, какая часть модели уже была квантована. Квантование слоя часто добавляет меньше потерь, когда другие слои уже квантованы. Сложение изолированных оценок может привести к переоценке потерь полного рецепта.
Потери ограничены. Каждый новый квантованный слой расходует часть оставшегося резерва потерь*. По мере квантования все большего числа слоев общее увеличение потерь начинает насыщаться.
*резерв (headroom): разница между текущими потерями и максимальным значением, которого они могут достичь.
Как потери насыщаются по мере квантования все большего числа слоев. Влияние каждого слоя зависит от того, что уже квантовано, поэтому суммирование изолированных оценок преувеличивает общие потери.
Оценка SaturationQuant в AutoQuantize
SaturationQuant оценивает каждый слой, принимая во внимание другие квантованные слои, используя оценку Оумана–Шепли. Насыщение встроено в оценку, поэтому оценки можно суммировать. Сумма этих оценок более точно предсказывает потери, которые производит этот рецепт.
Как выбрать, какие слои квантовать?
Некоторые слои могут работать в NVFP4 практически без изменения качества, в то время как другие требуют FP8 или более высокой точности. Калибровочные данные используются для измерения диапазонов активаций, а коэффициенты масштабирования сопоставляют веса и активации с сеткой NVFP4. Чтобы выбрать, какие слои запускать в NVFP4:
- Используйте эвристику на основе архитектуры, когда вам нужен быстрый рецепт без проведения послойного поиска.
Используйте эвристику на основе архитектуры, когда вам нужен быстрый рецепт без проведения послойного поиска.
- Используйте градиентную оценку, когда вы можете вычислить потери на репрезентативном калибровочном наборе данных и хотите измерить чувствительность каждого слоя.
Используйте градиентную оценку, когда вы можете вычислить потери на репрезентативном калибровочном наборе данных и хотите измерить чувствительность каждого слоя.
- Используйте оценку Оумана–Шепли, когда у вас более жесткая цель по памяти и вам нужно оценить, как полный рецепт со смешанной точностью повлияет на качество.
Используйте оценку Оумана–Шепли, когда у вас более жесткая цель по памяти и вам нужно оценить, как полный рецепт со смешанной точностью повлияет на качество.










