КПД @quant_prune_distill Channel on Telegram

КПД

КПД
Квантование & Прунинг & Дистилляция

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
2,080 Subscribers
105 Photos
3 Videos
Last Updated 02.03.2025 15:57

Квантование, Прунинг и Дистилляция: Современные Технологии Сжатия Нейронных Сетей

Квантование, прунинг и дистилляция являются важными методами сжатия нейронных сетей, которые позволяют значительно улучшить их производительность и эффективность. Эти технологии стали особенно актуальными с ростом потребности в высокопроизводительных и легковесных моделях машинного обучения, способных работать на мобильных устройствах и в облачных системах. Квантование подразумевает сокращение битности параметров модели, что снижает требования к памяти и ускоряет вычисления. Прунинг, в свою очередь, включает в себя удаление избыточных весов из нейронных сетей, позволяя оставлять только самые важные связи. Дистилляция представляет собой процесс обучения более компактной модели на основе более сложной, что позволяет сохранить точность при уменьшении объемов модели. В данной статье мы подробнее рассмотрим каждую из этих технологий, их применение и преимущества в современных системах.

Что такое квантование нейронных сетей?

Квантование нейронных сетей — это процесс преобразования весов и активаций модели из чисел с плавающей запятой в более компактный формат, обычно в целые числа. Это позволяет значительно снизить объем памяти, необходимый для хранения модели, а также ускорить вычисления, особенно на специализированных аппаратных платах, таких как DSP или FPGA.

Квантование может быть статичным или динамичным. Статичное квантование происходит до начала инференса и применяется ко всей модели, тогда как динамичное квантование осуществляет преобразование в реальном времени на основе значений активаций. Это позволяет гибко подстраиваться под разное распределение данных и улучшает производительность на реальных задачах.

Как работает прунинг в нейронных сетях?

Прунинг — это техника удаления несущественных весов из нейронной сети, что приводит к уменьшению её размера и снижению вычислительных затрат при инференсе. Основная идея заключается в том, что не все веса в модели одинаково важны для достижения высокой точности, и, следовательно, можно удалить некоторые из них, не оказывая заметного влияния на производительность.

Существует несколько стратегий прунинга, включая обрезку по величине, которая удаляет веса с наименьшими абсолютными значениями, и обрезку по структуре, которая удаляет целые слои или нейроны, основываясь на их значимости для модели. После прунинга часто следует этап повторной тренировки для восстановления точности.

Что такое дистилляция в контексте нейронных сетей?

Дистилляция — это метод, позволяющий обучить более компактную модель (студент) под руководством более сложной модели (учитель). Учитель передает свои знания студенту, который при этом учится лучше обобщать данные, сохраняя при этом высокую точность предсказаний.

Процесс дистилляции включает в себя использование вероятностей выходов учительской модели в качестве целевой функции для обучения студента. Это позволяет студенту учиться на более богатом источнике информации, чем просто на метках классов, что может значительно повысить его обобщающую способность.

Каковы преимущества использования сжатия нейронных сетей?

Сжатие нейронных сетей, включая квантование, прунинг и дистилляцию, имеет множество преимуществ. Во-первых, уменьшение размера моделей позволяет их легче развертывать на мобильных устройствах и встроенных системах, где ресурсы ограничены. Во-вторых, это снижает задержку обработки и энергопотребление, что критически важно для реальных приложений.

Кроме того, сжатие нейронных сетей может предотвратить переобучение, улучшая обобщающую способность модели. Упрощенные модели также легче анализировать и интерпретировать, что делает их более предпочтительными для использования в ответственных областях, таких как медицина и финансы.

Когда лучше использовать квантование, прунинг и дистилляцию?

Выбор метода сжатия зависит от конкретных целей и ограничений проекта. Квантование наиболее эффективно, когда необходимо сжать модель для ускорения вычислений и уменьшения памяти в условиях ограниченных ресурсов. Прунинг лучше применять, когда есть необходимость удалить избыточные веса и улучшить производительность модели без значительных потерь качества.

Дистилляция полезна, когда требуется создать легковесную версию сложной модели, которая сохраняла бы её точность. В идеале, эти методы можно комбинировать для достижения наилучших результатов: например, сначала прунинг, а затем квантование уже сжатой модели.

КПД Telegram Channel

Канал 'КПД' (@quant_prune_distill) - это место, где вы найдете все о квантовании, прунинге и дистилляции нейронных сетей. Если вы интересуетесь темой сжатия сетей, то этот блог идеально подойдет для вас. Здесь собрана информация от древнейших времен до настоящего времени, чтобы помочь вам разобраться в этой сложной теме. Мы предлагаем самые свежие новости, исследования, и советы от экспертов в области машинного обучения. Присоединяйтесь к нашему каналу и станьте частью сообщества, увлеченного технологиями сжатия нейронных сетей. Узнавайте новое, обменивайтесь опытом и прокачивайте навыки вместе с 'КПД'.

КПД Latest Posts

Post image

Судя по всему, комменты генерит только драфт модель

Придется зареджектить

01 Mar, 20:22
681
Post image

Метод

Авторы замечают следующее:
🎯 Таргет-модель может за 2-3 токена отвергнуть корректное решение драфт модели.
🎯 Если в качестве драфта использовать даже более сильную модель, GPT-4o для Llama-3.1-405B, acceptance rate все еще не слишком высок.
🎯 Если драфт модель ошиблась, таргет-модель пытается корректировать ее. (The capital of France is Berlin... No just kidding. The capital of France is actually Paris.) 😄

Отсюда предлагается каким-то образом оценивать важность токенов на конечный ответ и принимать неважные токены, даже если их отвергла большая модель.

Датасет для обучения собирают следующим образом:
⚡️Отбирают примеры из Alpaca, ARC (только промпты)
⚡️Генерируют продолжения разными моделями - 🦙-ми, Мистралями
⚡️Отбирают вручную лучшие примеры

На выходе 500 примеров (вопрос, хороший ответ, плохой ответ). Все токены из правильного ответа и токены до места ошибки в неправильном ответе считаются как положительные примеры.

Полученный датасет несбалансирован, и потому в лоссе дается больший вес отрицательным примерам.

Классификатор - это просто линейная голова поверх признаков на выходе последнего слоя, которая учится за полтора часа.

Эксперименты

В качестве драфт-модели берут 🦙-3-8B, а таргет -🦙-70B, 80B. Качество замеряют на GSM8k, HumanEval, ARC-Challenge.

Для оценки скорости рассматривают как неоптимальный инференс через трансформерс, так и куда более эффективный GPT-Fast.

В качестве бейзлайнов рассматривают драфт-модель и topk принятие (т.е принимаем токен, если в top с наибольшей вероятностью).

Предложенный метод почти идентичен по качеству прогону таргет модели, и заметно лучше лрафта и topk. При этом удается достичь ускорения в 3-4 раза с GPT-Fast (против ~2 у стандартного Speculative Decoding и EAGLE-2) и до 10 раз при HF инференсе.

В ablation пробуют применяться в OOD сетапе - валидировать метод на HumanEval без примеров на код в обучающей выборке. Работает хуже, но все еще лучше, чем TopK.

Вывод

Хорошая идея с очевидной практической пользой. Приятно, что обучение требует довольно небольшого компьюта (меньше чем у того же EAGLE). Интересно, как метод себя покажет на более сложных reasoning задачах.

01 Mar, 20:16
731
Post image

Введение

Есть большие LLM, а есть не очень большие. Большие обычно работают лучше при прочих равных, но требуют большей памяти, объема вычислений и времени на шаг инференса.

Инференс LLM обыкновенно memory bound - скорость упирается во время загрузки/сгрузки весов из GDDR/HBM памяти в кэши, а не сами вычисления. То есть за один трансфер памяти потенциально можно было бы делать больше арифметических операций без существенного замедления.

При этом в большинстве случаев разница между более слабой моделью (называемой draft, т,е ‘черновой”) и некой большей (таргет) моделью невелика.

Отсюда возникает идея - генерировать много токенов один за другим более слабой моделью (Llama-3.1-8B), а затем проверять более “жирной” (Llama-3.1-405-B) с тем же словарем, (последнее требование не обязательно, но упрощает постановку). За один шаг можно “проверить” несколько токенов малой модели, и если все предсказания совпали (то есть наиболее вероятные токены у большой модели такие же, как у меньшой), — принять все, иначе - до последнего принятого токена.

Таким образом можно добиться генерации, идентичной выдаваемой большой моделью, за меньшее время. Данную идею предложили еще достаточно давно в статье Fast Inference from Transformers via Speculative Decoding еще в далеком 2022.

Но, есть существенный недостаток. На практике предсказания драфт-модели и таргет-модели расходятся очень быстро, всего через несколько токенов, поэтому слишком большого ускорения достичь не удается - обычно в районе 1.5-2x.

При этом для получения правильного ответа совершенно необязательно, чтобы предсказания каждого токена у меньшей модели совпадали с большей. Она может сказать то же самое, но другими словами, используя синонимы, например.

01 Mar, 20:13
711
Post image

Judge Decoding: Faster Speculative Sampling Requires Going Beyond Model Alignment
[Статья][Кода нет]

Давно хотел коснуться темы ускорения инференса авторегрессионных моделей за счет спекулятивного декодинга, но все никак не доходили руки, и наконец дошли.

Команда исследователей из 00, среди которых небезызвестный автор канала @ai_newz, представила метод, ускоряющий спекулятивный декодинг за счет оценки важности текущего токена и принятия большего числа по сравнению с базовым подходом, при этом практически без просадки в качестве.

01 Mar, 20:11
745