Квантование нейронных сетей
Материал из MachineLearning.
| | Статья написана с использованием LLM DeepSeek-V3 и проверена участником М. Мишин 9:43, 25 июня 2026 (MSD)
Промпт приводится полностью в Обсуждение:Квантование нейронных сетей |
|
Определение и основная идея
Квантование нейронных сетей (англ. neural network quantization) — это процесс преобразования весов, активаций и, в некоторых случаях, градиентов нейронной сети из представления с высокой точностью (например, 32-битных чисел с плавающей запятой, FP32) в представление с более низкой разрядностью (например, 8-битные целые числа, INT8, или даже 1-битные бинарные значения). В более широком смысле квантование является одним из ключевых методов сжатия моделей глубокого обучения, направленным на сокращение требований к памяти и вычислительным ресурсам путём замены высокоточных вычислений операциями над данными с меньшей разрядностью.
Квантование опирается на фундаментальный компромисс: снижение точности представления данных неизбежно вносит ошибки округления (квантовательный шум), однако при правильном подборе параметров эти потери могут быть сведены к минимуму, обеспечивая значительный выигрыш в эффективности.
Мотивация: зачем нужно квантование?
Современные нейронные сети демонстрируют выдающиеся результаты в компьютерном зрении, обработке естественного языка и других областях. Однако платой за это является экспоненциальный рост числа параметров: модели выросли от сотен миллионов (BERT) до триллионов параметров (GPT-4). Это порождает три взаимосвязанные проблемы:
- Огромные требования к памяти. Размер state-of-the-art свёрточной сети может достигать сотен мегабайт, что делает её развёртывание на периферийных устройствах и устройствах интернета вещей затруднительным.
- Высокая вычислительная сложность. Операции с 32-битными числами с плавающей запятой требуют значительных вычислительных ресурсов, что увеличивает задержку (латентность) при инференсе.
- Энергопотребление. Вычисления с плавающей запятой и передача больших объёмов данных между памятью и процессором потребляют значительную энергию, что критично для батарейных устройств.
Квантование предлагает решение всех трёх проблем одновременно:
- Сжатие модели. INT8-модель занимает примерно в 4 раза меньше места, чем FP32-аналог.
- Ускорение инференса. Операции над целыми числами выполняются быстрее на большинстве современных CPU и GPU благодаря специализированным инструкциям (например, AVX-512 VNNI или Tensor Cores).
- Снижение энергопотребления. Меньший объём вычислений и операций с памятью напрямую ведёт к уменьшению энергозатрат.
Основной компромисс при квантовании — это точность vs. эффективность: снижение разрядности неизбежно вносит ошибки округления, и задача состоит в том, чтобы минимизировать потерю точности модели на целевой задаче.
Математические основы квантования
Линейное (аффинное) квантование
Наиболее распространённым подходом является аффинное квантование. Оно отображает диапазон значений исходного FP32-тензора на дискретный диапазон целочисленных значений
(например,
для INT8).
Ключевыми параметрами квантования являются:
Масштаб ():
Смещение нуля ():
Процесс квантования (преобразование FP32-значения в целочисленное
) и деквантования (восстановление приближённого FP32-значения
) описываются формулами:
Важно отметить, что нулевое значение FP32 отображается в целочисленный zero-point , что позволяет корректно обрабатывать операции с обнулением (например, padding).
Симметричное vs. асимметричное квантование
Выбор между симметричным и асимметричным квантованием определяет, как именно FP32-диапазон отображается на целочисленный.
Симметричное квантование предполагает, что исходный FP32-диапазон симметричен относительно нуля: . Этот диапазон отображается симметрично на целочисленный диапазон, например
. Ключевая особенность: значение
отображается в целое
, поэтому zero-point
. Требуется только один параметр — масштаб
. Симметричное квантование упрощает вычисления, но может быть менее точным, если распределение данных не центрировано относительно нуля.
Асимметричное (аффинное) квантование не предполагает симметрии распределения. Точный диапазон отображается на полный INT8-диапазон
. Требуются два параметра — масштаб
и zero-point
. Асимметричное квантование лучше captures асимметричные распределения весов и, как показывает практика, часто даёт более высокую точность.
На практике веса обычно квантуют симметрично (их распределения часто центрированы около нуля), а активации — асимметрично (например, выходы ReLU всегда неотрицательны).
Нелинейное квантование
Помимо линейного квантования, существуют нелинейные схемы, которые пытаются лучше адаптироваться к распределению данных. Например, NF4 (NormalFloat 4-bit) оптимизирован для нормально распределённых весов, а FP4 — для равномерно распределённых. Такие форматы особенно популярны в контексте квантования больших языковых моделей (LLM).
Классификация методов
По времени применения: PTQ и QAT
Это фундаментальное разделение, определяющее, на каком этапе жизненного цикла модели применяется квантование.
Пост-тренировочное квантование (Post-Training Quantization, PTQ)
PTQ применяется к уже обученной полной точной модели без дообучения. Процесс включает:
- Сбор калибровочного датасета — небольшого набора репрезентативных входных данных (обычно 300–500 примеров).
- Однопроходный (или многопроходный) инференс для статистического анализа распределений активаций.
- Вычисление параметров квантования (масштабов и zero-point'ов) на основе собранной статистики.
- Непосредственное применение квантования к весам и активациям.
Преимущества PTQ:
- Не требует доступа к размеченным данным.
- Крайне быстр — калибровка занимает минуты.
- Не требует вычислительных ресурсов для дообучения.
Недостатки:
- Может приводить к существенному падению точности, особенно при агрессивном квантовании (4 бита и менее).
- Для сложных архитектур (например, Transformer) PTQ может быть нестабильным.
Квантование с обучением (Quantization-Aware Training, QAT)
QAT интегрирует квантование в процесс обучения сети. В прямом проходе (forward pass) веса и активации квантуются (симуляция квантования), а в обратном проходе (backward pass) градиенты вычисляются с использованием аппроксимаций недифференцируемой операции округления.
Ключевой механизм QAT — Straight-Through Estimator (STE), который игнорирует операцию округления при вычислении градиента, аппроксимируя её тождественным отображением. Несмотря на грубость аппроксимации, STE хорошо работает на практике.
В процессе QAT могут обучаться не только веса, но и параметры самого квантования — например, clipping ranges активаций (PACT) или масштабирующие факторы (LSQ).
Преимущества QAT:
- Значительно лучшее восстановление точности по сравнению с PTQ.
- Позволяет достичь высокой точности даже при сверхнизкой разрядности.
Недостатки:
- Требует доступа к полному размеченному обучающему датасету.
- Вычислительно затратен — требует нескольких эпох дообучения.
- Значительно более длительный цикл разработки.
По симметричности: симметричное и асимметричное
(Подробно рассмотрено в разделе Симметричное vs. асимметричное квантование.)
По линейности: линейное и нелинейное
(Подробно рассмотрено в разделе Нелинейное квантование.)
По гранулярности квантования
- Per-tensor — единый масштаб для всего тензора. Простейший подход.
- Per-channel — отдельный масштаб для каждого выходного канала (особенно важно для свёрточных слоёв).
- Per-group / block-wise — масштаб вычисляется для блоков параметров внутри тензора. Используется в методах вроде GPTQ.
Ключевые форматы представления данных
INT8 (8-битные целые числа)
Наиболее распространённый формат для практического квантования. Потеря точности обычно незначительна, а дообучение часто не требуется. INT8-квантование даёт ускорение в 1.5–3.3 раза по сравнению с FP32.
FP16 / BFLOAT16 (16-битные числа с плавающей запятой)
Обеспечивают умеренный выигрыш в эффективности при практически полном сохранении точности. FP16 широко поддерживается современными GPU (Tensor Cores в NVIDIA). BFLOAT16 сохраняет динамический диапазон FP32 за счёт уменьшения мантиссы, что делает его особенно удобным для обучения.
INT4 / 4-битные форматы
Активно используются для квантования больших языковых моделей. Специализированные форматы:
- NF4 — NormalFloat 4-bit, оптимизирован для нормально распределённых весов.
- FP4 — 4-bit FloatPoint, для равномерно распределённых данных.
Бинарные и тернарные сети
Крайний случай квантования — приведение параметров к разрядности 1 бит (бинаризация) или 2 бита (тернаризация). Веса и активации принимают значения из множества (бинарные) или
(тернарные).
Бинарные сети позволяют заменить сложные операции умножения-накопления (MAC) на битовые операции XNOR и popcount, что радикально снижает требования к памяти и вычислениям. Однако точность таких сетей значительно уступает полноточным аналогам, и активные исследования направлены на преодоление этого разрыва.
FP8
Относительно новый формат, набирающий популярность. Поддерживается в TensorRT. FP8-квантование с калибровкой min-max сжимает FP16/BF16-модель до 50% исходного размера.
Инструменты и библиотеки
Основные фреймворки для квантования:
- PyTorch предоставляет модуль
torch.quantizationс поддержкой динамического, статического PTQ и QAT, а также экспорт в ONNX. - NVIDIA TensorRT — оптимизатор инференса, поддерживающий INT8, FP8, INT4 и FP4 через явное квантование (Q/DQ-узлы) и различные стратегии калибровки.
- ONNX Runtime — кроссплатформенный движок, выполняющий квантованные модели с Q/DQ-узлами на различных бэкендах (CPU, GPU, TensorRT, OpenVINO).
- Intel Neural Compressor — библиотека для квантования моделей PyTorch, TensorFlow и ONNX, оптимизированная для Intel-оборудования.
- AMD Quark — кроссплатформенный инструментарий от AMD.
- bitsandbytes — реализует NF4 и другие форматы для квантования LLM.
- GGUF — файловый формат (не метод), широко используемый в экосистеме llama.cpp для запуска квантованных LLM на CPU.
Современные вызовы
Падение точности при низкой разрядности
Основной вызов квантования — минимизация потери точности. При квантовании ниже 8 бит методы PTQ часто дают неприемлемое падение качества. Это связано с тем, что:
- Квантовательный шум накапливается от слоя к слою.
- Некоторые веса (т.н. "salient weights") критически важны для точности и их грубое квантование непропорционально сильно вредит модели.
- Архитектуры на основе Transformer имеют свои особенности: self-attention и layer normalization создают уникальные вызовы для квантования из-за широкого динамического диапазона и чувствительности к ошибкам.
Выбор калибровочного датасета
Для PTQ критически важен выбор калибровочного датасета — небольшого набора примеров для оценки распределений активаций.
Проблемы:
- Если калибровочный датасет не отражает статистические характеристики реальных данных, параметры квантования будут неоптимальны.
- Слишком маленький датасет ведёт к неточным параметрам.
- Случайный выбор данных может приводить к нестабильности и деградации точности из-за несоответствия распределений активаций.
Решения:
- Разработаны методы интеллектуального выбора калибровочных данных (например, SelectQ, CaPTQ).
- Исследования показывают, что некоторые PTQ-методы могут быть чувствительны к выбору калибровочного датасета даже при квантовании LLM.
Гетерогенное оборудование
Различные аппаратные платформы (CPU, GPU, NPU, FPGA) имеют разные возможности и ограничения в поддержке квантованных типов данных. Это требует от инженеров глубокого понимания целевой платформы и выбора соответствующих стратегий квантования.
Актуальные научные подходы
Методы для больших языковых моделей (LLM)
Квантование LLM — активно развивающаяся область. Ключевые методы:
- GPTQ (Generative Pre-trained Transformer Quantization) — метод пост-тренировочного квантования, основанный на минимизации ошибки квантования с использованием информации из матрицы Гессе (вторых производных). Позволяет эффективно квантовать LLM до 4 бит.
- AWQ (Activation-aware Weight Quantization) — метод, который защищает "важные" веса (salient weights) от грубого квантования, основываясь на анализе активаций.
- SmoothQuant — техника, переносящая сложность квантования с активаций на веса путём сглаживания распределений, что облегчает INT8-квантование LLM.
- GGUF (GPT-Generated Unified Format) — хотя это скорее формат, чем метод, он стал де-факто стандартом для запуска квантованных LLM на CPU через llama.cpp.
Продвинутые техники PTQ
- AdaRound — альтернатива стандартному округлению до ближайшего целого, использующая адаптивное округление, которое минимизирует потерю точности.
- LSQ (Learned Step Size Quantization) — метод, в котором масштабирующие факторы квантования изучаются в процессе QAT с использованием специальной оценки градиента.
Смешанная точность
Идея заключается в использовании разной разрядности для разных слоёв или даже разных каналов внутри слоя. Критические слои (например, первые и последние слои сети) могут оставаться в более высокой точности, а менее чувствительные — квантоваться агрессивнее. Это позволяет достичь лучшего баланса между сжатием и точностью.
Заключение
Квантование нейронных сетей превратилось из нишевой техники оптимизации в необходимый инструмент для практического развёртывания моделей глубокого обучения. От базового INT8-квантования до специализированных методов для LLM — спектр доступных решений постоянно расширяется. Понимание математических основ квантования и знание доступных инструментов позволяют принимать осознанные решения, балансируя между тремя ключевыми метриками: размером модели, скоростью инференса и точностью.
См. также
- Сжатие моделей
- Pruning
- FP32, FP16, BFLOAT16, INT8
- TensorRT
- PyTorch
- ONNX
- GPTQ
- AWQ
- SmoothQuant
- LLM
- Quantization-Aware Training
- Post-Training Quantization
Литература
- Gholami A., Kim S., Dong Z., Yao Z., Mahoney M.W., Keutzer K. A Survey of Quantization Methods for Efficient Neural Network Inference // arXiv:2103.13630, 2021. — обширный обзор методов квантования, охватывающий как PTQ, так и QAT, с акцентом на математические основы.
- Nagel M., Fournarakis M., Amjad R.A., Bondarenko Y., van Baalen H., Blankevoort T. A White Paper on Neural Network Quantization // arXiv:2106.08295, 2021. — систематическое изложение теории и практики квантования, включая продвинутые техники.
- Frantar E., Ashkboos S., Hoefler T., Alistarh D. GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers // arXiv:2210.17323, 2022. — основополагающая работа по квантованию LLM до 4 бит с использованием информации из матрицы Гессе.
- Lin J., Tang J., Tang H., Yang S., Chen W., Wang W., Xiao G., Dang X., Gan C., Han S. AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration // arXiv:2306.00978, 2023. — метод защиты критически важных весов при квантовании LLM.
- Xiao G., Lin J., Seznec M., Wu H., Han S. SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models // arXiv:2211.10438, 2023. — техника сглаживания распределений для облегчения INT8-квантования Transformer-моделей.

