Telegram Web
Understanding Optimization of Deep Learning

Данный пост будет в необычном формате.
Обзор на обзор, он же обзор 2-го порядка.

https://teletype.in/@spiridon_sun_rotator/W08b5vufRRo
🔥3
Snap Diffusion: Text-to-Image Diffusion Model on Mobile Devices within Two Seconds

История про диффузионку, генерирующую картинки на уровне Stable Diffusion, менее чем за 2с на мобилке.

https://teletype.in/@spiridon_sun_rotator/sA5t3J0p7eu
👍2
https://teletype.in/@spiridon_sun_rotator/ZoDH4frsx7e

Еще одна статья про квантование LLM на основе Фишерского приближения Гессиана и разбиения весов на выбросы и не-выбросы.
Fast Segment Anything

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

Напомню, что в оригинальной работе SAM (Segment Anything Model) была предложена методология сегментации обьектов из широкого набора категорий на основе различных типов запросов:

1️⃣ Point prompt. Пользователь делает тык и нейросеть выделяет самый примечательный обьект, содержащий данную точку.
2️⃣ Box prompt. Пользователь выделяет прямоугольник с предполагаемым обьектом и нейросеть ищет маску (уточняет контуры).
3️⃣ Text prompt. Пользователь пишет текстом название желаемого обьекта, и он выделяется маской.

Помимо прочего, авторы выпустили самый большой датасет по сегментации, собранный частично вручную, а частично размеченный автоматически - SA-1B.

Работа вызвала большой ажиотаж, появилось много последователей.

Однако, у всей этой красоты есть один большой недостаток - основная моделька, используемая в работе, увесистый ViT-Huge с 630M, который довольно нелегко инферить даже на карточках, что уж говорить про мобильный инференс.

И авторы задались вопросом - можно ли достичь сопоставимого качества, используя значительно меньше вычислений? И предложенное решение работает в 50 раз быстрее при сопоставимом качестве (на RTX3090).

Суть идеи в том, чтобы использовать легковесную модель. И не утруждая себя долгими раздумьями, авторы взяли известное рабочее решение - YOLOv8-seg c YOLACT для сегментации. Модель обучалась на малой части данных SA-1B - всего 2 миллионах картинках из миллиарда. Обладая значительно большими inductive biases и специализированными модулями, YOLO сходится значительно быстрее и требует куда меньше данных. Энкодеры промтов те же, что и в исходном SAM.

Модельку валидируют на разных бенчмарках по сегментации в Zero-Shot. FastSAM выделяет границы примерно так же хорошо, как и SAM. На COCO и LVISv1 примерно на одном уровне с SAM, не сильно уступая finetuned ViTDeT-H. И еще в ряде приложений вышло неплохо - salient object detection (выделении самого примечательного обьекта) и anomaly segmentation.

Метод все же слегка уступает SAM, основные проблемы возникают с маленькими обьектами. Утверждается, что box confidence score, предсказываемый YOLO не всегда соотвествует качеству маски. Маски для маленьких обьектов выходят чрезмерно квадратными.

[Статья][Код]
👍3😁1
результаты
Сегментация с текстовыми промптами
Anomaly detection - какую-то бяку нашли на таблетке
Схематичный рисунок фреймворка - feature pyramid, с box и mask head + NMS модули.
Работает реально быстро
👍2
Failure cases
[Статья][Код]

На днях Stability.AI выкатили новую диффузионку: Stable Diffusion XL.

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

Архитектура

Выше было сказано, сеть увеличилась в размерах. При этом убрали self-attention на максимальном разрешении (из-за большого количества вычислений), и всего 2 стадии уменьшения разрешения в 2 раза вместо 3 в исходной SD (т.е в середине UNet пространственное разрешение в 4 раза меньше, чем на входе и выходе). В середину напихали аж 10 блоков Attention.

Conditioning

Size conditionining
Картинки в датасетах бывают разных размеров. Из-за двухстадийной структуры - диффузии в латентном пространстве и SR каскада, Stable Diffusion имеет жесткие ограничения на размер данных (SD v1.4 обучалась на картинках, где меньшая из сторон имеет размер 512). А существенная доля данных (39%) имеет размер менее 256 (минимальный принимаемый SDXL) . Можно было бы интерполировать до минимального приемлемого размера - но полученные картинки будут размытыми, и сеть будет считать, что так и надо. Потому авторы предложили при обучении и генерации обуславливать на размер (пару значений высота/ширина) - если надо мыльную картинку, получай мыльную, надо резкую - получай резкую.
Модификация улучшает метрики (FID и IS).

Crop conditioning
Stable Diffusion при генерации по промпту нередко выдает кропы картинок, которые смотрятся неэстетично. По всей видимости, причина в том, что подобная аугментация использовалась на обучении модели. Решение простое - снова condition на положение кропа (нормализованные от [0,1] координаты верхнего левого угла). В итоге при condition на (0,0) выдаются более центрированные картинки, захватывающие объект целиком.

Оба типа conditioning добавляют Фурье-эмбеддинги в процесс генерации.`

Multi-aspect training
На практике интересна генерация не только квадратных картинок, но и прямоугольных, потому сеть дообучают на генерацию с разными соотношениями ширины и высоты. Чтобы обучение было эффективным, в один батч собирают картинки с похожим aspect ratio (bucketing).

Improved Autoencoder
Потюнили параметры обучения и улучшили реконструкцию из латентного пространства.

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

Результаты
Stable Diffusion XL, по мнению большинства пользователей, всегда или почти всегда лучше стандартной Stable Diffusion, причем версия refinement стадией выглядит более предпочтительной, чем без нее. Что интересно, метрики FID и CLIP score, на COCO - стандартном бенчмарке для оценки качества генерации по промптам, даже просели по сравнению с SD (v1.5, v2.1), но на них, как известно, следует ориентировать с некоторой опаской. SDXL сравнили с Midjourney v5.1 на PartiPrompts (P2), и на ряде категорий, пользователи чаще отдавали предпочтение SDXL, что выглядит солидно, учитывая, что Midjourney считается флагманом по генерации. Есть однако подозрения у знающих людей, что саму SDXL файнтьюнили на генерациям от Midjourney.

Сама модель настолько же опенсорсная, как и LLaMA. Веса выдаются только с одобрения авторов. Ждем пираток, короче.
👍4
пользовательские предпочтения
Архитектура. Новый модуль - предложенный Refiner
Распределение обучающей выборки по ширине и высоте
Эффект от condition на размер
Эффект от сondition на crop
Refinement позволяет лучше прорисовывать мелкие детали
Stable Diffusion-XL против Midjourney v5.1
FID-CLIP кривые для Stable Diffusion XL хуже, чем для SD v1.5/v2.1 (напомню, что согласно этим метрикам генерация тем лучше - чем ниже и левее находится кривая формы эмблемы компании Nike).
Flash Attention-2: Faster Attention with Better Parallelism and Work Partitioning
[Статья][Код]

На днях Tri Dao (это имя и фамилия, а не три пути из китайской философии) выпустил сиквел знаменитого блокбастера Flash Attention - Flash Attention 2. Обновленная версия Flash Attention примерно в два раза быстрее своей предшественницы и местами до 10 раз бывает быстрее наивной реализации PyTorch.

Введение

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

В работе по Flash Attention добились значительного ускорения Attention и снижения пикового расхода памяти за счет оптимизации входящих в него операции. При этом сам алгоритм математически эквивалентен (up to numerical precision) исходному Attention.

Напомню, что в основе оригинальной работы по Flash Attention лежат следующие наблюдения:

1️⃣ Большую часть времени занимают не вычисления, а работа с памятью.
2️⃣ Для подсчета Attention не обязательно материализовывать всю матрицу Attention, квадратичную по длине последовательности целиком. Можно считать ее поблочно, а затем агрегировать результат.

Flash Attention уменьшает количество операций по перекачке данных с HBM памяти в кэши GPU за счет выполнения нескольких математических операций сразу в пределах одного блока (kernel fusion). При обратном проходе и подсчете градиентов по параметрам матрица Attention пересчитывается снова поблочно. Flash Attention делает больше вычислений, чем исходный алгоритм, но так как вычисления в разы быстрее перекачки памяти туда-сюда, получается значительный выигрыш в производительности.

Однако, даже оптимизированный Flash Attention сильно недоиспользует возможности современных ускорителей вычислений, достигая всего-лишь 25-40% от теоретической максимальной производительности, в то время как матричные умножения могут достигать 80-90%.
👍1
2025/08/28 17:01:49
Back to Top
HTML Embed Code: