Skip to content

electriclizard/model-compression-2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

model-compression-2025

Репозиторий курса по сжатию и ускорению моделей машинного обучения. ИТМО 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.

Презентации

Занятие 1 Введение

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors