tgoop.com/quant_prune_distill/187
Last Update:
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 и быстрее и лучше по метрикам.
BY КПД
Share with your friend now:
tgoop.com/quant_prune_distill/187