# Diffusion Engineering

> Практическая инженерия диффузионных моделей: архитектуры, обучение, инференс, оптимизация памяти. Использовать при любых задачах с диффузионными моделями: проектирование или модификация архитектуры (UNet/DiT/Flow/Flux), выбор и настройка schedulers/samplers, дообучение (LoRA/DreamBooth/full fine-tune), оптимизация памяти (AMP/checkpointing/ZeRO/FSDP/quantization), замена или fusion текст-энкодеров (CLIP/Qwen), работа с Diffusers, отладка диффузионных пайплайнов, оценка качества (FID/CLIPScore/LPIPS), latent diffusion, VAE, guidance/CFG, rectified flow, Stable Diffusion, SDXL, Flux. Также применять при вопросах про GPU-память при обучении генеративных моделей, text-to-image пайплайны, ControlNet, multi-encoder fusion, WebDataset. Do NOT use for writing FLUX.2 Klein generation prompts (use flux2-klein-prompting) или для FLUX.2 Klein / Qwen-Edit LoRA-тренинга и edit-LoRA (use flux2-lora-training); это общая диффузионная инженерия, не специфика FLUX.2 Klein.

- Skill: `anastasiyaw/diffusion-engineering` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add anastasiyaw/diffusion-engineering`
- Raw SKILL.md: https://api.skillmd.com/api/skills/anastasiyaw/diffusion-engineering/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: AnastasiyaW (https://skillmd.com/u/anastasiyaw)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/anastasiyaw/diffusion-engineering

---


# Diffusion Engineering Skill

## Быстрая ориентация

Три инженерных решения, которые больше всего влияют на качество/скорость/стоимость:

1. **Где идёт диффузия** → пиксели (дорого) или латентное пространство (LDM/SD-семейство — практично)
2. **Backbone денойзера** → UNet (классика, проще) или Transformer/DiT/Flow (масштабируется лучше)
3. **Управление сэмплингом** → scheduler, число шагов, guidance_scale — часто дают больше, чем правка сети

---

## Reference files — читать по задаче

| Тема | Файл | Когда читать |
|---|---|---|
| Архитектуры и data flow | `references/architectures.md` | DDPM/SDE/LDM/DiT/Flux/VAE/SDXL, схема пайплайна |
| Schedulers и guidance | `references/samplers.md` | DDIM/Euler/Heun/DPM-Solver/PNDM, CFG, prediction_type |
| Обучение и дообучение | `references/training.md` | Loss/цели, LoRA/DreamBooth/full FT, гиперпараметры |
| Память и распределённость | `references/memory.md` | AMP, checkpointing, ZeRO, FSDP, quantization, FP8 |
| Текст-энкодеры и данные | `references/encoders-data.md` | CLIP/Qwen/multi-encoder, токенизация, data pipeline |
| Оценка и траблшутинг | `references/eval-debug.md` | FID/CLIPScore/LPIPS, типовые поломки и фиксы, лицензии |

---

## Быстрый чеклист «я строю/модифицирую diffusion»

- [ ] **Backbone:** UNet (проще) или DiT/Flow (масштабирование)?
- [ ] **Модули зафиксированы:** tokenizer → text encoder → `encoder_hidden_states` → denoiser → VAE decode
- [ ] **Scheduler выбран:** DDIM / Euler / DPM-Solver — A/B на фиксированных seed
- [ ] **Дообучение:** начинать с LoRA, в full fine-tune только при необходимости
- [ ] **Память:** AMP включён, при необходимости checkpointing, при масштабе ZeRO/FSDP
- [ ] **Данные:** стриминг/шардинг (HF streaming, WebDataset), валидировать throughput dataloader
- [ ] **Оценка:** выбрать метрики под требуемый результат и доступные данные, а не обязательный набор FID/CLIPScore/LPIPS. Для парной ретуши проверять сохранность личности/геометрии/цвета и целевое изменение на фиксированном наборе; FID не заменяет эти проверки. См. `references/eval-debug.md`.

---

## Trade-offs на один экран

| Ручка | Увеличить | Уменьшить |
|---|---|---|
| `num_inference_steps` | ↑ время; качество проверять для данной модели | ↓ время; качество проверять, особенно у distilled моделей |
| `guidance_scale` (CFG) | ↑ adherence к промпту, риск «пережога» | ↑ разнообразие |
| LoRA rank | ↑ выразительность | ↑ параметры, риск overfitting |
| Шаги дообучения | ↑ адаптация | ↑ риск catastrophic forgetting |
| Batch size | ↑ стабильность градиентов | ↑ VRAM |

---

## Мини-рецепты по бюджету GPU

| Бюджет | Что делать |
|---|---|
| **8–16 GB (1 GPU)** | LoRA вместо full FT; grad accumulation; BF16/FP16; xFormers/SDPA; 8-bit оптимизатор |
| **24–48 GB (1–4 GPU)** | LoRA или partial FT; иногда FSDP; большее разрешение |
| **8+ GPU, H100** | Full FT, ZeRO-3/FSDP, float8, WebDataset стриминг, масштабный датапайплайн |

## Gotchas

- Универсальный набор метрик превращал малую парную edit-задачу в ненужный сбор тысяч генераций. Метрика должна проверять конкретное требование; численный балл не заменяет визуальную приёмку.
- Число workers и оптимизации памяти — кандидаты для замера на данном runtime, не обязательная лестница. Больше workers может замедлить Windows-пайплайн или дублировать iterable-данные.

## Troubleshooting

| Симптом | Проверка | Действие |
|---|---|---|
| Оценка не отвечает, исправлена ли ретушь | Связать каждую метрику с требованием и эталонной парой | Заменить нерелевантную метрику проверкой нужного свойства; сохранить визуальный контроль |
| Загрузка данных медленнее после настройки | Сравнить throughput, память и уникальность данных с `num_workers=0` | Оставить измеренно подходящие параметры; шардировать iterable dataset при нескольких workers |

