Репозиторий курса по сжатию и ускорению моделей машинного обучения. ИТМО 2025, направление магистратуры Искуственный интеллект.
📅 Среда – лекция 📅 Пятница – практика
План курса
Пара 1 - Введение в компрессию моделей машинного обучения.
1. Введение в тему:
- Что такое компрессия моделей и зачем она нужна?
- Основные задачи в компрессии моделей машинного обучения
- Проблема больших моделей: память, вычислительные мощности, скорость.
- Организационные моменты, как будет проходить курс итд
2. Почему компрессия особенно важна для NLP?
- Развитие больших языковых моделей (GPT, LLaMA, Mistral).
- Затраты на inference.
- Возможность запуска моделей на CPU, edge-устройствах.
3. Обзор существующих решений
- Hugging Face Optimum (для оптимизации моделей).
- AutoGPTQ (квантизация GPTQ).
- AWQ (адаптивная квантизация весов).
- ONNX Runtime, TensorRT, GGUF.
4. Как будет проходить курс?
- Формат занятий: лекция + практика.
- Разделение на команды по 4 человека.
- Выбор моделей для оптимизации.
- Финальный проект: оптимизация и сравнение производительности на примере реального проекта.
Практика:
1. Выбор моделей для оптимизации
- Cтуденты в командах выбирают модели (можно взять стандартные из Hugging Face, например BERT, DistilBERT, LLaMA, Mistral, Whisper и т.д.).
- Если есть свои проекты – можно взять собственные модели.
2. Измеряем базовые характеристики
- Время инференса на CPU и GPU.
- Использование памяти.
- Размер модели.
- Качество модели.
3. Результаты фиксируем в таблице
- Делаем сравнительную таблицу по всем командам.
- Эти данные понадобятся потом, чтобы сравнить эффект компрессии.
4. Домашнее задание
- Разделиться на команды и выбрать модели.
- Провести базовые замеры производительности и загрузить результаты в общую таблицу.
Пара 2 - Методы снижения размерности.
1. Квантизация моделей
- Что такое квантизация и зачем она нужна?
- FP32 → FP16 → INT8 → INT4: как меняется размер и производительность.
- Пост-тренировочная vs. во время обучения.
2. Современные подходы к квантизации
- GPTQ (для inference): главная идея, как работает, плюсы/минусы.
- AWQ (адаптивная квантизация): зачем придумали, как улучшает производительность.
- Сравнение GPTQ vs. AWQ – в каких случаях лучше использовать.
3. Прунинг
- Какие бывают методы: Unstructured Pruning, Structured Pruning.
- Как влияет на производительность?
- Где чаще применяется: CV vs NLP.
4. Выбор инструментов
Pruning:
Для трансформеров / NLP:
- SparseML + Optimum (интеграция с HF, готовые рецепты).
- Hugging Face Movement Pruning (для активного прунинга при дообучении).
Для LLM (GPT, LLaMA):
- SparseGPT или LLM-Pruner.
Для общего случая:
- torch.nn.utils.prune (простота), Torch Prune (гибкость).
Quantization:
- torch.quantization (стандартный PyTorch).
- AutoGPTQ (библиотека для GPTQ).
- AWQ (библиотека для AWQ).
- transformers от Hugging Face (встроенные методы компрессии).
5. Практика
1. Готовим окружение
- Устанавливаем AutoGPTQ, AWQ, torch.quantization, optimum.
- Загружаем выбранные модели.
2. Проводим квантизацию
- FP16 и INT8 через torch.quantization.
- GPTQ через AutoGPTQ.
- AWQ через AWQ.
3. Сравниваем производительность
- Время инференса.
- Потребление памяти.
- Качество модели (если NLP – можно замерить perplexity).
4. Добавляем прунинг
- Убираем нерелевантные веса.
- Смотрим, как изменяется производительность.
5. Записываем результаты в таблицу
6. Домашнее задание
- Попробовать квантизацию моделей своей команды с разными методами (FP16, INT8, GPTQ, AWQ).
- Применить прунинг и замерить, как изменилось время инференса и качество модели.
Пара 3 - Кластеризация весов моделей.
1. Что такое кластеризация весов?
- Идея: заменить уникальные веса модели на меньший набор центроидов.
- Чем-то похоже на квантизацию, но с более сложной обработкой.
- Сильнее сжимает, но требует дополнительной декомпрессии на инференсе.
2. Как работает кластеризация?
- Использование k-means для группировки весов.
- Заменяем веса центроидами, храним индексы.
- Гибридный подход: кластеризация + квантизация.
3. Где применяется?
- Чаще встречается в CV (сверточные сети, MobileNet).
- В NLP используется реже из-за потери точности и высокого влияния на активации.
- Возможные кейсы для NLP: кластеризация в self-attention блоках.
5. Инструменты для кластеризации
- torch.nn.utils.prune + k-means.
- TensorFlow Model Optimization Toolkit (TFMOT).
6. Практика
1. Готовим окружение
2. Применяем кластеризацию к весам
- Запускаем k-means на слоях модели.
- Создаём матрицу центроидов и индексов.
3. Оцениваем влияние на производительность
- Время инференса до/после.
- Изменение памяти (RAM/VRAM).
- Насколько ухудшилось качество (accuracy, PPL).
4. Сравнение с квантизацией
- В каких случаях кластеризация даёт лучший результат.
- Можно ли комбинировать методы?
5. Записываем результаты в таблицу
6. Домашнее задание
Попробовать самостоятельно реализовать кластеризацию весов для своей модели.
Загрузить результаты в общую таблицу.
Пара 4 - Дистиляция весов моделей.
1. Что такое дистилляция?
• Обзор подхода обучения модели student на выходах модели teacher.
• Как это помогает сжатию? (пример: DistilBERT vs. BERT).
• Разница между обычным обучением и дистилляцией.
2. Типы дистилляции
• Logit distillation – student обучается предсказывать распределение логитов teacher’а.
• Feature distillation – student обучается воспроизводить внутренние представления.
• Attention distillation – student перенимает attention-карты от teacher’а.
3. Где применяется дистилляция?
• NLP: DistilBERT, TinyBERT, MobileBERT.
• CV: EfficientNet-Lite, ResNet Distilled.
• Аудио и ASR: DistilWhisper.
5. Инструменты для дистилляции
6. Практика
- Подготовка окружения
- Загрузка teacher-модели.
- Применение методов дистиляции
- Делаем сравнительный анализ до/после дистилляции.
- Оцениваем влияние на производительность
- Размер student-модели.
- Время инференса (CPU/GPU).
- Изменение памяти (RAM/VRAM).
- Разница в качестве (accuracy, PPL).
- Сравнение с другими методами компрессии
- В каких случаях дистилляция эффективнее, чем квантизация или прунинг.
- Можно ли комбинировать дистилляцию с другими методами?
6. Домашнее задание
- Взять pre-trained модель и применить дистилляцию для её сжатия.
- Сравнить качество и производительность до/после, зафиксирвоать в таблице.
Пара 5 - Экспорт моделей в различные форматы Tensort, ONNX.
1. Зачем экспортировать модели?
-Оптимизация инференса (ускорение, снижение задержек).
-Снижение потребления памяти.
-Совместимость с разными фреймворками и библиотеками.
2. Популярные форматы экспорта
- ONNX
- TFLite
- TorchScript
- TensorRT
- OpenVINO
3. Где применяются экспортированные и ускоренные модели?
4. Практика
- Готовим окружение
- Загружаем модель.
- Экспортируем в разные форматы
- Запускаем инференс и оцениваем ускорение
- Делаем сравнительный анализ до/после экспорта.
- Сравниваем результаты
- Скорость инференса (до/после).
- Потребление памяти (RAM/VRAM).
- Размер модели.
6. Домашнее задание
- Попробовать экспорт своей модели в различные форматы.
- Сравнить производительность до/после.
Пара 6 - Автоматическая компрессия моделей, с применением Optimum, AWQ, AutoGPTQ:
Что это за фреймворк?
С какими видами моделей рабоатет?
Практика - Рассмотрим примеры и способы компрессии моделей с применением фреймворка Optimum от Huggingface
ДЗ: Применить к своим моделям и замерить производительность
Пара 7 - Примененеие компрессии в реальных задачах.
Разбор реального примера оптимизации моделей
Разбор задания финального проекта
Практика - Как запустить финальные проект
ДЗ: Оптимизировать модели и улучшить метрики производительности в финальном проекте, создав Pull Request.