2.98K subscribers
201 photos
6 files
400 links
Квантование & Прунинг & Дистилляция

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
😁22😱61🔥1🥴1
Generative Modeling via Drifting
[Статья] [Ноутбук]

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

Тем не менее одношаговые модели все еще заметно отстают от многошаговых.

И в рассматриваемой работе авторы из MIT и Гарварда, среди которых зателся небезызвестный Кайминь Ге, предложили новую генеративную парадигму под названием Drifting (дрейф), достигающую state-of-the-art качества при одношаговой генерации.
👍6
🔬 Метод

Процесс генерации представляет собой преобразование из некоего исходного распределения (например, Гауссианы) в целевое распределение данных. На языке умных это называется pushforward (толкайвперед). И задача генеративного моделирования найти хороший толкайвперед.

Обновление параметров нейронной сети соответствует дрейфу сэмплов. И задача найти такое дрейфовое поле V, такое что когда моделируемое распределение равно целевому, дрейфа нет.

И одним из возможных решений является антисимметричное дрейфовое поле.

Итеративный процесс имеет вид:
f_{t+1} = f_{t} + V(f)

И лосс функция
L = || f_{t} - stopgrad(f_{t} - V(f)) ||

Т.е зануление поля.

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

Важным оказывается считать ядро не в исходном пространстве (латентном или пиксельном), а в пространстве признаков некой модели - SimCLR, MoCo, MAE.

Кроме того, метод из коробки поддерживает гайденс с отталкиванием от unconditional распределения.

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

Метод валидируют сначала на игрушечных датасетах, а затем на Имадженете 256x256.

Показывают, что лосс хорошо коррелирует с визуальным качеством.

На имадженете ставят новый рекорд по FID (1.54) при одношаговой генерации (обходя iMeanFlow-XL). При этом их модель меньше - 475М параметров против 610M у iMeanFlow-XL.

В ablation демонстируют, что:
▶️ Важно брать достаточно много сэмплов для оценки распределения в ядре. Причем брать положительных примеров столько же сколько и отрицательных.
▶️ Важно считать поле в пространстве эмбеддингов какой-то модели иначе не работает. Лучше всего себя показывает диффузия в пространстве MAE, работающем в латентном пространстве и дообученном на классификацию.
▶️ Антисимметрия важна, иначе заметно хуже.

Работает хорошо как в пиксельном, так и латентном пространстве.

Кроме того, еще тестируют свой подход в приложениях к роботехнике 🤖.

💡 Выводы

Выглядит довольно интересно и инновационно. Интересно, воспроизведется ли хорошее качество одношаговой генерации на t2i задачах, эдитинге изображений и других более сложных задачах.
🤔43👍3
DASH: Faster Shampoo via Batched Block Preconditioning and Efficient Inverse-Root Solvers
[Статья] [Код]

Оптимизатор с названием Шампунь (Shampoo, а есть еще и мыло 🧼) неплохо показал себя в ряде приложений - выдал лучшую сходимость по wall-clock time на AlgoPerf бенчмарке. Кроме того, обученные им модели устойчивы к квантизации.

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

В данной статье предлагают ускоренную и распределенную реализацию Шампуня - DASH (Distributed Accelerated SHampoo).
3👍3
🔬 Метод

Тот или иной механизм предобуславливания заложен во всех современных оптимизаторах. Адам использует диагональный предобуславливатель, не учитывающий взаимные корреляции между параметрами. Шампунь же опирается на внедиагональное приближение, имея при этом посильную сложность O(m^2 + n^2) для матрицы весов размера (m, n).

В Shampoo поддерживаются две матрицы L и R из произведений градиентов. От них считается степень -¼.

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

Взамен этого авторы предлагают два варианта итеративных алгоритмов для подсчета матричных корней:
1️⃣ CN - Coupled Newton Iteration
2️⃣ NDB: The Newton-Denman-Beavers 🦫 Iteration
Оба варианта требуют только операций матричного умножения, поэтому куда более hardware friendly. Кроме того, они более численно устойчивы, и позволяют проводить операции в fp16 вместо fp32.

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

Чтобы понизить асимптотическую сложность, предобуславливатель заменяют на блочно-диагональный с размером блока ~1k. Для батчевой обработки предобуславливатели для L и R стакаются в один тезнор и считаются одновременно.

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

Для валидации метода обучают семейство моделей архитектуры Llama-2 в Шиншилла-оптимальном сетапе.

При использовании разложения на собственные значения DASH дает ускорение порядка 20%. Для CN и NDB итераций ускорение от DASH в сравнении с распределенным Shampoo доходит до 3-4 раз. При этом валидационная перплексия на уровне бейзлайна в пределах шума.

💡 Выводы

Выглядит как серьезное ускорение Shampoo. Интересно 🤔, насколько оно окажется конкурентно способно Мюону в более боевой постановке - на большой модели и большом количестве данных.
👍21
— Знаешь, как заинтриговать?
— Как?
— Завтра скажу.

https://github.com/HKUST-C4G/diffusion-rm
😁18
[Отчет] [Документация] [Код]

Ребята из одной китайской компании с почти нецензурным в переводе на русский язык названием выкатили технический отчет про фреймворк оптимизации инференса БЯМов через квантизацию, спекулятивный декодинг, прунинг токенов и дистилляцию.
👍5
🔬🧪 Метод и эксперименты

Рассказ начинается с рецепта успешной квантизации в 2 бита модельки HY-1.8B-Instruct. Первым делом они меняют сетку квантизации с (-2, -1, 0, 1) на симметричную (-1.5, -0.5, 0.5, 1.5). Затем все это дело они тюнят примерно на 10% бюджета BitNet, предварительно настраивая параметры на меньшей подвыборке данных. Кроме того, отмечают важность отбора хороших данных. В итоге удается добиться довольно умеренной просадки по сравнению с базовой моделью и качества на уровне 4-битной PTQ. Полученная крохотулька выдает до 800 токенов в секунду на М4 и до 300 на Mediateковском проце.

Затем идет описание тернарной квантизации через Tequilla/Sherry.

В Tequilla предлагается решение неинформативных градиентов для весов, обращенных в 0, а именно на каждый зануленный вес добавляется bias, позволяющий пробрасывать градиент к весам.

В Sherry предлается 3:4 (3 ненулевых веса из 4) разреженный паттерн для хранения весов, и 4 подряд идущих веса пакуются в 5 бит, давая 1.25 бит на параметр в среднем. И им удается сделать такое отображение hardware-friendly.

Затем команда дообучает Llama-3.2 1B и 3B в этих форматах и получает качество лучше, чем при использовании BitNet рецепта.

Для PTQ предлагают LeptoQuant, оптимизирующий масштаб квантизации с учетом выбросов, что дает некоторое улучшение для FP8 квантизации.

Спекулятивный декодинг суть EAGLE-3.

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

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

💡 Выводы

Выглядит сама по себе либа довольно интересно. Вполне годится для приготовления небольших моделек под edge inference.
3
Forwarded from Осцилляции WaveCut (WaveCut)
Это было неизбежно: рано или поздно должны были появиться специализированные решения для инференса.
И вот, Taalas (бывшая команда из Tenstorrent) выкатили то, чего я так ждал — настоящий Direct-to-Silicon.

Ребята не стали мелочиться и буквально «запекли» модель в кремний. Никакой внешней памяти, никакого HBM, никакой сложной упаковки. Веса модели и архитектура — это и есть сам чип.

Цифры выглядят дико: 17,000 токенов в секунду на Llama 3.1 8B.
Это на порядок быстрее текущей SOTA GPU, при этом чип стоит в 20 раз дешевле в производстве и потребляет в 10 раз меньше энергии.
Самое крутое, что это не просто красивые слайды для инвесторов. Железо уже существует, и его можно «потрогать» (ссылка на демо внизу).

Конечно, это ASIC, и тут есть нюанс: чип заточен под одну конкретную модель. Но Taalas продумали этот момент — они оставили поддержку LoRA-адаптеров и изменяемого контекстного окна. То есть это не совсем уж «кирпич», гибкость для файн-тюнинга остается.

Сейчас у них готов чип с Llama 8B (HC1). Весной обещают выкатить что-то среднеразмерное с ризонингом, а к зиме грозятся показать фронтир-модель на втором поколении кремния.

У меня голова идет кругом от мыслей к чему это может привести.


Ссылки:
Анонс
Демо (скорость реально впечатляет)
🔥239👍3
Тупая, как пробка, но невероятно быстрая
😁8🗿4
Слабо даже для Llama 3.1-8B.

Может оно еще квантизовано в 1 бит?)

(UPD как внимательно заметили, там 4 бита)
👍1
Ну лан, 2-битный AQLM.rs тоже не очень справляется
😁8👍2
Из новостей 📰

Небезызвестный Георгий Герганов, автор llama.cpp, GGML и GGUF, переходит к лицехватам 🤗. Утверждается, что они совместно продолжат развитие проектов Г.Г.

https://x.com/ggerganov/status/2024839991482777976
🔥29😁2
MatGPTQ: Accurate and Efficient Post-Training Matryoshka Quantization
[Статья][Код]

Некоторое время назад были представлены работы MatQuant и AnyPrecisionLLM, которые подготавливают модели, что можно с одного чекпоинта гонять в разных точностях.

Первая из них, увы проприетарная - ни код не модели, ни кернелы инференса не выложили. Кроме того, она требует специального дообучения - либо end-2-end, либо поблочной оптимизации а-ля OmniQuant. Вторая же не допускает многие методы квантизации - GPTQ/AWQ - и подгружает в память конфигурацию с максимальной битностью и отрезает динамически.

Команда из IST Austria предложила модификацию GPTQ, подготавливающую модель, такую что ее можно на инференсе подстраивать под заданную точность без дообучения.
2
🔬 Метод

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

Кроме того, для поиска оптимальной конфигурации под заданную битность опционально применяют EvoPress.

Под это дело пишут быстрые кернелы по типу Marlin под Ampere архитектуру. У реализации две особенности - транспонированный порядок вычислений для использования mma.m16n8k16 операции тензорных ядер, и батчовый кернел деквантизации для хитро запакованных весов.

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

На больших битностях (4-8) работает хуже, чем GPTQ, но дает заметный профит в 3-х битах. EvoPress дает некоторый прирост в сравнении с базовым алгоритмом.

Авторы репродуцируют MatQuant (OmniQuant вариант) и MatGPTQ показывает себя немного лучше на разных битностях.

Написанный кернел дает ускорение порядка 3‑х раз против bf16 для 3 бит, и 3.25 для 2 бит.

💡 Выводы

Кернелы хорошие, но пока в плане качества моделей метод кажется не слишком вкусным. Но при удобном интерфейсе мог бы стать неплохой альтернативной GGUFам.
Is Retraining-Free Enough? The Necessity of Router Calibration for Efficient MoE Compression
[Статья]

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

В данной работе пара корейцев предлагает дообучать роутеры через KL-дивергенцию на распределение исходной модели, для компенсации ошибок балансировки.
1
🔬 Метод

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

Expert Editing чаще всего подразумевает какое-то сжатие размерностей через SVD-like подход и иные матричные/тензорные разложения (квантизация/неструктурированный прунинг тоже сюда вписывается).

Слияние экспертов опирается на некоторые метрики похожести экспертов.

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

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

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

Метод валидируют на Mixtral-8x7b-Instruct и Qwen3-30B-A3B-Instruct-2507.

Дообучение роутера дает стабильный прирост на Qwen3 MoE где много finegrained экспертов, но на Mixtral особой пользы нет, по всей видимости, из-за того, что мало экспертов.

💡 Выводы

Довольна простая и почти очевидная техника для дообучения сжатых МоЕ. Минус, правда, что для больших моделей все равно придется делать обратный проход. Но может неплохо завестись в связке с квантизацией МоЕ, скажем, в 4 бита.
5