Квантование нейронных сетей

Материал из 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-тензора [v_{\min}, v_{\max}] на дискретный диапазон целочисленных значений [q_{\min}, q_{\max}] (например, [-128, 127] для INT8).

Ключевыми параметрами квантования являются:

Масштаб (S): S = \frac{v_{\max} - v_{\min}}{q_{\max} - q_{\min}}

Смещение нуля (Z): Z = q_{\min} - \text{round}\left(\frac{v_{\min}}{S}\right)

Процесс квантования (преобразование FP32-значения v в целочисленное q) и деквантования (восстановление приближённого FP32-значения \tilde{v}) описываются формулами:

q = \text{round}\left(\frac{v}{S} + Z\right) \tilde{v} = S \cdot (q - Z)

Важно отметить, что нулевое значение FP32 отображается в целочисленный zero-point Z, что позволяет корректно обрабатывать операции с обнулением (например, padding).

Симметричное vs. асимметричное квантование

Выбор между симметричным и асимметричным квантованием определяет, как именно FP32-диапазон отображается на целочисленный.

Симметричное квантование предполагает, что исходный FP32-диапазон симметричен относительно нуля: [-a, a]. Этот диапазон отображается симметрично на целочисленный диапазон, например [-127, 127]. Ключевая особенность: значение 0.0 отображается в целое 0, поэтому zero-point Z = 0. Требуется только один параметр — масштаб S. Симметричное квантование упрощает вычисления, но может быть менее точным, если распределение данных не центрировано относительно нуля.

Асимметричное (аффинное) квантование не предполагает симметрии распределения. Точный диапазон [v_{\min}, v_{\max}] отображается на полный INT8-диапазон [-128, 127]. Требуются два параметра — масштаб S и zero-point Z. Асимметричное квантование лучше captures асимметричные распределения весов и, как показывает практика, часто даёт более высокую точность.

На практике веса обычно квантуют симметрично (их распределения часто центрированы около нуля), а активации — асимметрично (например, выходы ReLU всегда неотрицательны).

Нелинейное квантование

Помимо линейного квантования, существуют нелинейные схемы, которые пытаются лучше адаптироваться к распределению данных. Например, NF4 (NormalFloat 4-bit) оптимизирован для нормально распределённых весов, а FP4 — для равномерно распределённых. Такие форматы особенно популярны в контексте квантования больших языковых моделей (LLM).

Классификация методов

По времени применения: PTQ и QAT

Это фундаментальное разделение, определяющее, на каком этапе жизненного цикла модели применяется квантование.

Пост-тренировочное квантование (Post-Training Quantization, PTQ)

PTQ применяется к уже обученной полной точной модели без дообучения. Процесс включает:

  1. Сбор калибровочного датасета — небольшого набора репрезентативных входных данных (обычно 300–500 примеров).
  2. Однопроходный (или многопроходный) инференс для статистического анализа распределений активаций.
  3. Вычисление параметров квантования (масштабов и zero-point'ов) на основе собранной статистики.
  4. Непосредственное применение квантования к весам и активациям.

Преимущества 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 бита (тернаризация). Веса и активации принимают значения из множества \{-1, +1\} (бинарные) или \{-1, 0, +1\} (тернарные).

Бинарные сети позволяют заменить сложные операции умножения-накопления (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 — спектр доступных решений постоянно расширяется. Понимание математических основ квантования и знание доступных инструментов позволяют принимать осознанные решения, балансируя между тремя ключевыми метриками: размером модели, скоростью инференса и точностью.

См. также

Литература

  • 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-моделей.

Категории

Личные инструменты