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

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
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
Self-Supervised Flow Matching for Scalable Multi-Modal Synthesis
[Статья][Блог]

Ранее в работе REPA было показано, что выравнивание внутренних представлений сети с неким внешним энкодером, обученном на большом обьеме данных.

Однако, возникает вопрос - а какой энкодер брать, и как именно выравнивать признаки? Да и как-то оно не из первых принципов.

Ребята из Black Forest Labs предложили Self-Supervision на основе признаков самой диффузионной модели с более низкого уровня шума.
👍3
🔬 Метод

Первое наблюдение, которое делают авторы, что сила энкодера не всегда соответствует качеству генерации. Например, переход от DINOv2 к DINOv3, DINOv2-B к DINOv2-L ухудшает качество, хотя, казалось бы, внешняя модель должна была выучить лучшие репрезентации.

Потому предлагают выравнивать представления от самой модели на разных уровнях шума. Но как это правильно сделать 🤔?

Пробовали некоторые токены полностью зашумлять или зашумлять все независимо. Но это приводит к несовпадению между обучением и инференсом и только просаживает качество.

Вместо этого решили сэмплировать два времени - t и s - независимо, и часть токенов зашумлять на меньший шум, а часть - на больший.

Уже это как-то работает. Но еще лучше, если добавить лосс выравнивания (косинусную близость) между признаками ученика с входом зашумленным с разным силой и учителем (ЕМА ученика), зашумленным на меньший из шумов. Причем выравнивают более ранние (ближе к входу) признаки ученика с признаками учителя.

Итоговый лосс есть сумма flow-matching лосса и лосса выравнивания.

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

Подход валидируют для 3 модальностей - text-2-image, text-2-video, text-2-audio и для мультимодальной генерации.

Для экспериментов на ImageNet берут SiT с SD автоэнкодером в базовой постановке. Self-Flow работает немного лучше, чем REPA и заметно лучше, чем бейзлайн SRA. Self-Flow помогает даже поверх RAE.

На text-2-image генерации Self-Flow тоже лучше SRA. REPA и SigLIP2 не помогают text-2-image генерации.

На видео 📹 генерации Self-Flow снова заметно улучшает метрики. Внешние автоэнкодеры (V-JEPA, DepthAnything) только просаживают качество.

И аналогичная картина наблюдается для аудио 🔉.

Кроме того, учат модель которая одновременно умеет в 3 модальности и video-action модель.

С увеличением размера моделей разница с REPA только растет (судя по CLIP Score).

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

💡 Выводы

Выглядит как универсальный и при этом достаточно простой рецепт ускорения претрейна для диффузионных моделей. Интересно, использовались ли данные наработки при обучении семейства Flux2, или додумались уже позднее?
👍3
Видать давление со стороны Антропика и Гугла вынудило OpenAI зашевелиться.

Демонструют более эффективный tool use в сравнении с GPT-5.2, за меньшее число вызовов достигают лучшего качества. И якобы качество кодинга при той же latency чуть лучше, чем у специализированной GPT-5.3-Codex.

https://openai.com/index/introducing-gpt-5-4/
👍6