Глубокое обучение

Quantization и Pruning

GPT-4 - 1.8 триллиона параметров. Запустить его на телефоне невозможно. Но LLaMA-3 8B после INT4 квантования занимает 4GB и работает на MacBook Air. Разрыв между research и production - это задача model compression. Каждое приложение Siri, Google Translate on-device, автодополнение клавиатуры - это сжатые и оптимизированные нейросети.

  • **Apple Neural Engine** запускает сжатые модели прямо на устройстве: Face ID, Siri, Live Text - INT8/INT4 модели в чипе A17 Pro
  • **llama.cpp** запускает LLM в INT4/INT3 на обычных CPU - LLaMA-3 8B работает на MacBook Air при 30+ токенов/сек
  • **DistilBERT в Bing Search** обрабатывает миллиарды запросов в день с 60% меньшей latency по сравнению с полным BERT
  • **TensorRT (NVIDIA)** автоматически оптимизирует модели под GPU: INT8 calibration + operator fusion даёт 5-8x ускорение инференса

From Optimal Brain Damage to Deep Compression

Прунинг старше большей части deep learning. В 1989 Yann LeCun, John Denker и Sara Solla опубликовали 'Optimal Brain Damage', используя информацию второго порядка для удаления неважных весов из обученной сети. Идея ждала десятилетия моделей, достаточно больших, чтобы в ней нуждаться. В 2015-2016 Song Han, Huizi Mao и Bill Dally объединили прунинг, квантование и кодирование Хаффмана в 'Deep Compression', сжав сети примерно в 35-49x без потери точности и получив награду за лучшую статью на ICLR 2016. Их работа вместе с int8 квантованием стала фундаментом каждой современной on-device модели.

Предварительные знания

  • Neural Architecture Search
  • Transfer Learning и Fine-Tuning

INT8 квантование

**Нейросети обучаются в float32 (4 байта на вес), но для инференса это избыточно.** INT8 квантование представляет веса и активации 8-битными целыми числами (1 байт). Выигрыш: 4x меньше памяти, 2-4x ускорение инференса на CPU/NPU, которые имеют специализированные INT8 инструкции. Ключевая задача: калибровка scale/zero-point для минимизации ошибки квантования.

GPTQ (2022) - пост-обучающее квантование для LLM. Квантует веса в INT4 (или INT3) слой за слоем, компенсируя ошибку через решение задачи наименьших квадратов. LLaMA-2 70B после GPTQ помещается в 35 GB (vs 140 GB float32) с потерей качества < 1% на большинстве бенчмарков. GGUF формат и llama.cpp используют GPTQ-подобное квантование для запуска LLM на CPU.

В чём разница между dynamic и static quantization?

Mixed Precision Training (FP16/BF16)

**Mixed precision training** использует float16 или bfloat16 для вычислений (прямой и обратный проход), но хранит master copy весов в float32 для стабильности. NVIDIA Tensor Cores специально оптимизированы для FP16 матричных умножений: A100 даёт 312 TFLOPS FP16 vs 77.6 TFLOPS FP32 - 4x ускорение при том же железе.

BF16 (brain float 16) vs FP16: BF16 имеет тот же dynamic range что float32 (8 бит экспоненты), но меньшую точность мантиссы (7 бит vs 10 у FP16). Для deep learning dynamic range важнее точности - BF16 устойчивее к numerical instability. Google TPU изначально работали в BF16, NVIDIA A100 добавил аппаратную поддержку BF16.

Зачем при mixed precision training хранить master copy весов в FP32, если вычисления в FP16?

Structured Pruning

**Pruning** удаляет ненужные веса или целые структурные элементы. Unstructured pruning обнуляет отдельные веса (sparse tensors) - теоретически до 90% весов можно обнулить без потери качества, но ускорения на GPU нет: спарсность нерегулярная, GPU любят плотные матрицы. Structured pruning удаляет целые нейроны, фильтры, слои - ускорение реальное.

Magnitude-based pruning (удаляем малые веса) работает хуже, чем movement pruning при fine-tuning трансформеров. Интуиция: в большой предобученной модели малые веса могут быть критичны для downstream задачи. Lottery Ticket Hypothesis (Frankle & Carbin, 2019): в случайно инициализированной сети существует sparse sub-network (winning ticket), способная обучиться до того же качества.

Unstructured pruning обнуляет 90% весов ResNet-50, но инференс на GPU не ускоряется. Почему?

Knowledge Distillation

**Knowledge Distillation (Hinton et al., 2015):** маленькая student-модель обучается имитировать не только правильные ответы, но и «мягкие» вероятности большой teacher-модели. Мягкие метки несут больше информации, чем one-hot: если teacher даёт 0.7 для «кошки» и 0.2 для «рыси» - это говорит о сходстве классов, чего нет в жёстких метках.

DistilBERT от HuggingFace - классический пример production distillation: 6 слоёв вместо 12, дополнительная дистилляция hidden states и attention matrices. Обучен за 90 часов на 8 V100 (vs 4 дня на 64 V100 для BERT). Используется в системах, где latency критична: поиск Bing, on-device NLP на iOS/Android.

Квантование в INT8 всегда даёт 4x ускорение инференса

Реальное ускорение зависит от железа, типа операций и overhead. На CPU INT8 даёт 2-4x, на GPU - меньше (Tensor Cores оптимизированы под FP16, не INT8 для всех операций)

Теоретическое 4x следует из 4x меньшего размера данных. Практически, memory bandwidth - не всегда bottleneck; compute-bound слои (большие matmul) ускоряются больше, чем memory-bound (BatchNorm, небольшие conv)

Зачем в knowledge distillation используется temperature T > 1 для softmax?

Ключевые идеи

  • **INT8 PTQ:** калибровка scale/zero-point на representative data; static quantization быстрее dynamic; GPTQ делает INT4 для LLM
  • **Mixed Precision:** FP16/BF16 для вычислений + FP32 master weights; GradScaler предотвращает underflow градиентов; 4x FLOPS на Tensor Cores
  • **Structured Pruning:** удаляет целые фильтры/нейроны - реальное ускорение; unstructured sparsity на GPU ускорения не даёт
  • **Knowledge Distillation:** мягкие метки teacher несут информацию о межклассовых сходствах; temperature > 1 сглаживает вероятности

Связанные темы

Compression техники тесно связаны с архитектурными решениями:

  • Neural Architecture Search — Hardware-aware NAS и quantization решают похожую задачу с разных сторон: NAS выбирает архитектуру, compression оптимизирует готовую
  • Self-Supervised Learning — BYOL и DINO используют self-distillation: online network учится у EMA-teacher - тот же принцип, что knowledge distillation
  • Deep Learning System Design — Model compression - обязательный этап MLOps pipeline перед production deployment, особенно для edge и mobile

Вопросы для размышления

  • Lottery Ticket Hypothesis утверждает, что в каждой сети есть sparse sub-network, способная обучиться до того же качества. Если это так, почему мы не обучаем sparse сети с нуля вместо того, чтобы прунить плотные?
  • GPTQ квантует LLM в INT4 с потерей < 1% на большинстве задач, но на математических бенчмарках деградация 5-15%. Что это говорит о распределении информации по весам в LLM - равномерно ли оно?
  • TensorRT автоматически выбирает precision (FP32/FP16/INT8) для каждого слоя. Какие слои лучше оставлять в FP32, и почему - activation functions, normalization layers, или что-то ещё?

Связанные уроки

  • dl-18 — NAS и сжатие вместе дают эффективные модели
  • dl-20 — Квантизованные модели - основа serving-инфраструктуры
  • dl-12 — Mixed precision переиспользует инструменты распределённого обучения
  • la-15-svd — Низкоранговое SVD сжимает матрицы как структурный pruning
  • ml-46-model-serving — INT8-модели снижают задержку и стоимость в serving
  • aie-28-caching-optimization — Квантизация - стандартная оптимизация инференса LLM
  • la-04-matrix-ops
Quantization и Pruning

0

1

Войти