Telegram Web
Как сделать text2image модель, которая по SbS бьет Midjourney?

1️⃣ Учишь модель, которая хоть иногда лучше Midjourney
2️⃣ Собираешь большой набор промптов
3️⃣ Прогоняешь Side-by-Side comparison
4️⃣ Отбираешь промпты, где ваша модель бьет Midjourney
5️⃣ Утверждаешь, что на внутреннем бенче добился победы над MJ
6️⃣ Stonks!
💯24😁6
On the Impact of Calibration Data in Post-training Quantization and Pruning
[Статья][Лаконичный ридми]

Введение

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

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

И в этой работе, авторы исследуют вопрос влияния калибровочных данных на качество data-aware методов сжатия LLMок.

Метод

Берутся 2 метода квантизации
1️⃣ GPTQ
2️⃣ SpQR (я польщен 😇)
И 2 метода прунинга
1️⃣ SparseGPT
2️⃣ Wanda

Модели квантизуют в 4 бита (SpQR в ~4.5 по факту), и прунят в 2:4 sparsity.

В качестве калибровочных данных рассматривают следующие источники:
1️⃣ C4 (бессмертная классика)
2️⃣ CNN-DM (новости, длинный текст хорошего качества, именно текст, не сами новости)
3️⃣ RedPajama
4️⃣ RefinedWeb
5️⃣ Wikipedia (английская)

Отовсюду берут 128 сэмплов длины 2048, как в статье GPTQ.

Качество замеряют на десяти 0-shot бенчах.

Берут 9 моделей:
1️⃣ Llama-1 (7B, 13B, 33B)
2️⃣ Vicuna, полученные из 🦙 выше
3️⃣ OPT (6.7B, 13B, 33B)
3
Результаты и наблюдения

1️⃣ Точность может сильно различаться между разными подвыборками из одного датасета.
2️⃣ Есть более и менее шумные задачи. BoolQ и RTE показывают наибольшую дисперсию.
3️⃣ Одни датасеты лучше других. В среднем RefinedWeb показывает лучшее качество, а Wikipedia худшее, но разброс значителен - между моделями и методами и нет четкого ранжирования.
4️⃣ Прунинг сажает качество моделей сильнее, потому и влияние данных более заметно, по всей видимости. Разброс для SparseGPT больше (ожидаемо, так как SparseGPT не только прунит, но и обновляет оставшиеся веса).
5️⃣OPTы более чувствительны к выбору данных, чем парнокопытные модели
6️⃣ Качество быстро насыщается с количеством калибровочных примеров для всех методов, кроме SparseGPT. (по нашим наблюдениям, чтобы выжать максимум из качества пара тысяч последовательностей все же нужна).
7️⃣ SparseGPT лучше Wanda (хотя исходная статья утверждала обратное). Логично, ибо Wanda есть де-факто кастрированный SparseGPT.

Выводы

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

Но кажется, что авторы набагали где-то...
🤔5
Compact Language Models via Pruning and Knowledge Distillation
[Статья][Код есть, хоть это поначалу и не очевидно]

Введение

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

Но если вы не гаражный стартап, а компания с триллионной капитализацией - вам он под силу.

Подданые кожаной куртки выпустили запруненные версии Nemotron-15B под названием Minitron-4B и Minitron-8B, которые по качеству якобы конкуретноспособны текущей SOTA в легком весе.

Метод

У трансформеров можно прунить:
☠️ Целые блоки (про что был обзор некоторое времчя назад)
☠️ Размерность признаков (был у вас d_model - 768, стал 512)
☠️ Головы в Attention
☠️ Внутреннюю размерность MLP

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

Для оценки важности используются критерии, основанные на активациях:
⭐️ Средний attention по голове (при прунинге головы)
⭐️ Средняя активация по каналу (для MLP)
⭐️ Средняя активация LayerNorm (для оценки важности признаков)

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

Рассматривают оценку важности one-shot, когда выкидываем все за раз, или итеративно, по чуть-чуть.

Далее выбирают некоторое (около 20) число конфигураций сжатых моделей с целевой степенью сжатия, сжимают модели и дообучают на 1.8B токенов. Берется самый перспективный кандидат и дообучается уже на ~100B токенов. Немало, но все же на 2 порядка меньше, чем у современных LLM.

На дообучении рассматривают сумму следующих лоссов:
1️⃣ Кросс-энтропию (исходный лосс)
2️⃣ KL-дивергенцию на логитах с несжатой моделью
3️⃣ L2 лосс между промежуточными признаками (так как сжатая модель может быть уже, есть матрица переводящая в размерность учителя)
👍12
Результаты

Качество замеряют на широком круге бенчей (всякие MMLU, Arc, Winogrande, HumanEval, …) и MT-Bench, IFE-Eval.

Основные выводы следующие:
1️⃣ Сжимать большую модель, дешевле чем обучать новую. На том же числе токенов хрен вы получите тоже же качество с нуля.
После дообучения нет разницы между one-shot и итеративным сжатием.
2️⃣ В ширину сжимать эффективнее, чем в глубину. (блоки прунятся хуже, чем каналы)
3️⃣ Базовый лосс не нужен, используйтк только дистилляционный.
4️⃣ Итеративная оценка важности не накидывает после дообучения кандидатов.
5️⃣ Если глубина уменьшена, дистилляция промежуточных признаков важна, иначе хватает только логитов.
6️⃣ Прунить лучше модель, как можно ближе к целевой по размеру (логично)
7️⃣ Короткое дообучение (1.8B токенов) дает более надежных кандидатов моделей для дальнейшего дообучения.
8️⃣ Если нужна instruct модель, лучше запрунить instruct модель, чем base и дообучить на инструкциях.

Minitronы выдают качество не хуже других Open-Sourcr моделей +/- того же размера:
⭐️ 8B как Llama-3-8B и Qwen-2
⭐️ 4B как Phi-2 и Gemma-2-it (только безлайны поменьше будут)

Конкурентные методы сжатия, поверх других моделей (Sheared-Llama, LLM-Pruner) сильно уступают).

Вывод

Структурированный прунинг - перспективная стратегия сжатия LLM, если есть ресурсы. Сильно не хватает экспериментов с квантизацией - комплиментарны ли оба подхода, или прунинг усложняет квантизацию?
👍10
типичный Area Chair и рецензенты
https://ok.ru/video/37602200235
🔥7
SpinQuant: LLM quantization with learned rotations
[Статья][Код]

Если в названии статьи встречаются вместе Spin и Quant - это наверняка что-то из области физики. Но нет, это снова про квантизацию LLM

Ранее в ряде работ (QuIP, QuIP#, QuaRot) было показано, что поворот на случайную ортогональную матрицу сильно облегчает квантизацию.

И в этой работе ребята из Meta предложили развитие идеи, дающее лучшее качество на Weight + Activation (+cache) квантизации.

Метод

Наличие выбросов в отдельных каналах активаций сильно затрудняет квантизацию (так как per-channel квантизация обычно не поддерживается в железе). Ортогональные матрицы “размазывают” выбросы в весах и активациях между каналами, так что все активации имеют примерно один и тот же порядок. Но конкретный выбор ортогональной матрицы имеет значение.

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

Случайные Адамаровы матрицы из QuIP гораздо лучше, но все разброс существенен и нет гарантий на оптимальность.

Потому предлагается искать “хорошие” матрицы поворота с помощью оптимизации на Stiefel многообразиях, параметризующих ортогональные матрицы. Оптимизация представляет собой градиентный спуск на многообразии. А именно Кэли SGD.

Есть 4 места куда можно вкрутить поворот:
R1 - В residual перед Attention и FFN
R2 - Между V и O матрицами в Attention
R3 - В Query/Key
R4 - Между активацией в FFN

Первые два поворота можно влить в параметры модели без изменения выходов модели, последние же придется считать на каждом прогоне. Потому предложенная процедура оптимизации применяется для поиска оптимальных R1, R2 матриц. А в случаях R3, R4 используют дешевые Адамаровы матрицы, кои практически не замедляют работу LLMки и почти ничего не весят.

Для оптимизации используют небольшой набор из Wikitext-2.

Результаты

Процедура оптимизации матриц занимает час с небольшим на меньших представителях семейства 🦙 на 8 A100 и полдня для 70B моделей.

Замеряют по классике качество на перплексии и 0-шотах.

Рассматривают 3 сценария:
1️⃣ Weight only quantization
2️⃣ Weight + activation quantization
3️⃣ Weight + activation + KV cache quantization

По качеству операжают бейзлайны (ближайший QuaRot примерно на 1% в среднем). В Weight-only quantization где-то бага при замерах AQLM и QuIP#, ибо эти методы сжимают модели почти без просадки (если верить бенчам, а не здравому смыслу) почти без просадки.

Метод работает как с RTN (Round-to-nearest), так и c GPTQ.

Важны все матрицы, но большой прирост дает будто бы добавление R4 - вращение внутри FFN.

Вывод

Квантизация весов/активаций и кэша в 4 бита на текущий момент, наверное, то что дает самое большое ускорение инференса на современных GPU, потому и представляет значительный практический интерес. И улучшение качества - это хорошо. При квантизации активаций (и кэша) просадки все еще значительные и есть куда улучшаться.
👍7
Fun with sparsity in PyTorch via Hadamard product parametrization
[Блог]

Занятный бложек про то, как можно сделать sparsity-inducing regularization.
Увидев слово Hadamard я триггернулся на Адамаровы матрицы, но нет, это Адамарово произведение.

Идея в следующем:
L1-регуляризацию можно представить как L2, c добавлением вспомогательных параметров u, так что исходный вес w параметризуется как w = u ⊙ v
для пар тензоров u и v.

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

Подход валидируют на табличной задаче с 500 признаками и двумя классами.

Сначала рассматривают логистическую регрессию реализованную в cvxpy, затем в торче.

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

В эксперименте берется небольшая MLP обучается на california_housing (известном всем табличникам) с некоторым коэффициентом регуляризации. Исходно было ~4500 весов, в полученной сетке остается около 600 ненулевых коэффициентов. Большинство каналов можно взять и вырубить.

Вся кухня имеет довольно прикольную реализацию через модуль torch.nn.utils.parametrize (см туториал). После задания такой параметризации, сети можно обучать не задумываясь вашим любимым оптимизатором с weight decay. Разве что в данном случае логичнее было брать AdamW, а не Adam.

В общем, прикольно. Но интересует масштабируемость.
6🔥3👍1
Если гитхаб и гитлаб заблочат, телегу с функционалом чатов можно использовать в качестве альтернативы)

⭐️ Сообщения с файлами - коммиты.
⭐️ Разные чаты - разные ветки.
⭐️ PR - пересылка файлов из одного чата в другой.

Прямо как в старые добрые времена на заре систем контроля версий.
😁26🥴82👍1🔥1
Из Double blind review

Вы пока полайкайте, а я потом шутку придумаю...
14😁12
[bibtex-tidy]

Наткнулся в интернетах на офигенную тулзу для наведения красоты в bibtex.

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

Кроме того, можно красиво отформатировать все (как black), отсортировать в алфавитном, так что любо-дорого будет глядеть.
🔥81
Когда собираешь свои статьи в один диссер
🔥27🤣7💯2
GIFT-SW: Gaussian noise Injected Fine-Tuning of Salient Weights for
LLMs

[Статья] [Код]

Введение

PEFT и квантизация - два понятия, которые за последние пару лет стали неразрывно связаны с большими языковыми моделями, особенно в контексте обучения и инференса в условии ограниченных ресурсов. И в сегодняшнем эфире будет сказ про немного необычное сочетание этих идей в работе от ребят из Cколтеха, AIRI и Вышки.

Метод

Вкратце напомню, что суть PEFT в до-обучении небольшого (по сравнению с размером исходной модели) числа параметров. Эти параметры могут быть как адаптерами к весами (как LoRA, DoRA, OFT), кои можно (или нельзя) влить в модель, а могут быть некоторым подмножеством весов исходной модели. Второй вариант еще называется в литературе Selective Finetuning и про него сегодня пойдет речь.

Метод основан на двух основных идеях:
1️⃣ Определении “чувствительных” весов, которые, с одной стороны не квантуются, а с другой являются тем самым подножеством обучаемых параметров.
2️⃣ Добавлении “шума” в процесс обучения.

Наличие выбросов в весах, затрудняющая квантизацию, известная особенность LLM (временами оспариваемая), и потому для улучшения качества их обычно держат в исходной точности. В данном случае, следуя LLM.int8() и QUIK выбросы определяются как уровне колонок матриц весов (входных размерностей). В качестве метрики берутся комбинации вида:

s_i = || D_i || ||X_i||_{\rho}^{\gamma}

Где \rho - норма весов в колонке, а \gamma - степень - {-½, 1, ½}.
D_i - это пертурбация весов, и в качестве пертурбации рассматривается операция квантования (скалярные однородная симметричная).

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

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

Итоговый метод выглядит следующим образом:

Квантизуем с помощью GPTQ все веса, за исключением “выбросов”. Затем до-обучаем через обычный бэкпроп эти колонки, а оставшимся весам добавляем нормальный i.i.d шум с std равным шагу квантизации.

Рассматриваются 3 стратегии:
1️⃣ Pre-GIFT-SW - сначала учим с шумом и выбросам, типа готовим модель к квантизации, а затем квантизуем
2️⃣ Salient FT - квантизуем и до-обучаем только “выбросы” без шума
3️⃣ Post-GIFT-SW - квантизуем и до-обучаем “выбросы” с шумом
🔥6
Эксперименты

Эксперименты проводят на Llama-2,3 (7B, 8B, 13B). До-обучают на инструкциях TULU2 и OpenOrca. Обучение идет 500 шагов (т.е довольно короткое). “Выбросы” определяются на основе 500 сэмплов из Pile. Для оценки качества берут среднюю точность на 5 бенчмарках из lm-eval.

Есть 2 сценария:

1️⃣ Instruction-finetuning fp16 моделей. В качестве бейзлайнов рассматривается файтьюн всей модели, и LoRA/DoRA адаптеры с примерно тем же количеством обучаемых параметров. Непонятно, однако, какой шаг квантизации для шума в данном сценарии (если есть).

2️⃣ Квантизация (в 2/3/4 бита) + Instruction-finetuning. В качестве бейзлайнов берут QUIK + LoRA, и STE, где “выбросы” обучаются обычным бэкпропом, а квантизованные веса через STE. Я только не понял, QUIK без или с квантованием активаций? Больно уж грустно смотрится.

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

При квантизации предложенный метод опережает QUIK и STE. Правда, есть более свежие и сильные бейзлайны - QuaRot и SpinQuant.

Из ablation study следует, что:
👉 Добавление шума во время до-обучения накидывает в качестве при квантизации в 2 бита.
👉 Большой разницы нет при разных опциях метрики определения выбросов. L∞ работает чуть лучше в среднем.
👉 Pre-GIFT-SW немного лучше при 4 битном сжатии, но при более аггресивном сжатии уступает альтернативам. При квантизации в 2 бита Post-GIFT-SW дает лучшее качество.

Вывод

Интересно, и неплохо по результатам. Сравнение с адаптерами, я бы рекомендовал перепроверить - не “шумят” они так на до-обучении. Еще любопытно, помогает ли добавление шума при до-обучении статистик квантования в методах типа PEQA и P-tuning (без V).
Вчера наша статейка Accurate Compression of Text-to-Image Diffusion Models via Vector Quantization попала в подборку статей Daily Papers на 🤗 про диффузию, что большая честь для нашего скромного авторского коллектива из Yandex Research.

Так-то не то, чтобы 🚀 science - по существу перенесли AQLM на задачу text-2-image генерации с помощью диффузионнок с учетом специфики и нюансов диффузионных архитектур (плохой из меня бизнесмен).

Проверяли подход на SDXL и SDXL-Turbo. В целом, вышло сносно, получше скалярной квантизации по качеству (c Q-Diffusion, PTQ4DM в качестве бейзлайнов). В 4 бита удается даже достичь паритета по Side-by-Side с оригинальной fp16 моделью. Здесь уместно заметить, что SbS куда более репрезентативная и содержательная характеристика, чем все эти ваши FIDы и CLIP-скоры. 3-битные модели по метрикам почти не отличаются от fp16 по метрикам, но просадка качества налицо (не у всех есть толока за пазухой, справедливости ради).

С практической точки зрения пока есть над чем работать: имеет место замедление инференса на 50%, ибо в отличие от огромных LLM, SDXL/SDXL-Turbo малипусики c 2.5B параметрами, которые кроме того обрабатывают большие тензоры активаций за раз, а не токен за токеном, потому вычисления compute-bound, а не memory-bound. Процедура деквантизации начинает сказываться на времени прогона через сеть. Потому модельки пока не выкладываем. Нынче модный FLUX-1 выглядит более перспективным кандидатом для прогонки метода, там и трансформер с большими матрицами, и 12B параметров. Как руки дойдут, попробуем и его посжимать.

Кроме того, запилили еще симпатичный сайтик а-ля Nerfies (credits to @Vahe527887).
🔥19👍4
Обман года.

2023 - LK-99
2024 - Reflection
😁183
Во вчерашнем посте на Kali Novskaya была разобрана статья Can LLMs Generate Novel Research Ideas? - про то, насколько хорошо нынешние LLMки умеют в генерацию наукоподобных статей.

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

Отсюда возникает идея 🤔 - давать вступительный экзамен рецензентам Core A* конференций, где им будут даны несколько публикаций от кожаных мешков и сгененированных условной гопотой или Sonnet. Если рецензент не способен адекватно отличить зерна от плевел - отфутболиваем ⚽️.

Проблема правда одна: кто ж рецензировать то будет...

Хотя было бы интересно посмотреть на рецензию GPT-4 с системным промптом Reviewer N2 😈.
👍18
Есть просто банк, есть банк столбов и матриц, а есть банк оптимальных решеток для квантования данных из нормального распределения...

Если конректно, чуваки собрали MSE-оптимальные решетки для числа точек от 1 до 5000 для одномерного нормального распределения, и для всех размерностей от 2 до 10 и числа точек от 1 до 1450 для многомерной гауссианы (с нулевым средней и единичной матрицей ковариации).

Решетки были найдены через Lloyd-CLVQ algorithm.

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

[Сайт проекта]
🔥92👍1🤨1
EDEN: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning
[Статья] [Код]

Квантизовать можно веса, можно активации. А что еще можно?

Правильно, градиенты! 👻

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

Метод

Идея квантовать градиенты для распределенного не нова - датируется еще 2016 годом (QSGD). Но данная работа предлагает ряд интересных идей (некоторые из которых мы узнаем в литературе вышедшей позднее, а сама статья 2021 года).

1️⃣ Случайные повороты
2️⃣ Оптимальные решетки квантования
3️⃣ Случайный прунинг
4️⃣ Энтропийное кодирование

В тензоре значения могут быть распределены, вообще говоря, самым произвольным и поганым (с точки зрения удобства квантования) образом. Но, известно, что если “повернуть” тензор некоей случайной матрицей, то с большой вероятностью полученные значения будут распределены как N(0, sigma^2). В качестве случайных поворотов используют (кто бы мог подумать!) - случайные Адамаровы матрицы. Каждый процесс хранит seed генерации, а главный сервер, зная этот seed на деквантизации, может применить обратное преобразование.

Решетку квантизации (а тут дело идет о квантовании в 1 и 2 бита) надо выбирать с умом. Потому берут не абы какие, а MSE-оптимальные (для 1 бита находится аналитически, для 2-ух численно).

Дабы увеличить сжатие - можно еще случайным образом запрунить ☠️ часть весов. Маску передавать при этом не надо - она как и вращение задается состоянием случайного генератора.

Решетки квантизации можно еще дотюнить при заданном ограничении на битность посредством Entropy-Constrained Vector Quantization.

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

И вся эта кухня идет с теоретическими гарантиями на ошибку аппроксимации.

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

Метод валидируют на синтетических распределениях и распределенном обучении. В качестве бейзлайнов рассматривают QSGD, Hadamard + SQ (Stohastic Quantization), Kashin + SQ. В качестве бенчей для распределенного обучения рассматривают EMNIST (с маленькой CNNкой) и Shakespeare (с LSTM). Не самые свежие и впечатляющие бенчи, но что поделаешь 😞.

EDEN наиболее точно приближает исходные данные (в сравнении с бейзлайнами), при этом по скорости не такой быстрый как QSGD, но быстрее Kashin + SQ (ближайший с точки зрения качества подход).

В 4 бита разницы вообще нет между EDEN и float обучением, в 2 и 1 бит появляется некий зазор в качестве, но не критичный, и EDEN стабильно лучше конкурентных подходов.

Вывод

Интересная с точки зрения математики и методологии статья. Кажется, что если бы публикация чуть дотерпела до тех времен (и у авторов был на то ресурс), когда квантовать LLMки стало мейнстримом предложенные идеи были бы обязательно применены в контексте сжатия LLM.
👍71🔥1🤯1
2025/07/13 20:10:47
Back to Top
HTML Embed Code: