Modely difúze pohánějí některé z nejzajímavějších open-source vydání posledních dvou let – vzpomeňme FLUX.1-dev pro text-to-image nebo Wan 2.1 a HunyuanVideo pro text-to-video. Knihovna 🤗 Diffusers se stala domovem pro tyto modely a poskytuje výzkumníkům a vývojářům jednotné rozhraní pro inferenci, adaptaci a skládání pipeline.
Trénink a dolaďování těchto modelů je také na vzestupu, což vyžaduje nástroje, které zvládají paměťově efektivní sharding, cachování latentů, multirezoluční bucketing a konfigurace plynule škálovatelné od jedné GPU po stovky.
Představujeme open-source knihovnu NVIDIA NeMo Automodel. Dnes se zaměřujeme na spolupráci mezi NVIDIA a Hugging Face, která přináší produkční distribuovaný trénink difúzních modelů pro jakýkoli model ve formátu Diffusers na Hugging Face Hub – bez konverze checkpointů, bez přepisování modelů pro nové modely. Integrace je zdokumentována v tréninkovém průvodci Diffusers a je plně open source pod licencí Apache 2.0.
Co je NeMo Automodel?
NeMo Automodel je open-source tréninková knihovna nativní pro PyTorch DTensor, součást frameworku NVIDIA NeMo. Je postavena na dvou designových principech, které jsou důležité pro ekosystém Diffusers:
Nativní pro Hugging Face. Nasměrujte
pretrained_model_name_or_pathna libovolné ID modelu Diffusers na Hubu a začněte trénovat. NeMo Automodel používá třídy modelů Diffusers (např.WanTransformer3DModel) pro načítání a pipeline Diffusers (WanPipeline) pro generování. Checkpointy se čistě vracejí zpět do ekosystému Diffusers.Jeden program, libovolné měřítko. Recepty a tréninkové skripty lze snadno upravit pro trénink v libovolném měřítku. Paralelismus je volba konfigurace, nikoli přepis kódu – přepínejte mezi FSDP2, tensor parallel, expert parallel, context parallel a pipeline parallel deklarováním konfigurací, nikoli přepisováním modelů.
AutoModel v současnosti podporuje pouze modely s flow matching. Pod kapotou používá flow matching jako tréninkový cíl, s tréninkem v latentním prostoru (přes předem zakódované VAE výstupy) a multirezolučním bucketed dataloadingem pro urychlení propustnosti.
Podporované difúzní modely
Integrace NeMo Automodel přichází s připravenými recepty pro dolaďování pro níže uvedené otevřené difúzní modely. Seznam odráží recepty aktuálně v examples/diffusion/finetune.
ModelHugging Face IDÚkolParametryLoRA receptWan 2.1 T2V 1.3B / 14BWan-AI/Wan2.1-T2V-1.3B-Diffusers / Wan-AI/Wan2.1-T2V-14B-DiffusersText-to-Video1.3B (vejde se na jednu 40GB A100) / 14BAnoWan 2.2 T2V A14BWan-AI/Wan2.2-T2V-A14B-DiffusersText-to-Video27B celkem (MoE), 14B aktivních na krokNeFLUX.1-devblack-forest-labs/FLUX.1-devText-to-Image12BAnoFLUX.2-devblack-forest-labs/FLUX.2-devText-to-Image32BAnoHunyuanVideo 1.5hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2vText-to-Video13BAnoQwen-ImageQwen/Qwen-ImageText-to-Image20B (MMDiT)Ano
Co tato spolupráce přináší
Pro uživatele Diffusers se praktické výhody dělí do několika konkrétních schopností.
Žádná konverze checkpointů. Předtrénované váhy z Hubu fungují ihned. Není potřeba převádět do samostatného „tréninkového formátu“ a pak zpět. Váš dolaďený checkpoint se načítá přímo do DiffusionPipeline pro inferenci nebo zpět na Hub pro sdílení. Nástroje navazující – kvantizace, kompilace, LoRA adaptéry, vlastní samplery – všechny nadále fungují.
Rychlá cesta k podpoře nových modelů. Když se v Diffusers objeví nový difúzní model, jeho povolení v NeMo Automodel vyžaduje malý, ohraničený přídavek kódu – handler předzpracování dat a adaptér modelu – nikoli celý vlastní tréninkový skript. Zbytek receptového stacku (FSDP2, bucketed dataloading, checkpointing, generování) zůstává nezměněn a platí stejný YAML-driven pracovní postup.
Plné a parametrově efektivní dolaďování. Je podporováno jak plné dolaďování, tak LoRA-style PEFT, takže si můžete vybrat mezi maximální kvalitou (plný FT na velkém clusteru) nebo maximální efektivitou (LoRA na jednom uzlu). Stejná struktura receptu zvládá obojí.
Škálovatelný trénink, který přesahuje možnosti vestavěných skriptů. NeMo Automodel přidává schémata shardingu jako FSDP2, tensor, context a pipeline paralelismus, multi-node orchestraci (dnes SLURM, Kubernetes se chystá) a multirezoluční bucketing. Tyto schopnosti umožňují trénovat větší modely jako FLUX.1-dev (12B) a HunyuanVideo (13B).
Pohled na pracovní postup dolaďování
V této části projdeme typický pracovní postup pro dolaďování libovolného z podporovaných modelů. Doporučený způsob instalace Automodel je Docker kontejner NeMo Automodel (nvcr.io/nvidia/nemo-automodel:26.06), který obsahuje předinstalované PyTorch, TransformerEngine a další CUDA-kompilované závislosti. Alternativně nainstalujte pomocí pip3 install nemo-automodel nebo ze zdroje (pip3 install git+https://github.com/NVIDIA-NeMo/Automodel.git); viz instalační příručka pro všechny možnosti.
Tento průvodce provede plným transformerovým dolaďováním FLUX.1-dev na datasetu 78 karet Rider–Waite tarot, a poté generováním z výsledného checkpointu. Využívá zkontrolované YAML konfigurace a aplikuje nastavení specifická pro běh jako přepisy příkazového řádku, takže nejsou vyžadovány žádné nové konfigurační soubory.
1. Předzakódování datasetu
Recept difúze spotřebovává cachované VAE latenty a textové embeddingy namísto kódování zdrojových obrázků během každého tréninkového kroku. Streamujte 78 obrázků Rider–Waite přímo z Hugging Face a distribuujte předzpracování na všechny viditelné GPU:
uv run --locked --no-default-groups \
--extra diffusion \
--extra diffusion-media \
python -m tools.diffusion.preprocessing_multiprocess image \
--dataset_name multimodalart/1920-raider-waite-tarot-public-domain \
--dataset_media_column image \
--dataset_caption_column caption \
--dataset_streaming \
--max_images 78 \
--output_dir /cache/flux_tarot \
--processor flux \
--model_name black-forest-labs/FLUX.1-dev \
--max_pixels 245760
Popisky již obsahují trigger token trtcrd. S tímto rozpočtem pixelů a portrétním poměrem stran datasetu přiřazuje předzpracování vzorky do bucketu 384×640 používaného ukázkovým během.
Pro trénink obrázků produkuje předzpracování cache soubory .pt a fragmentovaná metadata:
/cache/flux_tarot/
├── 384x640/
│ ├── <hash1>.pt
│ └── ...
├── metadata_shard_0000.json
├── metadata.json
└── _hf_dataset/
└── images/
2. Spuštění tréninku s existujícím FLUX YAML
Použijte přímo examples/diffusion/finetune/flux_t2i_flow.yaml. YAML již vybírá FLUX.1-dev, plné transformerové dolaďování, FLUX flow-matching adaptér, efektivní velikost dávky 32 a osmisměrný FSDP2.
Dodejte cesty a nastavení specifické pro tarot jako přepisy příkazového řádku:
uv run --locked --no-default-groups --extra diffusion \
torchrun --nproc-per-node=8 \
examples/diffusion/finetune/finetune.py \
-c examples/diffusion/finetune/flux_t2i_flow.yaml \
--model.transformer_engine_fp8 false \
--data.dataloader.cache_dir /cache/flux_tarot \
--data.dataloader.base_resolution '[384,640]' \
--lr_scheduler.lr_decay_style constant \
--lr_scheduler.lr_warmup_steps 20 \
--step_scheduler.max_steps 200 \
--step_scheduler.ckpt_every_steps 50 \
--checkpoint.checkpoint_dir /tmp/flux_tarot/checkpoints/full \
--checkpoint.save_consolidated true \
--seed 2026
Běh produkuje checkpointy v krocích 50, 100, 150 a 200. Poslední checkpoint je označen epoch_66_step_199; označení je od nuly, i když představuje dokončený 200. optimalizační krok.
3. Generování z dolaďeného checkpointu
Použijte existující YAML pro generování FLUX a nasměrujte model.checkpoint na kompletní tréninkový checkpoint:
uv run --locked --no-default-groups --extra diffusion \
python examples/diffusion/generate/generate.py \
-c examples/diffusion/generate/configs/generate_flux.yaml \
--model.checkpoint /tmp/flux_tarot/checkpoints/full/epoch_66_step_199 \
--inference.height 640 \
--inference.width 384 \
--inference.prompts '["a trtcrd of an astronaut tending a rose garden on Mars, \"the gardener\""]' \
--output.output_dir /tmp/flux_tarot/generations/full/step_200 \
--seed 2026
Zahrňte trtcrd pro vyvolání naučeného tarotového stylu. Pro srovnávací kontrolu ponechte seed a scénu fixní, ale vynechejte trigger:
uv run --locked --no-default-groups --extra diffusion \
python examples/diffusion/generate/generate.py \
-c examples/diffusion/generate/configs/generate_flux.yaml \
--model.checkpoint /tmp/flux_tarot/checkpoints/full/epoch_66_step_199 \
--inference.height 640 \
--inference.width 384 \
--inference.prompts '["an astronaut tending a rose garden on Mars, \"the gardener\""]' \
--output.output_dir /tmp/flux_tarot/generations/control \
--seed 2026
Výsledky
V kroku 200 si triggerované promptové astronautky zachovávají požadovaný obsah, zatímco získávají krémovou, červenou a černou vintage paletu, silné inkoustové kontury, plochá barevná pole, tóny starého papíru a alegorickou kompozici karet. Netriggerovaná astronautka zůstává fotografická, což dokazuje, že naučený efekt je podstatně spojen s trtcrd spíše než že by globálně nahrazoval základní model.
Prompt (seed)ZákladníDolaďený (krok 200)Astronaut pečující o růžovou zahradu na Marsu (seed 2026)
4. Výkon
Všechna měření byla shromážděna na jednom uzlu s 8× NVIDIA H100 80GB GPU. Výsledky jsou průměry ± směrodatná odchylka vzorku ze tří oken v ustáleném stavu po 10 krocích.
Text-to-image – 512×512
ModelTréninkParalelismusGBS / LBSCas krokuObrázky/sObrázky/s/GPUSpičková alokace/GPUFLUX.1-devPlnýFSDP232 / 40.902 ± 0.039 s35.51 ± 1.554.44 ± 0.1963.88 GiBFLUX.1-devLoRA r64DDP48 / 60.894 ± 0.008 s53.73 ± 0.486.72 ± 0.0667.43 GiBQwen-ImagePlnýFSDP240 / 50.974 ± 0.075 s41.21 ± 3.065.15 ± 0.3853.55 GiBQwen-ImageLoRA r64DDP24 / 30.515 ± 0.006 s46.63 ± 0.545.83 ± 0.0766.33 GiB
Text-to-video – 512×512×49 snímků
Každý vzorek je jeden 49snímkový videoklip.
ModelTréninkGBS / LBSAktivační checkpointingCas krokuKlipy/sKlipy/s/GPUSpičková alokace/GPUWan 2.1 1.3BPlný8 / 1Vypnuto0.942 ± 0.038 s8.50 ± 0.351.06 ± 0.046.09 GiBWan 2.1 14BPlný8 / 1Zapnuto3.798 ± 0.017 s2.107 ± 0.0060.263 ± 0.00633.35 GiBWan 2.1 14BLoRA r6416 / 2Zapnuto7.585 ± 0.014 s2.110 ± 0.0000.263 ± 0.00024.07 GiBWan 2.2 A14B, vysoký šumPlný8 / 1Zapnuto4.628 ± 0.031 s1.730 ± 0.0100.217 ± 0.00623.57 GiBHunyuanVideo 1.5Plný8 / 1Zapnuto5.926 ± 0.046 s1.350 ± 0.0100.170 ± 0.00015.90 GiBHunyuanVideo 1.5LoRA r648 / 1Zapnuto5.575 ± 0.006 s1.433 ± 0.0060.180 ± 0.00010.58 GiB
Detaily měření
Hardware: 8× H100 80GB HBM3, plně propojeno NVLink.
Obrázkový dataset:
lambda/naruto-blip-captions, 256 cachovaných vzorků.Video dataset:
svjack/Lelouch_Vi_Britannia_FramePack_First_Last_Frame_Video_Captioned, 112 cachovaných vzorků.Plné dávky byly vynuceny pomocí
drop_last=true.Zápisy checkpointů byly zakázány.
Čas kroku zahrnuje dataloading, forward, backward, clipping gradientů, optimalizátor a scheduler.
Paměť je špičkové využití PyTorch CUDA alokátoru, nikoli celková NVML paměť zařízení.
Další příklady dolaďování/LoRA
Výsledky dolaďování a LoRA ukazují sílu NeMo Automodel pro doménovou specializaci. Například dolaďování modelu Wan 2.1 na Ghibli video datasetu úspěšně přizpůsobilo výstupní styl, což demonstruje znatelná změna vzhledu květiny oproti základnímu modelu.
Základní:
Dolaďeno na Ghibli videích:
Také jsme pozorovali výrazný dopad použití LoRA, kdy aplikace adaptéru na Wan 2.1 způsobila, že video přijalo charakteristický styl Ghibli, zvláště patrný ve zvýraznění očí postav.
Bez LoRA:
S LoRA:
Tyto příklady, včetně těch pro FLUX.2, potvrzují, že uživatelé mohou dosáhnout jak maximální kvality pomocí plného dolaďování, tak maximální efektivity pomocí LoRA-style PEFT, a přizpůsobit výstup specifickým stylistickým doménám.
Vyzkoušejte to dnes
Další informace o integraci a další příklady dolaďování najdete v dokumentaci NeMo Automodel
Příště: Pythonic recipe API
YAML je silně vhodný pro reprodukovatelnou konfiguraci, zejména pro týmy, které chtějí soubory, jež mohou zkontrolovat, revidovat a znovu použít, ale mnoho týmů také potřebuje programové rozhraní.
V připravovaném vydání NeMo Automodel plánujeme zpřístupnit difúzní recepty také prostřednictvím plně typovaného Pythonic API. Uživatelé budou moci skládat stejné komponenty modelu, dat, optimalizátoru, PEFT/LoRA, paralelismu, checkpointingu a generování přímo z Pythonu.
Pythonic cesta má usnadnit použití receptů ze stávajícího tréninkového kódu, notebooků a experimentálních workflow a nabídnout prvotřídní Pythonic rozhraní vedle rychlé cesty YAML.













