MobileDiffusion: Subsecond Text-to-Image Generation on Mobile Devices[
Статья] [Кода нет]
Было еще
тут.
В последнее время был достигнут значительный прогресс в ускорении диффузионных моделей.
Тем не менее инференс на мобильных устройствах работает все еще
недостаточно быстро.
Скорость генерации диффузионной модели определяется
количеством шагов сэмплирования и стоимостью
одного шага. На текущий момент, большинство внимания уделяется ускорению моделей за счет первого фактора - изобретением новых солверов, алгоритмов пошаговой дистилляции. Оптимизации архитектуры уделяется же значительно
меньше внимания. Типичные модели хороши для GPU, но тяжеловаты для мобилок, потому имеет смысл
уменьшать саму модель, сохраняя качество.
В этой работе основное внимание уделено как раз архитектуре, но и про уменьшение количества шагов сэмплирования тоже не забыли.
МетодЗа основу берут StableDiffusion v1.5.
Трансформерные блокиПервая оптимизация, мотивированная прошлыми работами
UViT и
SnapFusion, - уборка дорогих и не очень полезных attention с самого высокого разрешения. Кроме того, на разрешении
32x32 оставляют только cross-attention с текстовыми токенами, потому что self-attention с 1024 все еще дорогой. Таким образом, self-attention есть только на разрешении
16x16. Кроме того, объединяют проекции Key и Value, чтобы еще чуть-чуть сэкономить на параметрах, заменяют
gelu на
swish, который более эффективен на мобилках и приятнее с точки зрения последующего квантования модели, и
softmax на
relu. В последнем случае, обученную с softmax модель, файнтьюнят 10к шагов с relu, и якобы не теряют в качестве.
И уменьшают expansion в
FeedForward слоях с 8 до 6 без просадки в качестве.
Сверточные блокиВместо обычных сверток 3x3 используют
depthwise-separable с меньшим числом параметров и операций. Утверждается, что качество не просаживается. Кроме того, уменьшили общее количество блоков с
22 в SD до
12.
Целевая модель должна иметь не более
400 миллионов параметров и
200 GFLOPs на инференсе. Авторы запустили перебор разных конфигураций блоков и ширин каналов (детали процесса опущены) и отобрали самых удачных кандидатов.
Пошаговая дистилляцияДля пошаговой дистилляции были рассмотрены две стратегии:
1⃣️️️️️️
Прогрессивная дистилляция в 8 шагов сэмплирования
2⃣️️️️️️
UFOGen с адверсариальным лоссом
АвтоэнкодерКроме того, вместо исходного автоэнкодера из SD, авторы обучили свой, более компактный, но кодирующий в
8 каналов вместо
4-х. Потом его еще запрунили (непонятно как). Полученный VAE и быстрее и лучше по метрикам.