КПД – Telegram
2.85K subscribers
176 photos
6 files
369 links
Квантование & Прунинг & Дистилляция

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
🔬 Метод

В качестве метода квантизации предлагают использовать NVFP (а чего вы еще хотели от ребят из NVIDIA). Квантизация weight-only (активации не трогают).

LoRA адаптер встраивается в параллель к модели как в QLoRA.

RL осуществляется посредством пресловутого GRPO и его модификации DAPO.

Из интересного и нового - зашумление весов, которое способствует exploration 👀. Квантизация - своего рода тоже шум, но детерминированный, а хочется каждый раз какой-то новый. Можно добавлять аддитивный к весам, но это дорого, потому что требует хранить де-факто тензоров на еще одну копию модели в half-precision, а хотелось держать в памяти только квантизованную модели. Потому шум в конечном итоге накладывается в RMS-норме перед проекциями и он эквивалентен мультипликативному шуму.

Величина шума постепенно убывает с некоего максимального значение (1e-2) до минимального (5e-4) по экспоненциальному расписанию.

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

Метод валидируют на моделях семейства Квен-2.5. В качестве датасетов для обучения используют GSM8k и BigMath. Модели квантизуют через AWQ.

Качество замеряют на GSM8k, AIME24, AIME25, AMC, MATH 500.

NVFP квантизация перед началом обучения немного снижает качество, но меньше, чем NF4 из bits-and-bytes (стоит заметить, что битность NVFP4 больше). В процессе дообучения квантизованная модель с адаптером становится лучше half_precision + LoRA. Здесь, правда, имеет место опасение, что бейзлайно плохо заведен.

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

От выбора ранга LoRA результат не сильно меняется.

Декларируемое ускорение обучения - до 2x (на H100) против bf16 на маленьких батчах, и порядка 20% на батче размера 8 (длина последовательности 2k). NF4, напротив, работает медленее, чем bfloat16. Ускорение NVFP4 достигается за счет того, что авторы генерируют роллауты в memory-bound режиме, с эффективным Marlin-like кернелом. Большие батчи не влезают или авторы не пробовали 🤔?

💡 Выводы

Дообучение квантизованных моделей с LoRA адаптерами выглядит как рабочее и доступное решение для энтузиастов заалайнить модельку. Данная статья рассматривала сценарий memory-bound по весам модели. Интересно, насколько хорошо предложенная стратегия заведется в compute-bound режиме, при weight + activation NVFP4 квантизации (дабы задействовать всю мощь FP4 вычислений) и на очень длинных контекстах (где в первую очередь важно квантизовать кэш).
🔥5
Кринжовые задачки из GSM8k
😁15😱2🍓1
Каким способом вы предпочитаете задавать аргументы в питоновских скриптах?
Anonymous Poll
51%
argparse
18%
hydra-конфиги
2%
fire
2%
HF training arguments
28%
Аргументы? Просто меняю чиселки в скрипте.
SINQ: Sinkhorn-Normalized Quantization for Calibration-Free Low-Precision LLM Weights
[Статья] [Код]

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

И авторы сегодняшней статьи (народное название алкашки 🥂 тут не причем, это от фамилии Sinkhorn) предлагают типа дешевое и эффективное решение.
👍4🤨1
🔬 Метод

Существенным затруднением при квантизации БЯМ является наличие выбросов в весах и неравномерный диапазон значений в разных входных и выходных каналах.

Можно упрощать квантизацию с помощью поворотов или масштабирования (как в SmoothQuant). И предложенный метод похож на SmoothQuant, но с добавлением скейлинга на выходе.

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

Оптимизировать эту меру предлагается через модифицированный итеративный алгоритм Sinkhorn-Knopp (который в оригинале используется для приведения матрицы к двойной стохастической).

Сами итерации выглядят довольно просто - считаем стандарные отклонения строк и столбцов, делим на них, и повторяем до посинения сходимости.

Метод можно комбинировать с data-aware алгоритмами - типа GPTQ и AWQ.

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

Метод валидируют на моделях семейства Qwen-3 (включая 235B) и DeepSeek-V2.5 (V3 не смогли поместить на один хост, по всей видимости)

SINQ несколько превосходит data-free методы (bnb, HQQ) по качеству.

Замеряют не только стандартные бенчи, но и flip-ы (долю токенов, где argmax отличается у исходной и квантизованной модели), коя есть более устойчивая и монотонная мера.

SINQ с AWQ немного лучше data-free версии.

Квантизуются модели достаточно быстро - от 3с до 50с для 32B Квена 3. Для больших моделей почему-то не приводят время.

В качестве бейзлайнов фигурирует HIGGS. Но результаты подозрительно плохие, хуже, чем однородная int квантизация. Вероятно, забыли про Адамаровы повороты.

Кернелов под дополительный скейлинг на выходе пока не завезли. Замеров скорости нет.

💡 Выводы

Поиск скейлов предложенным образом выглядит концептуально новым. Дешевизна и простота метода при наличии удобных интеграций может снискать ему популярность. Однако кажется, что бейзлайны плоховато заведены судя по метрикам. Ну и оверхед на квантизацию, полезность при MXFP4/NVFP4 квантизации тоже немаловажны.
👀4
PLANNED DIFFUSION
[Статья] [Кода нет, во[MASK}но, [MASK]ируется]

Введение

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

И данная работа предлагает интересное решение - единую авторегрессионо-диффузионную модель, которая сначала набрасывает план 📝 решения авторегрессией, а затем диффузия генерирует по плану.
👍52
🔬 Метод

Авторегрессия в стандартной постановке предсказывается следующий токен на основе предыдущих, а маскированная диффузия - вероятность [MASK] токена стать токеном из словаря при условии окружающих токенов. Авторегрессия предсказывает по токену за раз, диффузия может сразу несколько, но для лучшего качества требуется обыкновенно несколько прогонов через модель.

Planned diffusion работает следующим образом:

1️⃣ Сначала авторегрессионно генерируется некий контекст и черновик для дальнейшей генерации. Предполагается, что есть несколько ветвей рассуждения, которые можно генерировать независимо, и для каждой из авторегрессия предсказывает сколько токенов надо расшумить.
2️⃣ Затем диффузия, имея контекст и заданное количество [MASK] токенов, генерирует какую-то ветвь.
3️⃣Затем происходит синхронизация и генерируется заключение.

Контекст размечается специальными <topic> (</topic>) тегами. Асинхронные параллельные блоки <async> (</async>) тегами. Точка синхронизации - <sync> тегом.

Рассматривают два случая - когда токены в параллельных ветвях не смотрят 🙈 друг на друга (PD), и когда смотрят 👀 (PD-DA).

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

На инференсе при авторегрессионой генерации можно использовать сгенерированный ранее KV-кэш, но для текущего шага диффузии из-за full attention все токены в ветви рассуждения генерируются по новой.

При декодировании диффузией используют энтропийный порядок - декодируются первыми те токены, где модель более уверенна.
👍4
🧪Эксперименты

Метод валидируют путем дообучения Dream-7B-Base, которую сначала учили на авторегрессию, а затем на диффузию.

Разметку для обучения собирают с помощью Gemini переформатируя примеры из Slim Orca в требуемый вид (план + ветви рассуждения). Неудачные примеры выбрасывают.

В качестве бейзлайнов берут просто авторегрессию, текстовую диффузию, и ускоренную диффузию Fast-dLLM.

Качество оценивают на AlpacaEval c LLM-as-a-judge, следуя некоему стандартному протоколу. Дабы получить лучший результат и честное сравнение для каждого из вариантов учат 2, 4, 8, или 16 эпох и выбирают лучшую модель. Для авторегрессии оптимальны 2 эпохи, для диффузионных постановок полезно учить подольше - 16 эпох.

Planned диффузия по качеству не сильно уступает авторегрессии, но при этом работает быстрее. В среднем удается добиться в 2.3 раза меньшего числа forward пассов по сравнению с AR, но конечное ускорение несколько меньше - 1.8x для независимых потоков, и 1.3x при dense-attention.

PD-DA несколько лучше по качеству, чем просто PD, но и медленнее (нельзя пропустить вычисления attention-а в некоторых блоках).

Далее ablaтят необходимость <topic> и <sync> тегов. При пропуске <topic> качество просаживается сильно, но от потери <sync> не сильно страдает и получается к тому же еще быстрее.

Кроме того, пробуют подавать на инференсе диффузии меньше или больше токенов, чем “спланировала” авторегрессия. Оптимальное качество достигается когда их столько же. Но если важна скорость - можно подавать более короткие цепочки [MASK] с умеренной просадкой.

💡 Выводы

На мой взгляд, довольно интересное исследование и постановка задачи. Как будто кажется естественным, что при работе над чем-то обьемным, мы сначала набрасываем план, черновик, а затем прорисовываем детали, шлифуем. Интересно, применима ли данная стратегия в других генеративных задачах и насколько масштабируется.
🤔41
🔥5🫡3😭2😁1
Точность имеет значение

У наиболее распространенного на данный момент для обучения формата bfloat16 всего 7️⃣ бит на мантиссу. Обычно полагается, что такой формат lossless с точки зрения обучения и инференса (есть работы указывающие на сложность в воспроизводимости результатов в bf16).

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

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

А дело в том, что в момент инициализации веса при RMS норме равны 1, и если обновление по величине не превышает 1e-3, то вес никогда не изменится.

В bfloat16: 1 + 1e-3 = 1

Собственно для таких ситуаций и нужна мастер копия в fp32.
👍39
INT v.s. FP: A Comprehensive Study of Fine-Grained Low-bit Quantization Formats
[Статья] [Код]

Введение

С увеличением потребности в удешевлении обучения и инференса все более остро стоит вопрос об обучении в более низкой точности. Одна зеленая компания сначала внедрила аппаратную поддержку FP8, а затем и FP4.

Однако почему FP, а не INT 🤔? NVIDIA в статьях и блогпостах никак не обосновывала данный выбор, потому мотивация остается тайной, покрытой мраком 🌚.

И группа ребят-тиктокеров 🕺 решила сравнить INT и FP в сопоставимых условиях.
🔬 Метод

Рассматривают 4 пары конфигураций квантизации:
📌 MXFP8/MXINT8
📌 MXFP6/MXINT6
📌 MXFP4/MXINT4
📌 NVFP4/NVINT4

MX-варианты квантизуются группами по 32 веса с E8M0 скейлами, а NV группами по 16 весов с E4M3 скейлами. И на FP / INT сетку значений, соответственно.

Исходя из предположения о гауссовости распределений, выводят формулы для ошибки квантизации (вернее SNR). Откуда следует, что при большом значении отношения максимального элемента к стандартному отклонению (при per-tensor квантизации или больших группах) предпочтительнее FP, а при малых группах - INT.

Реальные веса и активации не совсем гауссовы, но их можно сделать более гауссовыми Адамаровыми вращениями.

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

Эмпирически проверяют полученные законы на весах/активациях и градиентах Llama-3.1-8B. Оказывается, что без вращений FP форматы лучше, за исключением случая NVINT против NVFP. C вращениями MXINT8 лучше MXFP8, MXINT6 хуже MXFP6, MXINT4 хуже MXFP4, NVINT4 лучше NVFP4.

Затем смотрят на KL-дивергенцию c исходной моделью, утверждая что бенчи шумные и не репрезентативные. Без поворотов FP обычно лучше, с поворотами - наоборот,

Затем учат 1B и 3B модельки на 100B/200B токенах. MXFP8/MXINT8 по лоссу и бенчам +/- как исходная модель, лосс MXINT на тютельку ниже.

Потом говорят, что INT формат предпочтительнее, потому что жрет меньше энергии.

💡 Выводы

Данный результат в некоторой степени показывает, что зря NVIDIA (в угоду маркетингу? 💲) похерили поддержку INT в новых архитектурах. Особенно с учетом того, что при маленьких группах FP - не выигрышный вариант. Протокол сравнения немного вызывает вопросы - все-таки 0-шоты в post-training режиме тоже было бы не лишним привести. Ну и то, что Адамаровы вращения прямо сильно вредят float-у и помогают int-у тоже немного удивительно.
🤔2
Классная визуализация принятых на NeurIPS25 статей от небезызвестного Джея Аламмара.

При приближении крупные домены разбиваются на подобласти.
🔥18
Походу MoonShot-AI использовали нашу кодобазу MoE-Quant для квантизации модельки.

- Конфиг Kimi-K2-Thinking
- Скрипт конвертации в compressed-tensors

Мелочь, а приятно)
🔥31
CAGE: CURVATURE-AWARE GRADIENT ESTIMATION FOR ACCURATE QUANTIZATION-AWARE TRAINING
[Статья][Код пока недоступен]

Введение

С ростом масштабов и, соответственно, стоимости обучений больших языковых моделей все острее стоит вопрос эффективного обучения. В ряде прошлых работ (QuEST, Quartet, FP4 All the way, Training LLM with MXFP4) было показано, что можно успешно обучать с весами и активациями в низкой точности, применив некоторые специальные техники.

И данная работа продолжает работу в данном направлении, модифицируя алгоритм оптимизатора.
🔥41
🔬 Метод

В основе Quantization Aware Training (QAT) обыкновенно лежит STE (или его модификация), когда градиент просто пробрасывается через не дифференцируемую операцию квантизации. Трюк рабочий, но не имеет под собой теоретических гарантий.

Авторы предлагают рассматривать QAT как задачу оптимизации с ограничениями, и переходят к задаче безусловной оптимизации с множителем Лагранжа:

min L(w) = min L_orig (w) + λ (Q(x) - x)

величина λ определяет баланс между лоссом задачи и ограничением. Такая добавка математически эквивалента добавлению error feedback. И рассматривают два варианта - coupled/decoupled - где добавка подается в градиент или момент, но в итоге выбирают decoupled, как более удобный.

В качестве базового алгоритма оптимизации берут AdamW и CAGE отличается от него только наличием error feedback.

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

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

Метод валидируют, обучая семейство моделей Llama от 30 до 800 M параметров. CAGE стабильно дает некоторое улучшение по лоссу по сравнению с базовым алгоритмом QuEST для разных битностей.

Так называемая эффективная емкость (просадка по лоссу в scaling laws нормализованная на битность) примерно на 0.5 лучше по сравнению с QuEST.

CAGE успешно работает и с MXFP4.

На модельной квадратичной задаче SGD/Adam с STE не могут попасть в оптимум при 4-битной квантизации, а CAGE могет.

💡 Выводы

Метод выглядит вполне себе рабочим и интересным. Было бы интересно посмотреть его в действии на больших обучениях моделей на Blackwell чипах для MXFP4/NVFP4 форматов.
🔥71
Дискуссии между авторами и рецензентами, которые мы заслужили.
😁37🌚7👍4🤡21
На этой неделе ребята из команды YandexGPT совместно c ШАДом (Школа анализа данных) провели интенсив по работе с LLM 🤖, где были затронуты вопросы обучения, инференса и коммуникаций.

Материал довольно подробный и интересный, но требует определенной базы для вхождения.

В общем, рекомендую к просмотру всем интересующимся и желающим освежить знания.

Лекция 1: https://youtube.com/live/JMUWSdSD1Uk
Лекция 2: https://youtube.com/live/IAeAKcdMtsw
Лекция 3: https://youtube.com/live/BYiFv5PoMBw
Лекция 3.1: https://youtube.com/live/-52RgKQENl0
Лекция 4: https://youtube.com/live/VXI41kyQTPs
Лекция 5: https://youtube.com/live/AHMJICS2JQ0
Лекция 5.1: https://www.youtube.com/live/3v43mnx31OQ
🔥245👍4
Демка оценивающая оптимальный шаг обучения и размер батча для модели заданного размера, количества токенов на обучении и ширины эмбеда на основе формул из статьи про первый DeepSeek 🐋.

Оно еще предлагает конфигурации распараллеливания для разного количества нод.

Формула, правда, ломается для очень маленьких моделей.
👍12👀5
Пофиг на все остальное.

Главное, что ARC-AGI 2 заметно подрос.
👍153😁2🔥1💩1