Как блоки собираются вместе
Урок собирает три компонента в единый конвейер latent diffusion.
Latent diffusion — схема Stable Diffusion: текст кодируется CLIP, диффузия идёт в латенте под управлением U-Net, а VAE превращает финальный латент в картинку.
Полный маршрут
Соединим всё, что разобрали. Пользователь вводит промпт — дальше работает конвейер:
1. промпт ──CLIP──> эмбеддинги текста
2. случайный шум в латенте (старт, задаётся seed)
3. повторять N шагов:
U-Net(латент, шаг, эмбеддинги) -> оценка шума
сэмплер: убрать часть шума из латента
4. финальный латент ──VAE-декодер──> картинка в пикселяхКто за что отвечает
| Компонент | Роль | Когда работает |
| CLIP | понять текст | один раз, в начале |
| U-Net | предсказать шум | каждый шаг (N раз) |
| сэмплер | как убирать шум | каждый шаг |
| VAE-декодер | латент → пиксели | один раз, в конце |
Почему «latent»
Вся тяжёлая часть — N вызовов U-Net — происходит в маленьком латентном пространстве, а не в пикселях. Именно это сделало Stable Diffusion достаточно лёгким для домашних видеокарт и дало название всему подходу: latent diffusion. Если бы диффузия шла по пикселям, та же генерация была бы в разы дороже.
Как работает под капотом
Заметьте разделение труда: CLIP вызывается один раз (текст не меняется по ходу), VAE-декодер тоже один раз (в самом конце), а U-Net и сэмплер крутятся в цикле. Поэтому время генерации почти линейно зависит от числа шагов и размера картинки (он же — размер латента). Все три компонента обучались отдельно и затем были собраны вместе: это модульность, которая позволяет, например, заменить VAE-декодер или дообучить U-Net (LoRA), не трогая остальное.
Частые ошибки
- Думать, что CLIP вызывается на каждом шаге. Текст кодируется один раз; в цикле работают U-Net и сэмплер.
- Считать, что больше шагов меняет работу VAE. VAE-декодер всегда отрабатывает один раз в конце, независимо от числа шагов.
- Забыть, что размер картинки = размер латента. Большая картинка — больший латент — дороже каждый из N шагов.
Модульность как суперсила
Главная архитектурная красота Stable Diffusion — что три его части обучались отдельно и стыкуются как кубики. Это открыло целую экосистему: можно дообучить только U-Net под новый стиль (LoRA), подменить только VAE-декодер ради чистых цветов или добавить управляющую ветку (ControlNet), не трогая остальное. Если бы модель была одним монолитом, ничего из этого не работало бы — пришлось бы переобучать всё целиком.
Эта же модульность объясняет, почему вокруг Stable Diffusion вырос огромный open-source-мир, а вокруг закрытых монолитных генераторов — нет. Когда блоки разделимы и понятны, сообщество может улучшать их по частям и обмениваться маленькими файлами надстроек. Понимание пайплайна, которое вы получили, — это буквально карта, по которой работают все эти расширения.
Итог
- Пайплайн: CLIP кодирует текст → U-Net и сэмплер расшумляют латент N шагов → VAE-декодер выдаёт картинку.
- CLIP и VAE-декодер работают по разу, U-Net — на каждом шаге, поэтому steps и размер сильнее всего влияют на время.
- Модульность компонентов позволяет менять или дообучать их по отдельности.