В последние два года мы стали свидетелями настоящей революции в области генеративного искусственного интеллекта. Диффузионные модели, такие как FLUX.1-dev для генерации изображений и Wan 2.1 или HunyuanVideo для создания видео, вывели качество синтетического контента на беспрецедентный уровень. Однако за красивыми картинками и плавными видеороликами скрывается сложная инженерная задача: адаптация этих мощных моделей под конкретные нужды бизнеса или творческие задачи исследователей. Библиотека 🤗 Diffusers стала де-факто стандартом для работы с этими моделями, предлагая единый интерфейс для вывода результатов, адаптации и композиции пайплайнов. Но что делать, когда стандартных инструментов обучения становится недостаточно?
Проблема масштабирования обучения диффузионных моделей часто упирается в ограничения по памяти, необходимость эффективного распределения данных и сложность настройки параллелизма. Для работы с моделями, имеющими миллиарды параметров, требуются утилиты, обеспечивающие эффективное шардирование (sharding), кэширование латентных пространств, многоуровневое bucketing-загрузку данных и конфигурации, которые могут масштабироваться от одной видеокарты до сотен. Именно здесь на сцену выходит NVIDIA NeMo Automodel — библиотека с открытым исходным кодом, разработанная для решения этих технических вызовов.
Сегодня мы подробно рассмотрим совместную работу NVIDIA и Hugging Face, которая приносит production-уровень распределенного обучения диффузии к любой модели формата Diffusers на Hugging Face Hub. Ключевое преимущество этого решения — отсутствие необходимости в конвертации чекпоинтов или переписывании кода модели. Интеграция документирована в руководстве по обучению Diffusers и полностью открыта под лицензией Apache 2.0. Давайте разберемся, как это работает, какие модели поддерживаются и как запустить обучение на практике.
01Что такое NeMo Automodel?
NeMo Automodel — это библиотека для обучения на базе PyTorch, использующая нативный DTensor, и являющаяся частью фреймворка NVIDIA NeMo. Она построена вокруг двух фундаментальных принципов, которые имеют критическое значение для экосистемы Diffusers: нативность по отношению к Hugging Face и масштабируемость «одной программы».
Принцип Hugging Face native означает, что вы можете просто указать параметр pretrained_model_name_or_path на любой ID модели Diffusers с Hub, и обучение начнется автоматически. NeMo Automodel использует классы моделей Diffusers (например, WanTransformer3DModel) для загрузки и пайплайны Diffusers (например, WanPipeline) для генерации. Чекпоинты корректно «возвращаются» обратно в экосистему Diffusers, что позволяет использовать их для инференса или делиться ими с сообществом без дополнительных преобразований.
Принцип One program, any scale (Одна программа, любой масштаб) гласит, что рецепты и скрипты обучения легко модифицируются для использования на любом уровне масштаба. Параллелизм становится выбором конфигурации, а не причиной для переписывания кода. Вы можете переключаться между FSDP2, тензорным параллелизмом, экспертным параллелизмом, контекстным параллелизмом и конвейерным параллелизмом, просто объявляя конфигурации, а не изменяя архитектуру модели. На данный момент AutoModel поддерживает модели flow-matching (сопоставления потоков). Под капотом используется flow matching в качестве цели обучения, обучение в латентном пространстве (через предварительно закодированные выходы VAE) и многоуровневая bucketed загрузка данных для ускорения пропускной способности.
02Поддерживаемые диффузионные модели
Интеграция NeMo Automodel поставляется с готовыми рецептами для тонкой настройки (fine-tuning) ряда открытых диффузионных моделей. Список отражает рецепты, доступные в директории examples/diffusion/finetune. Важно отметить, что поддержка варьируется от текстовой генерации изображений до текстовой генерации видео, а также от полных моделей до моделей с экспертами (MoE).

Среди ключевых моделей, которые можно использовать прямо сейчас, выделяются:
- Wan 2.1 T2V (1.3B / 14B): Текстовая генерация видео. Модель 1.3B параметров помещается даже на одну видеокарту A100 40GB, что делает её доступной для многих исследователей. Поддерживается LoRA.
- Wan 2.2 T2V A14B: Более мощная модель с 27B общих параметров (MoE), где 14B активных параметров используются на каждом шаге. На данный момент рецепт LoRA для неё не доступен, но полная тонкая настройка поддерживается.
- FLUX.1-dev и FLUX.2-dev: Флагманы от Black Forest Labs для генерации изображений. FLUX.1-dev имеет 12B параметров, а FLUX.2-dev — 32B. Обе модели поддерживают как полную тонкую настройку, так и LoRA.
- HunyuanVideo 1.5: Текстовая генерация видео с 13B параметров. Поддерживает LoRA.
- Qwen-Image: Текстовая генерация изображений с архитектурой MMDiT и 20B параметров. Поддерживает LoRA.
Этот список демонстрирует гибкость платформы: от легких моделей, которые можно запустить на одном GPU, до гигантов, требующих распределенного обучения на кластерах.
03Что дает эта коллаборация?
Для пользователей Differs практическая польза от интеграции с NeMo Automodel раскладывается на несколько конкретных возможностей, которые решают боли разработчиков.
Отсутствие конвертации чекпоинтов
Это, пожалуй, самое важное преимущество. Предварительно обученные веса с Hub работают «из коробки». Вам не нужно искать отдельный «формат для обучения», конвертировать веса, а затем конвертировать их обратно. Ваш тонко настроенный чекпоинт загружается напрямую в DiffusionPipeline для инференса или возвращается на Hub для обмена. Все downstream-инструменты — квантование, компиляция, адаптеры LoRA, пользовательские сэмплеры — продолжают работать без изменений.
Быстрый путь к новым моделям
Когда новая диффузионная модель появляется в Diffusers, её включение в NeMo Automodel требует минимальных усилий. Это небольшая, локализованная добавка кода — обработчик предобработки данных и адаптер модели — вместо написания полного пользовательского скрипта обучения. Остальная часть стека рецептов (FSDP2, bucketed dataloading, чекпоинтинг, генерация) переносится без изменений, и применяется тот же YAML-управляемый рабочий процесс.

Полная и параметрически эффективная тонкая настройка
Поддерживаются как полная тонкая настройка (Full Fine-Tuning), так и параметрически эффективная тонкая настройка (PEFT) в стиле LoRA. Это дает вам выбор: максимальное качество (полная FT на большом кластере) или максимальная эффективность (LoRA на одной ноде). Структура рецепта одинакова для обоих случаев.
Масштабируемое обучение
NeMo Automodel добавляет схемы шардирования, такие как FSDP2, тензорный, контекстный и конвейерный параллелизм, а также оркестрацию нескольких узлов (на данный момент SLURM, в будущем Kubernetes) и многоуровневое bucketing. Эти возможности делают возможным обучение таких крупных моделей, как FLUX.1-dev (12B) и HunyuanVideo (13B), которые иначе были бы недоступны из-за ограничений памяти.
04Рабочий процесс тонкой настройки: пошаговое руководство
Давайте рассмотрим типичный рабочий процесс тонкой настройки на примере модели FLUX.1-dev. Мы будем использовать датасет карт Таро Райдера-Уэйта (Rider-Waite tarot dataset), состоящий из 78 изображений, чтобы обучить модель генерировать изображения в специфическом винтажном стиле. Рекомендуемый способ установки Automodel — использование Docker-контейнера NeMo Automodel (nvcr.io/nvidia/nemo-automodel:26.06), который уже содержит PyTorch, TransformerEngine и другие зависимости, скомпилированные с CUDA. Альтернативно, можно использовать pip3 install nemo-automodel.
Шаг 1: Предварительное кодирование датасета
Рецепт диффузии потребляет предварительно закодированные латенты VAE и текстовые эмбеддинги, а не кодирует исходные изображения на каждом шаге обучения. Это значительно экономит время и ресурсы. Мы можем потоково загружать 78 изображений Таро прямо из Hugging Face и распределять предобработку по всем видимым 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В подписях (captions) уже содержится триггерный токен trtcrd. С этим бюджетом пикселей и портретным соотношением сторон датасета, примеры распределяются по bucketу 384×640, который использовался в демонстрационном запуске. Для обучения изображений предобработка создает файлы кэша .pt и разделенные метаданные в структуре директорий, что позволяет эффективно читать данные во время обучения.
Шаг 2: Запуск обучения с существующим YAML
Используйте файл examples/diffusion/finetune/flux_t2i_flow.yaml напрямую. Этот YAML уже выбирает FLUX.1-dev, полную тонкую настройку трансформера, адаптер flow-matching для FLUX, эффективный размер батча 32 и восьмиступенчатый FSDP2. Вам нужно только предоставить пути, специфичные для Таро, и настройки в качестве переопределений командной строки.

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Этот запуск создаст чекпоинты на шагах 50, 100, 150 и 200. Финальный чекпоинт будет называться epoch_66_step_199 (нумерация с нуля, даже если это 200-й шаг оптимизатора). Обратите внимание, что мы используем torchrun для запуска на 8 узлах (GPU), что соответствует конфигурации FSDP2.
Шаг 3: Генерация из тонко настроенного чекпоинта
После обучения используйте существующий YAML для генерации FLUX и укажите путь к model.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Включите trtcrd в промпт, чтобы вызвать изученный стиль Таро. Для сравнения можно запустить тот же промпт без триггера, чтобы увидеть разницу между базовой моделью и тонко настроенной.
Результаты на шаге 200 показывают, что промпты с триггером сохраняют требуемое содержание (астронавт, сад на Марсе), но приобретают кремовую, красную и черную винтажную палитру, тяжелые контуры чернил, плоские цветовые поля, тона старой бумаги и композицию аллегорической карты. Астронавт без триггера остается фотографическим, что доказывает, что изученный эффект существенно связан именно с trtcrd, а не заменяет базовую модель глобально.
Шаг 4: Производительность
Все измерения были собраны на одном узле с 8× NVIDIA H100 80GB GPU. Для текстовой генерации изображений (512×512) модель FLUX.1-dev при полной тонкой настройке с FSDP2 показывает время шага около 0.9 секунды и скорость 35.51 изображений в секунду (4.44 изображения/сек/GPU). При использовании LoRA r64 с DDP скорость возрастает до 53.73 изображений в секунду. Для видео моделей, таких как Wan 2.1 14B, время шага составляет около 3.8 секунд на один клип, что является отличным показателем для моделей такого масштаба.
05Другие примеры тонкой настройки и LoRA
Результаты тонкой настройки и LoRA демонстрируют мощь NeMo Automodel для специализации доменов. Например, тонкая настройка модели Wan 2.1 на датасете видео в стиле Studio Ghibli успешно адаптировала выходной стиль. Это заметно по изменению внешнего цветового и светового оформления цветов на кадрах по сравнению с базовой моделью.

Мы также наблюдаем явное влияние использования LoRA. Применение адаптера LoRA к Wan 2.1 заставляет видео приобретать характерный стиль Ghibli, особенно заметный в подсветке глаз персонажей. Без LoRA видео сохраняет реалистичный стиль, в то время как с LoRA оно становится стилизованным аниме. Эти примеры, включая те, что для FLUX.2, подтверждают, что пользователи могут достигать как максимального качества через полную тонкую настройку, так и максимальной эффективности через LoRA, настраивая вывод под конкретные стилистические домены.
06Что это значит на практике
Интеграция NVIDIA NeMo Automodel с Hugging Face Diffusers снимает одно из главных препятствий для внедрения генеративного ИИ в производство: сложность обучения. Раньше для обучения большой модели, такой как FLUX или Wan, требовались глубокие знания в распределенных системах, ручная настройка параллелизма и конвертация форматов данных. Теперь же, благодаря единому YAML-конфигу и нативной поддержке Diffusers, исследователи и инженеры могут сосредоточиться на качестве данных и промптов, а не на инфраструктурных проблемах.
Для команд в России и других регионах, где доступ к облачным ресурсам может быть ограничен, локальный запуск на кластерах с GPU NVIDIA (H100, A100) становится все более актуальным. NeMo Automodel предоставляет инструменты для эффективного использования этого железа. Возможность запускать LoRA на одной ноде или полную тонкую настройку на кластере дает гибкость в выборе бюджета и качества результата.
В будущем ожидается появление Pythonic recipe APIs, что позволит интегрировать эти рецепты непосредственно в Python-скрипты и ноутбуки, делая процесс еще более удобным для разработчиков, предпочитающих программный интерфейс декларативному YAML. Если вы работаете с диффузионными моделями, NeMo Automodel — это инструмент, который стоит добавить в свой стек прямо сейчас.
07Ресурсы
- NeMo Automodel GitHub
- Diffusion Fine-Tuning Guide
- Diffusion Dataset Preparation
- NeMo Automodel for Transformers (LLM/VLM fine-tuning)
Источник: Hugging Face ↗
