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

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
Sora (Video generation models as world simulators)

Полагаю, все уже успели полюбоваться новым детищем от OpenAI под названием Sora. Классные разборы уже появились у светочей и рупоров отечетсвенного AI (пост Сиолошной, пост на Любовь, Смерть, Трансформеры), как и веселые мемчики. Со своей стороны лишь накину пару мыслей и соображений после прочтения отчетов и залипания в видосики.

В отчете ожидаемо (given the competitive landscape and the safety implications бла-бла-бла) не прозвучали какие-либо детали о сборе и фильтрации датасета, архитектуре, пайплайне обучения. На основе отчета можно сделать следующиее выводы:

1️⃣ Архитектура модели - некий здоровенный трансформер, работающий на пространственно-временных патчах.
2️⃣ Модель - латентная. Есть энкодер, превращающий видео с большим пространственным и временным разрешением в некое компактное латентное представление, в котором и происходит диффузионный процесс. И декодер, превращающий латенты обратно в видео.
3️⃣ Модель можно обуславливать на текст, текст + изображение, и использовать для продолжения коротких клипов. Кроме того, можно редактировать видео с помощью промпта и интерполировать два ролика осмысленным образом.
4️⃣ В процессе обучения модели, по всей видимости, на вход подавались и изображения, и картинки. Картинка эквивалентна видео из одного кадра.
5️⃣ Модель обучалась на исходных, необрезанных картинках. Благодаря этому она не генерирует обрезанный контект и способна работать в любом разрешении. Интересно, как они батчевали кадры разного разрешения. Возможно, encoder/decoder способен приводить все к одному разрешению, обуславливаясь на разрешение входа. А может, модель настолько большая, что батч больше одного все равно не лезет в сие чудище.
6️⃣ Модель обладает пространственно-временной консистентностью. Закрытие одного обьекта другим (occlusion), не приводит к характерным артефактам.
7️⃣ Генерировать можно ролики и изображения с разрешением до 2k.
8️⃣ Как и в DALLE-3, большую роль играют синтетические описания, сгененированные специально обученной для этого моделью.

Спекуляции и догадки
1⃣️️ По всей видимости. модель под капотом и обьем данных/вычислений, потраченных на обучения модели, реально колосалльны. Скорее всего сама модель значительно больше, чем SDXL, Emu, и иные модели, о которых хоть что-то известно.
2⃣️️ Полагаю, что в обучении было задействовано много синтетики зарендеренной Unreal Engine 5, или чем-то подобным. Многие ролики напоминают генерации движка 3D графики. Таким образом можно задавать пространственно-временную информацию куда более явно, чем weak supervision с огромного числа видеороликов и клипов.
🔥18👍4💯1
AQLM добавили в transformers 4.38.0!
https://github.com/huggingface/transformers/releases/tag/v4.38.0
Пользуйтесь, наслаждайтесь, делитесь впечатлениями)

Кроме того, мы потюнили end-2-end все обучаемые параметры на логиты fp16 модели и сравнялись по качеству на Llama-2-7b моделях с QuiP#.

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

https://huggingface.co/BlackSamorez/Llama-2-7b-AQLM-2Bit-1x16-hf (wikitext2 ppl: было 6.31, стало 5.92)
https://huggingface.co/BlackSamorez/Llama-2-7b-AQLM-2Bit-2x8-hf (wikitext2 ppl: было 7.91, стало 6.69)
11🔥5👍1
Stability.AI анонсировали Stable Diffusion 3.

Пока без конкретных деталей, но обещают в будущем папиру.
Что известно на данный момент:
1) Будет несколько моделей от 800M до 8B (как минимум 2 размера)
2) По всей видимости в латентном пространстве работает некая вариация DiT как в Sora
3) Flow matching еще что-то делает

Модель доступна только через waitlist для early preview. Типа из соображений безопасности, чтобы никто не начал использовать ее во вред человечеству и для удовлетворения небогоугодных фантазий.

Анонс на Love. Death. Transformers.
🤯4🔥2👍1
SDXL-Lightning: Progressive Adversarial Diffusion Distillation
[Статья][Кода нет, но есть модели]

Пока все ждут технического отсчета по Stable Diffusion 3 и стебутся над поделками от Google, рассмотрим свежую работу про дистилляцию диффузионок.

Некоторое время назад Stability.AI выкатили SDXL-Turbo, дистиллированную с адверсариальными лоссами версию SDXL.

Ребята из Bytedance предложили альтернативный (хоть и основанный на схожих принципах) метод дистилляции в один и малое число шагов.

Метод

Предложенный подход основывается на progressive distillation (чуть ли ни самой первой технике уменьшения шагов сэмплирования). Однако в исходной работе качество сильно проседало при уменьшении числа шагов до однозначного.

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

Предлагается вместо MSE лосса использовать адверсариальный - чтобы дискриминатор не мог отличить результат расшумления учителем от ученика. В SDXL-Turbo дискриминатор работает в пиксельном пространстве, что требует декодирования картинки, обработки ее ViTом в довольно высоком разрешении и вся процедура выходит довольно дорогой. Здесь же авторы в качестве тушки дискриминатора используют копию энкодера SDXL и классификатору подают агрегированные признаки со всех уровней. При обучении нет нужды декодировать картинку и можно обучать оценивать реалистичность промежуточных шагов. В качестве функции потерь берут ванильный non-saturating adversarial лосс.

Однако, оказывается, что полученная сеть подвержена генерации артефактов в стиле двуликого Януса: существа и объекты раздваиваются. Утверждается (я не понял почему), что это тоже проявление недостаточной емкости модели. Авторы дообучают модель еще некоторое время на adversarial лосс, но без примеров родительской модели. Утверждается, что это лечит Янус-артефакты.

Дистилляция проходит в несколько стадий: 128->32->8->4->2->1.
Первая стадия довольно простая, и даже обычный MSE лосс работает, а дальше используют предложенную технику. Classifier-free guidance применяется только на первом этапе дистилляции.
👍5🤔1
Эксперименты

Обучают на отфильтрованном классификатором эстетичности подмножестве из LAION и COYO. При обучении вместе с генерациями учителя используют LoRA, которую затем вшивают в веса модели, и уже всю модель учат “дурить” классификатор. Интересно, вывод о недостаточной емкости модели был сделан до или после решения обучать с LoRA? 🧐

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

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

Для численной оценки качества используют FID на всех картинках, FID на патчах и CLIP Score. Для замера FID (к целому вагону недостатков) на целых изображениях надо приводить картинки к нестандартному разрешению 299x299, и это вносит сдвиг в результат замеров, потому предлагается смотреть и на кропы. По FID и CLIP SDXL-Lightning сопоставим с конкурентными SDXL-Turbo и Latent Consistency Models, но несколько лучше по FID на патчах (если не можешь явно побить бейзлайны по метрикам, придумай правильную метрику!). Все дистилляты несколько проседают по FID, в первую очередь из-за разнообразия, по всей видимости.

Выводы

Логичный и интересный подход, но не хватает SbS с асессорами. Кроме того, неизвестно насколько SDXL-Lightning подвержен проблеме снижения разнообразия генераций, коей страдает SDXL-Turbo.
😁2👍1🔥1
Этическая дилемма - это когда рецензируемая статья не очень, но ее автор активно цитирует тебя.
😁22🤡1
Слайды с моего доклада про Optimal Brain Surgeon на сегодняшней встрече в "Точке кипения".

Спасибо всем участникам за вопросы и интересные дискуссии!

И спасибо @kraidiky за приглашение и увлекательный рассказ про коннектом.
🔥16
The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits
[Статья][Довольствуйтесь README.md]

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

Утверждается ни много не мало следующее - можно обучать LLM с 1.58 (log2(3)) битами на параметр 🤯, которые сходятся так же хорошо как и fp16 модели!

Метод

В линейных слоях все веса квантуются тернарно (принимают значения -1, 0, 1).
Скейл будто бы берется один на весь тензор, даже не канал, что вдвойне удивительно, учитывая склонность LLM к оутлаерам и неравномерность распреления весов. Активации же приводятся к 8 битам, и чтобы не хранить zero-point, значения активаций симметризуются.

Ничего не сказано про процедуру обучения, был ли использован straigth-through estimator, или что-то еще более хитрое безградиентное для обучения тернарных весов. Ибо наивное обучение всего этого хозяйства должно сходиться из ряда вон плохо.

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

За основу берут Llama архитектуру и обучают модели разного размера (от 700M до 3.9B параметров) на RedPajama. В сравнениях с бейзлайновой Llama fp16 все модели поглощают 100B токенов на этапе обучения. Модели сравнивают по перплексии на wikitext2 / c4 (непонятно, какая из них приведена в Таблице 1, или средняя) и zero-shot на lm-eval-harness. На меньших моделях BitNet1.58 (так называется семейство квантованных моделей) лишь слегка уступает бейзлайну, а на больших - будто бы чуть лучше, чем fp16.

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

При обучении на 2T токенах, BitNet1.58 на бенчмарках лучше StableLM-3B, обученной на том же числе данных.

Вывод

Практически полное отсутствие описания метода и протокола обучения делает результаты данной работы крайне сомнительными. Краткость - сестра таланта, только если ты OpenAI. В общем, ждем дальнейшей информации. Может, таки выложат модели и нечто большее, чем README.
🐳10👍8🔥1
Scaling Rectified Flow Transformers for High-Resolution Image Synthesis
[Статья][Кода нет, но обещают]

Stability.AI таки выкатили обещанный отчет про обучения Stable Diffusion 3.

Метод

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

Диффузионный процесс

Авторы рассматривают следующие постановки диффузионных процессов:
1️⃣ Rectified flow (который как понятно из названия используется в конечной модели). По существу, линейная интерполяция между изображением и шумом.
2️⃣ EDM с variance exploding.
3️⃣ Косинусное расписание из ADM. Модели предсказывают либо шум, либо скорость.

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

Желаемого эффекта можно достичь с помощью logit-normal sampling (log t / (1 - t)) и CosMap.

Авторы ablaтят различные выборы, смотря на метрики генерации CLIP-score, FID в class-conditional генерации на ImageNet и CC12M.

Оказалось, что rectified flow (rf) с логит-нормальным распределением зашумления работает лучше всего.
🔥6
Архитектура

Прошлые работы показали, что увеличение размерности латентных кодов повышает качество. Следуя данному наблюдению, авторы попробовали автоэнкодер с 4 (как и в прошлых SD), 8, 16 каналами. Увеличение ширины стабильно накидывает по метрикам.

Самое примечательное - архитектура трансформера.
В типичной диффузионной UNet архитектуре условие подается в виде модуляции сверток и через cross attention с патчами изображения/латента.

Здесь же токены изображения и текстовые конкатенируются и обрабатываются совместно единым мультимодальным трансформером. В данной работе авторы используют 3 текстовых энкодера разной размерности - CLIP-L/14, CLIP-G/14 и T5XXL. Эмбеддинги первых двух энкодеров конкатятся и паддятся до размерности T5XXL (которая больше, чем у L/14 и G/14) вместе взятых. То есть имеем 3️⃣ потока токенов - текстовые токены от CLIP-L/14 + CLIP-G/14, текстовые токены от T5XXL, токены изображения. Причем FeedForward слои, нормализации и модуляционные слои имеют свои веса для каждого из трех перечисленных выше потоков токенов. Attention проекции общие для всех токенов.

Иногда пре-attention выдает слишком большие значения, и для повышения стабильности обучения авторы нормализуют ключи и значения перед attention c помощью RMSNorm.

Предложенная архитектура работает лучше, чем UViT (UNet с token merging и splitting), CrossAttention и DiT с общими MLP, модуляциями для всех типов токенов. Иметь отдельные слои для разных текстовых энкодеров полезно, хоть выигрыш сравнительно небольшой. Модели сравниваются на основе динамики валидационного лосса / метрик на СС12M.

Следуя прошлым работам, авторы добавляют синтетические описания, сгенерированные через CogVLM в пропорции 50/50%. Их добавление в обучение заметно улучшает согласованность текста и изображения по мнению разметчиков.
🔥6
Результаты

Нащупав хороший сетап, авторы запускают полномасштабное обучение. Самая большая модель имеет 8B параметров (с учетом T5XXL или без?).

Данные отфильтровываются по наличию NSFW контента 👯‍♀️, эстетичности, и дубликатам.

На начальной стадии обучаются на 256x256 изображениях, а затем переходят генерации на разрешениях до 1024x1024 с разными aspect ratio. При дообучении на высоком разрешении оказывается важным изменить расписание шагов зашумления, так как изображение более высокого разрешения имеют больше сигнала. Сдвинутое расписание улучшает качество, согласно оценке аннотаторов.

После обучения на высоком разрешении, модель дообучают с помощью DPO на улучшение эстетичности и пользовательских предпочтений. Примечательно, что обучают не все параметры, а LoRA адаптеры.

Scaling модели стабильно улучшает качество. Разные модели отличаются и шириной и глубиной. Валидационный лосс (score matching loss) хорошо коррелирует с пользовательскими предпочтениями на GenEval и T2I-CompBench.

Stable Diffusion 3 сравнивают на parti-prompts с прошлыми версиями Stable Diffusion, PixArt-alpha и проприетарными моделями - DALLE-3, Midjouney-V5, Ideogram-V1.0. Stable Diffusion 3 заметно опережает прошлые SD, PixArt и слегка проприентарные модели. Основной выигрыш за счет typography, разница по визуальной эстетике не столько велика.

Большой текстовый энкодер (T5XXL) полезен при сложных промптах, но особо не влияет на эстетическое качество.

Выводы

Сильная модель, вобравшая в себя достижения современной науки и значительный инженерный труд. С точки зрения науки никаких прорывных идей, киллер-фич не предложено. Ждем код и возможность поиграться с моделькой. Rectified flow постановка по идее должна благоприятствовать хорошим генерациям в малое число шагов.
🔥8
Gemma оказалась камнем 💎 с дефектами.
https://x.com/danielhanchen/status/1765446273661075609?s=20

Проблемы gemmы:

1️⃣ Нету <bos> токена. (Я устал, <bos>)
2️⃣ Очепятка в <end_of_turn>
3️⃣ sqrt(d_embed) = sqrt(3072)=55.4256, но bfloat16 = 55.5
4️⃣ Layernorm(w+1) не во float32
5️⃣ Баг в bfloat16 RoPE
6️⃣ RoPE чувствительна к выбору между y * (1/x) или y/x
7️⃣ (Пофиксили) RoPE должен быть в float16. RoPE может содержать числа выходящие за машинную точность, потому обыкновенно применяется в float32, а затем выход кастуется к fp16/bf16 при инференсе/обучении в половинной точности.

А я-то думаю, чего это AQLM квантизация разваливает 7b модель...
👍7🤡1
👍2
gemma-2b квантуется, кстати, вполне сносно.

Вчера выложили 2 модели:
1️⃣ https://huggingface.co/BlackSamorez/gemma-2b-AQLM-2Bit-1x16-hf
2️⃣ https://huggingface.co/BlackSamorez/gemma-2b-AQLM-2Bit-2x8-hf

Правда, эмбеддинги и голова занимают большую часть памяти теперь. Планируем сжать их в будущих релизах, чтобы уместить модельку в 1гб.
🔥10
Поздравляю дорогих подписчиц с профессиональным праздником!

Желаю вам всех благ, красоты, счастья, любви и здоровья. 💐

Вы - настоящее украшение наших датасетов для генерации изображений и в топ классификаторов эстетичности)
14🤬5😁1
Сказ о потерянном skip connection.

Забабахал архитектуру.
Обучаю трансформер.
Чет лосс почти не падает.
Кручу-верчу лернинг рейт, один хрен.
Смотрю на выход (с zero инициализацией на последнем слое), и он еле-еле колеблется в районе 0.
Чешу репу, смотрю код, и опа!
В трансформерном блоке было нечто такое (для краткости опущены нормализации и RoPE):
x = x + self_attn(x)
x = cross_attn(x)
x = x + feedforward(x)

Добавил потерянный skip и все заработало 🚀.

Мораль сей басни такова - не теряйте skip connections!
💅22🙈2
BitNet: Scaling 1-bit Transformers for Large Language Models
[Статья][Официального кода нет]

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

Метод

Линейные слои заменяются на BitLinear, где элементы принимают только два значения -1 и 1. Если вес больше среднего элемента по матрице - то он 1, иначе -1. И общий масштаб равен среднему модулю веса. Максимально дешево и сердито 😈. Такая операция недифференцируема, потому используется STE. На этапе обучения авторы хранят полный тензор весов во float.

Активации квантуются в 8 бит с помощью равномерной сетки.

Чтобы веса лучше квантовались, перед линейным слоем стоит LayerNorm.

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

Далее авторы приводят табличку, показывающую насколько энергоэффективнее INT8 по сравнению с fp16 на разных техпроцессах. На случай, если Грета будет ревьюером.

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

Обучают на смеси Pile, CommonCrawl, CC-Stories, RealNews модели размером от 125M до 6.7B. По перплексии полученные модели ожидаемо хуже бейзлайна в fp16, но зато, если нормализовать на энергопотребление, то BitNet смотрится весьма представлительно.

Обучение BitNet с STE требует большего learning rate для адекватной сходимости (~8e-4), на котором fp16 расходится.
По 0-шот бенчам якобы не слишком сильно уступают fp16 трансформеру, однако вопрос в том, насколько хорошо был затюнен сам бейзлайн, и сами бенчи были выбраны по-хитрому. BitNet 6.7B выдает 55.9% на бенчах, но при этом качество случайной модели 43.8% и относительный отрыв от рандом выглядит не таким большим.

Конкурентые PTQ подходы, стартующие с fp16 трансформера конкренто ломаются в низкой битности (тогда еще не вышли QuIP# и AQLM).

Вывод

С одной стороны, неплохо, что это уже как-то работает, но бенчи и бейзлайны были подобраны не слишком честно) BitNet1.58 выдает уже значительно более высокое качество, благодаря возможности принимать хотя бы 0-ое значение.
👍9
Забавный каламбур выйдет, если relaxml выпустят QuIP# версию свеженькой https://huggingface.co/CohereForAI/c4ai-command-r-v01. Модель от Cohere подвергнется Incoherence Processing.
😁5
Маск долго тянул интригу, но таки к исходу недели выпустил Grok на волю.
https://github.com/xai-org/grok
1️⃣ Здоровенная херобора на 314B.
2️⃣ Код модели и инференса на jax+haiku.
3️⃣ 8 экспертов (на инференсе активируются 2).
4️⃣ Словарь - 128к токенов.
5️⃣ Модель идет с 8-битной квантизацией (что все равно потребует 4 A100, чтобы только уместить)
6️⃣ Длина контекста - 8к
7️⃣ Архитектура навскидку та же, что у Mixtral (Llama-подобный трансформер)
🤯15
GaLore: Memory-Efficient LLM Training by Gradient Low-Rank Projection
[Статья][Код]

Введение

В связи со стремительным ростом размера моделей, все более острой становится проблема memory-efficient обучения LLM. По существу, рядовому пользователю доступны лишь parameter-efficient файнтьюны предобученных моделей. В разобранной ранее статье ReLoRA было предложено обучать несколько низкоранговых добавок и вливать их в веса. Однако, для достижения качества, не сильно уступающему обучению всей модели целиком, этап обучения всей модели целиком был необходим, то есть multi-GPU обучения все равно не избежать.

В этой статье был предложен подход, который позволил достичь с Llama-7b-подобной моделью качества близкого к полному обучению, доступный владельцам 1️⃣ GPU с 24Гб VRAM.

Метод

Суть метода довольно проста и не нова, по существу 👨‍🦳 .

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

Отсюда мысль - проектировать градиенты и состояния оптимизатора в пространство низкой размерности. А именно делают следующее:
1️⃣ Считают градиент по весу на n-шаге
2️⃣ Считают его SVD разложение, откуда достают первые r векторов, отвечающих главным сингулярным значениям.
3️⃣ Проектируют на полученные подпространства состояния оптимизатора

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

GaLore требует даже меньше памяти на линейный слой c n входными и m выходными нейронами, чем LoRA (с Adam).
🔴 LoRA : (mn + mr + nr) параметров, (2mr + 2nr) состояний оптимизатора
🟢GaLore : mn параметров, (mr + 2nr) состояний оптимизатора
👍12🔥6
Эксперименты

Рассматривают две постановки
1️⃣ Предобучение на С4
2️⃣ Дообучение на GLUE

Обучают на C4 на бюджетах порядка 1-10B токенов, ибо авторы не слишком богатые 💸.

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

GaLore хорошо совмещается с Adam8bit, давая значительную экономию в памяти и не просаживая качество. Экономия по памяти 63.3% по сравнению с bf16 Adam и 52.3% c 8bit Adam, соответственно.

Основные два параметра у алгоритма - 1️⃣ размерность низкорангового пространства и 2️⃣ частота обновления. Чем больше размерность - тем ближе алгоритм к Adam, но и прожорливее по памяти. Слишком часто обновлять матрицы проекции - вычислительно накладно и не очень хорошо по качеству, слишком редко - дешево, но плохо по качеству. Лучше всего работает обновление раз в ~100 шагов обучения (полагаю оптимум зависит от размера батча) и не увеличивает среднее время на шаг обучения.

Дообучение на GLUE дает примерно то же качество, что и LoRA при том же ранге.

Вывод

По ощущениям, хороший и полезный результат, с серьезными перспективами на практике. Интересно, насколько хорошо предложенный метод сработает на large-scale обучении порядка триллиона токенов. Правда, те, кто могут себе позволить себе обучать на триллионах токенов, имеют в распоряжении не один хост с high-end GPU…
🤔7