Telegram Web Link
Liger Kernel: Efficient Triton Kernels for LLM Training
[Техрепорт]
[Репозиторий]

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

Метод

В частности, Liger Kernel предлагает следующее:

⭐️ Зафьюженные RMSNorm и LayerNorm на прямом и обратном проходе
⭐️ Зафьюженные SwiGLU и GeGLU на прямом и обратном проходе
⭐️ Оптимизированный RoPE
⭐️ И самое интересное - оптимизация вычисления кросс-энтропии

По поводу последнего:

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

Бенчмарки

Замеряют на A100.

Предложенные нормализации дают хорошее ускорение по сравнению с торчом (не хватает сравнения с Apex). RoPE прямо знатно ускорился. SwiGLU и GeGLU по скорости такие же, как в торче, но снижают расход памяти в 1.6 раз.

В end-2-end сценарии гоняют finetune на 4A100 на Alpaca на Llama-3-8B, Qwen-2-7b, Gemma-1-7b. Скорость обучения возрастает от 10 до 40 %, и пиковый расход памяти уменьшается в среднем на 50%.

Метод также валидируют в связке с Medusa, методом где LLM учится предсказывать несколько следующих токенов за раз, и на каждый n+1 токен своя обучаемая голова. Liger Kernel снижает заметно расход памяти как с замороженной, так и обучаемой тушкой трансформера, благодаря трюкам с вычислениями логитов.

Использование

Liger Kernel можно вызвать по щелчку пальца через AutoLigerKernelForCausalLM или патчинг модели из 🤗. А можно импортировать модули и из них собрать модельку.

Liger Kernel уже интегрирован в transformers, TRL и axolotl.
👍10
В комментариях был задан резонный вопрос - а сравнивали с torch с или без compile?

Будучи лучшего мнения о людях, я полагал, что да.

Но если посмотреть в скрипты бенчмарков в репозитории проектов - compile не фигурирует нигде. RMSNorm берут сырой из modeling_llama.py в частности.

Хитрые собаки 🐶!
😢73😁2
EoRA: Training-free Compensation for Compressed LLM with Eigenspace Low-Rank Approximation
[Статья][Написание кода предоставляется читателю в качестве несложного упражения]

Введение

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

Метод

Метод прост как пробка.
1️⃣ Были у нас исходные веса W.
2️⃣ После сжатия имеем Wc.
3️⃣ SVD матрицы W - Wc
4️⃣ Берем сколько-то главных компонент и вставляем параллельно сжатым весам как LoRA адаптер.

При этом ничего не надо обучать.

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

Метод тестируют поверх 50% / 60% unstructured sparsity, 2:4 sparsity с SparseGPT в качестве алгоритма сжатия и 3/4-битной квантизацией GPTQ. В большинстве экспериментов берут ранг добавки равным 128. Проверяют на Llama-2 (7B и 13B), Llama-3 (8B).

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

Вывод

Простой и бюджетный способ накинуть немного качества за счет небольшого количества параметров и дополнительных вычислений.
Так как базовые методы сжатия data-aware (SparseGPT, GPTQ), то вместо SVD можно было бы использовать Reduced Rank Regression, и это бы работало, скорее всего, чуть лучше.
🔥9
Будь бы у меня дети, я бы их побенчмаркал на MMLU.
😁24🫡10
BitNet a4.8: 4-bit Activations for 1-bit LLMs
[Статья] [Репозиторий (пока не обновили код)]

Продолжение истории с BitNet от Microsoft.
1️⃣ В первой части была предложили бинарную квантизацию весов.
2️⃣ Во второй части вместо бинарной квантизации тернарная, но зато качество заметно возросло.

При этом активации квантовались absmax в INT8.

В данной статье фокусируются на сжатии активаций (в частности, KV-кэшей) в 4 и бита и меньше.

Метод

Авторы строят гистограммы весов активаций после линейных слоев. Выходы q, k, v, gate, и up неплохо описываются нормальным распределением. А вот out, down имеют тяжелые хвосты (потому тяжело квантизуются).

Поэтому предлагается квантовать в 4 бита активации только первой группы слоев, а для выхода out_proj (следуя работе QSparse, которую сам пока не читал 😂) прореживают активации через topk (с 50% sparsity).

Кроме того вместо swish в FFN gate применяют ReLU^2, чтобы форсировать прореживание активаций в down projection. Впрочем, так как паттерн случайный, использовать его для ускорения сходу не получится.

Также рассматривают FP4 квантизацию вместо INT4 с большим динамическим диапазоном.

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

Обучают семейство 🦙-подобных моделей от 700M до 7B параметров на Красной Пижаме. Причем обучают в 2 стадии, сначала с 8-битными активациями большее время обучения (как в BitNet1.58), а затем в перечисленных выше группы слоев квантуют в 4 бита (или прореживают).

⭐️ BitNet a4.8 (INT4/FP4) почти не уступает по качеству fp бейзлайну (не очень сильному, впрочем).
⭐️ ReLU^2 дает значительную (около 80%) степень разреженности в down_proj.
⭐️ Обучение чисто в INT4 не сходится в принципе. С FP4 гораздо хуже, чем предложенный вариант.
⭐️ ReLU^2 дает +/- тоже качество, что более традиционный Swish.
⭐️ Кэши квантизуют в 3 бита кроме <bos>, <eos> токенов, которые более чувствительны и поддерживаются 4 битными, без просадки в качестве по сравнению с 4-битными кэшами.

Определив хорошую конфигурацию, 2B модель обучают на 2T токенах и получают метрики, конкурирующие с хорошими fp16 моделями в той же весовой категории (Llama-3.2, gemma-2, Qwen-2.5). Впрочем, ребята из Мелкософта известны тем, что добавляют тест в train (как было в случае с моделями Phi) 😈.

Вывод

История с BitNet начинает выглядеть все более жизнеспособной, несмотря на весь мой скептицизм по поводу кустарности метода. Во всяком случае, история выглядит уже вполне рабочей. Тем не менее, было бы важно проверить, насколько хороши модельки в качестве чат-ботов, ежели выкатят веса.
👍8
Процесс чтения рецензий на ICLR

(впрочем, как и на любой другой Core A* конфе)
👍29
Scaling Laws for Precision
[Статья] [Кода нет, как и ресурсов у вас, чтобы воспроизвести]

Введение

Известно, что с увеличением размера модели и количества данных качество моделей (в некотором смысле - обычно по val лоссу) растет. Причем не абы как, а по простым степенным законом (а-ля Шиншилла). Также известно, что инферить большие модели тяжело и дорого, а методы квантизации позволяют существенно сжимать модели в пределах умеренной просадки качества. Есть наблюдение, что более современные LLM (Llama-3+, Gemma-2, Qwen2+) сжимаются заметно тяжелее 🥵, чем предшественники;

Отсюда вопрос, при заданном бюджете на обучение, какое оптимальное отношение числа токенов к размеру модели и битность квантизации?

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

Метод

Ниже:
D - количество данных
N - количество параметров модели
P - precision на обучении

Авторы обучают тучу моделей (465 штук а-ля 🦙) разного размера, битности (от 3 до 16) и с разным бюджетом обучения (вплоть до отношения числа токенов к параметрам 10^5). Тем самым авторы учитывают случай характерный для современных моделей, где перекос в сторону данных сильно выходит на Chinchilla-optimal закон (D/N = 2000 у Llama-3 против D/N=20 по Шиншилле).

Рассматривают 3 сценария:
1️⃣ Post-training Quantization. Учим во bf16 и квантизуем после обучения. Берут GPTQ, как ходовой и рабочий метод.
2️⃣ Quantization-aware training. Квантизуем по ходу обучения. Но только веса.
3️⃣ Low-precision training. Квантизуем во время обучения веса, активации и KV-кэши.

Предложенный scaling law для post-training квантизации имеет вид (P - precision, она же битность):
L(N, D, P) = AN^{-\alpha} + BD^{-\beta} + E + \delta_{PTQ} (N, D, P)
Где \delta_{PTQ} - прирост лосса, вызванный квантизацией.

Для QAT и Low-precision training:
L(N, D, P) = AN^{-\alpha} (1 - e^{P_{w} / \gamma_w}) (1 - e^{P_{a} / \gamma_a}) (1 - e^{P_{kv} / \gamma_kv}) + BD^{-\beta} + E
То есть, некоторые модификации исходного scaling law.
👍53
Эксперименты

Post-training Quantization

С увеличением количества данных на обучении (и качества модели), ошибка квантизации растет 🔼. Кроме того, ошибка для больших моделей фиксированном отношении D/N меньше 🔽 у больших 🔼 моделей.

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

Проанализировав зависимости, авторы выводят функциональную форму для \delta_{PTQ}, где ошибка растет степенным образом по количеству данных, убывает степенным образом по размеру модели, и растет экспоненциально с уменьшением битности.

QAT + Low-precision training

Далее авторы обучают модели, квантизуя либо только веса, либо веса и активации.

Оказывается, что эффект от квантизации можно описать как некую мультипликативную добавку к количеству параметров вида (1 - e^{P/gamma}). Т.е модель с квантизацией чего либо и эквивалентна модели с N (1 - e^{P/gamma}) параметрами. Коэффцициенты P, gamma свои у весов, активаций и кэшей. Кэши легче всего квантизуются, веса посередине, а активации тяжелее всего.

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

Предполагая, что у нас есть вычислитель, умеющий эффективно работать с любой точностью, авторы фиксируют бюджет обучения, определяемый как
C = 6 (P / 16) ND (16 от bf16) и ищут оптимум по лоссу.

Наблюдения следующие:
⭐️ Если учить в низкой точности, масштабировать размер модели надо быстрее, чем количество данных. (в Шиншилее, напомню, оптимально пропорционально)
⭐️ Compute-optimal precision не зависит от бюджета обучения и примерно равно 7 бит на параметр. Эксперименты проводят с INT-X, FP-X, floating-point чуть лучше, но общий вывод справедлив.

Отсюда замечание, что обучение в INT4/FP4 и более низких битностях может быть не оптимально.
8
Вывод

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

Интуитивно понятно, что сжимать модели до бесконечности невозможно, ибо так или иначе сеть должна в себе как-то хранить все знание о мире 🌍, но вопрос стоял именно в определении самих границ.

Крайне любопытно, что отношении оптимальной полученной битности к 16-ти близко к compute-optimal sparsity в Sparsity Scaling Laws (пост на КПД). Совпадение ли 🤔?

Кроме того, интересно, насколько полученные выводы справедливы для более навороченных векторных квантизаций (QuIP#, AQLM, QTIP) и что будет, если поменять точность обучения на ходу (учить в fp/bf16), прогнать PTQ, и далее QAT (Low-Precision Training).

Еще кажется, что полученные выводы будто бы находятся в расхождении с результатами BitNet, который исходя из полученных зависимостей должен быть дохрена не оптимальным и выдавать слабое качество.
👍8🔥3
Теперь с чистой душой можно лечь досыпать 😴
👍6😁2🙏1
я добрая училка
😁21👍3🫡3👎1
GPTQModel
[Репозиторий]

GPTQ в настоящий момент является одним из самых популярных методов квантизации весов LLM в ~4 бита как дающий некий хороший баланс между качеством и временем работы. Он выдает стабильно лучшее качество по сравнению с наивным Round-to-Nearest и иными data-free квантизациями, при этом масштабируется сравнительно легко на огромные LLM.

Оригинальный репозиторий тестирует сугубо работоспособность метода и не годится для приложений.

Значительную популярность (4.5к на гитхабе) набрала библиотека AutoGPTQ c а-ля лицехватским 🤗 интерфейсом и поддержкой различных моделей, а так же кернелов а-ля Marlin для эффективного инференса. К сожалению, maintainerы забросили либу, потому самые новые модели через нее квантовать не получится.

Ребята из ModelCloud продолжили их дело, создав GPTQModel, куда добавлены Llama-3.2, Qwen-2.5, и другие сравнительно новые модели.

Кроме того, авторы обещают более быструю калибровку (до 50%), быстрые замеры перплексии, и немного лучшие по качеству квантизованные модели.
👍15
Зубы заговаривают)
😁28
Catastrophic Failure of LLM Unlearning via Quantization
[Статья][Код]

Введение

LLM и прочие Foundational модели хранят в себе массу полезной информации.

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

Потому были разработаны разные техники unlearning, например, Gradient Ascent (градиентный подъем!) и NPO (Negative Preference Optimization), которые понижают правдоподобие нежелательных концептов.

Но действительно ли сеть забывает 😶‍🌫️ про них?

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

Метод

Авторы рассматривают два семейства методов забывания фактов:

🦋 Gradient Ascent , где оптимизационный процесс повышает кроссэнтропию нежелательного концепта
🦋 NPO, форма DPO (Direct Preference Optimization), с занижением правдоподобия того. что хочется забыть

Чтобы сеть не забывала кроме целевых концептов все остальное, параллельно с этим дообучают на данных как в обучающей выборке с выброшенными концептами (Retain Set), которые мы хотим забыть.

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

В качестве методов квантизации рассматривают RTN, GPTQ, AWQ. Выводы справедливы для всех методов.

Дабы заставить сетку быть устойчивой к забыванию, предлагается уйти достаточно далеко в пространстве параметров от исходных значений. Но чтобы не испортить сеть в целом дообучают только самые чувствительные к целевым концептам параметры. И в качестве метрики чувствительности используют норму градиента лосса “забывания”.

Можно было использовать маску произвольного вида, но чтобы сэкономить память авторы отбирают “чувствительные” веса на уровне слоев (т.е обучают только подмножество слоев). Называется сия конструкция, конечно же, Saliency-Based Unlearning with a Large Learning Rate (SURE).
🔥4👍3
Эксперименты

Метод валидируют на MUSE бенчмарке для забывания и датасетах NEWS (где нужно забыть новость) and BOOKS (забыть персонажей из Гарри Поттера). Какие модели используются, я не понял из текста. Кроме того, оценивают общие способности модели через MMLU, TruhtfulQA, TriviaQA, и энтропию n-грам на AlpacaEval.

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

Вывод

Факт забавный, хоть и в какой-то мере ожидаемый. Существует ли принципиальный способ заставить сеть забыть что-то увиденное? Техники снижения правдоподобия по всей видимости просто заметают это знание под ковер. Кажется, что требуется некая более глубокая хирургия с применением SAE и прочей модной лабуды.
👍5🔥3
The Super Weight in Large Language Models
Mengxia Yu, De Wang, Qi Shan, Colorado Reed, Alvin Wan
Статья: https://arxiv.org/abs/2411.07191
Код: https://github.com/mengxiayu/LLMSuperWeight

Очень прикольная работа про то, что внутри LLM можно найти один единственный вес, зануляя который мы обрушиваем качество работы модели в пропасть. Такие параметры авторы называют супер весами (super weights) и предлагают метод их нахождения за один forward pass.

Внутри обученных LLM находится группа весов-аутлаеров с большой магнитудой, они могут составлять порядка 0.01% от всех весов модели, что в случае миллиардных моделей всё равно сотни тысяч. Это было известно ранее. В текущей работе показывают, что внутри этой группы находится один единственный вес (тот самый super weight, SW), не обязательно самый большой, важность которого превышает суммарную важность тысяч других аутлаеров. Он необходим для качества, без него LLM не может генерить нормальный текст. Перплексия вырастает на несколько порядков, а точность на zero-shot задачах падает до рандома.

Ранее (https://arxiv.org/abs/2402.17762) были найдены супер-активации, критичные для качества. Они существуют в различных слоях, имеют константную магнитуду и всегда обнаруживаются в одинаковой позиции несмотря на вход. Текущая работа находит, что канал активации совпадает с оным для супер веса и сперва активация обнаруживается сразу после супер веса. Прунинг этого супер веса значительно уменьшает активацию, так что вероятно активация вызвана им, а не просто скоррелирована. Такие активации называются супер активациями (super activations, SA).

Предыдущая работа объясняла супер активации через bias terms, но не объясняла как они получаются и почему на одних и тех же местах. Сейчас авторы эмпирически нашли, что до down проекции (down_proj) произведение Адамара (Hadamard product) gate и up проекций (gate_proj, up_proj) создаёт относительно большую активацию. Супер вес далее усиливает её ещё и даёт супер активацию.

Напомню, что MLP блок в Ламе выглядит так:

out = down_proj( act_fn(gate_proj(input)) x up_proj(input) )

SW можно найти, анализируя спайки в распределениях входов и выходов down_proj. Для этого достаточен прямой проход с одним промптом. Авторы нашли супер веса для Llama (7B,13B,30B), Llama 2 (7B,13B), Mistral-7B, OLMo (1B,7B), Phi-3.

Провели эксперименты по обнулению SW, в том числе с восстановлением SA до исходного значения, чтобы проверить влияние SW на другие активации. Это восстанавливает 42% потери, то есть влияние SW на качество выше, чем просто через SA.

По анализу 500 различных промптов из Lambaba validation set видно, что при убирании SW вероятности стоп-слов сильно возрастают (а обычные слова соответственно занижаются). Для “the” это 2×, для “.” -- 5×, и для “,” -- 10×. То есть наличие SW как бы подавляет стоп-слова и позволяет генерировать осмысленный текст.

Другой интересный эксперимент скейлит супер веса с коэффициентами от 0 до 3 (где оригинальный режим работы соответствует значению 1) и оказывается, что при увеличении SW качество модели ещё немного возрастает. Это забавный результат.

Имея это знание, можно предложить специальный метод квантования: Super-outlier aware quantization. Стандартные механизмы квантизации могут быть недостаточно хорошими, так как аутлаеры искажают распределение, влияя на размер шага и увеличивая ошибки квантования. Здесь под super outliers подразумеваются и SW, и SA. Предложенные методы восстанавливают SW и SA после квантований с клиппингом и заменами на медианное значение. Это всё работает лучше дефолтных методов, главный вывод -- надо защищать супер веса. В статье есть подробный разбор экспериментов, кому интересно поглубже. Также новый метод меньше теряет в качестве с увеличением размера блока.

Прикольный результат в общем. Это всё несколько перекликается с темой про лотерейные билеты (https://www.tg-me.com/gonzo_ML/21), там внутри большой сети обнаруживалась сильно разреженная подсеть, обучая которую можно было достигать качества исходной сети (или даже выше). Интересно, входят ли супер-веса в лотерейный билет? Наверняка.
🔥163👀1
Классный обзор на классную статью)
👌3💯1
Pushing the Limits of Large Language Model Quantization via the Linearity Theorem
[Статья][PR в transformers]

SOTA векторные методы квантизации, такие как AQLM (+PV), QuIP#, QTIP, способны достигать умеренной просадки качества при сжатии в 2-3 бита, и почти без просадки (смотря на чем замерять) в 4 битах.

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

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

И коллеги @galqiwi и @black_samorez, совместно с корешами из IST, KAUST и MIT предложили новый, data-free (в большинстве сценариев) метод квантизации с переменной битностью слоев, который дает одновременно и хорошее качество в 3-4 бита и значительное ускорение.

Метод

State-of-the-art методы квантизации и прунинга для LLM по большей части оптимизируют ошибку на выходе линейного слоя, так как прямой учет лосса слишком затратен на масштабе.

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

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

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

Потому авторы применяют знакомые давним подписчикам канала Адамаровы вращения, которые убивают выбросы в весах и приводят распределение весов к нормальному i.i.d. А для нормального распределения существуют рассчитанные (численно) оптимальные решетки. Потому метод зовется Hadamard Incoherence and Gaussian MSE-optimal GridS (HIGGS). Причем рассматривается случай как скалярной, так и векторной квантизации. Векторная квантизация с 2-мерными кодбуками дает лучшее качество, чем скалярная, и при этом эффективно реализуется кернелами из библиотеки FLUTE.

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

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

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

Метод валидируют в традиционном сетапе для сжатия LLM на Llama-3.1, Llama-3.2 и Qwen.

По качеству предложенный подход заметно опережает data-free AF, NF, HQQ (особенно при сжатии в 3.25 бит) даже при однородном сжатии. Чем больше размерность векторов в квантизацианной решетке - тем лучше качество, но p=2 (2-мерная) оптимальна точки зрения баланса между скоростью и качеством.

Неоднородная квантизация неплохо накидывает по сравнению с однородной.

HIGGS квантизация с FLUTE кернелами гораздо быстрее (на RTX 4090) навороченных векторных квантизаций (AQLM, QuIP#, QTIP) и даже быстрее, чем Marlin кернел для батчового инференса (для скалярной однородной квантизации).

По метрикам метод превосходит GPTQ/AWQ и немного уступает SOTA векторным квантизациям. Но просадка компенсируется куда большей производительностью с точки зрения практической привлекательности.

Линейная модель работает достаточно точно вплоть до сжатия в 2.5-3 бита.

Выводы

Классный результат от коллег. Ждем одобрения PR в transformers для выкатки на широкую публику. Интересно было бы еще протестировать на диффузионках а-ля FLUX.
🔥93
Switti: Designing Scale-Wise Transformers for Text-to-Image Synthesis
📖Статья 🖥Код 📑Сайт проекта 🤗Демка

Введение

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

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

Однако, этой весной команда исследователей из ByteDance в работе VAR (Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction) предложила модификацию авторегрессионной парадигмы, где за один проход предсказывается не один патч, а все разрешение целиком. С помощью специальной аамодели - Residual Quantization VAE (вариационно кодировщика с остаточной квантизацией) - изображение разбивается на разные уровни: нижние уровни соответствуют общей семантике изображения, а верхние уровни - тонким деталям и текстурам. На нижних уровнях немного патчей, поэтому прогон модели на них дешев, и стоимость прогона возрастает с переходом на каждое следующее разрешение. На этапе генерации модель смотрит на все прошлые разрешения и генерируют текущее. Полученная картинка получается посредством суммирования всех разрешений.

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

Увы, генерация из фиксированного набора (1000 классов) не так интересна пользователям, как генерация по произвольным и разнообразным текстовым запросам. Поэтому для верификации жизнеспособности идеи последовательной генерации изображений по разрешениям требовалась проверка в более сложном и интересном сценарии.

Некоторое время спустя после выхода работы VAR вышли STAR и HART, которые адаптировали вышеупомянутый подход для генерации изображений по тексту. В этих работах удалось добиться сносного качества генерации и следования текстовому запросу, но все же далеко позади современных диффузионных генеративных моделей (таких, как SDXL, PixArt, Lumina).

Поэтому мы, исследователи из Yandex Research, решили обучить свою генеративную text-2-image модель.
10🔥3👍2
2025/07/09 07:35:17
Back to Top
HTML Embed Code: