Глубокое обучение
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 модели.
Предварительные знания
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