Diffusers documentation

NeMo Automodel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

NeMo Automodel

NeMo Automodel は、NVIDIA による PyTorch DTensor ネイティブの学習ライブラリで、大規模な拡散モデルのファインチューニングと事前学習に使用されます。Hugging Face ネイティブであり、チェックポイントの変換なしに、Hub 上の Diffusers 形式のモデルをそのまま学習できます。同じ YAML レシピとハック可能な学習スクリプトが、1 GPU から数百ノードまでのあらゆる規模で動作し、FSDP2 による分散学習、マルチ解像度バケット化されたデータローディング、最大限の GPU 利用率を実現する事前エンコードされた潜在空間での学習に対応しています。学習には flow matching を使用し、完全にオープンソース(Apache 2.0)で、NVIDIA がサポートし、積極的にメンテナンスされています。

NeMo Automodel は Diffusers と直接統合されています。Diffusers のモデルクラスを使用して Hugging Face Hub から事前学習済みモデルを読み込み、DiffusionPipeline を用いて出力を生成します。

典型的なワークフローは、NeMo Automodel をインストール(pip または Docker)し、データを .meta ファイルにエンコードして準備し、YAML レシピを設定し、torchrun でトレーニングを起動し、生成されたチェックポイントで推論を実行することです。

サポートされているモデル

モデルHugging Face IDタスクパラメータユースケース
Wan 2.1 T2V 1.3BWan-AI/Wan2.1-T2V-1.3B-Diffusersテキストから動画へ1.3B限られたハードウェアでの動画生成(単一の40GB A100に収まる)
FLUX.1-devblack-forest-labs/FLUX.1-devテキストから画像へ12B高品質な画像生成
HunyuanVideo 1.5hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2vテキストから動画へ13B高品質な動画生成

インストール

ハードウェア要件

コンポーネント最小推奨
GPUA100 40GBA100 80GB / H100
GPU48+
RAM128 GB256 GB以上
ストレージ500 GB SSD2 TB NVMe

pip を使用して NeMo Automodel をインストールします。ソースからのインストールを含む、すべてのインストール方法については、NeMo Automodel インストールガイドを参照してください。

pip3 install nemo-automodel

代わりに、すべての依存関係が含まれている事前構築済みのDockerコンテナを使用できます。

docker pull nvcr.io/nvidia/nemo-automodel:26.02.00
docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/nemo-automodel:26.02.00

コンテナが終了すると、チェックポイントディレクトリをホストにバインドマウントしていない場合、チェックポイントは失われます。例えば、docker run コマンドに -v /host/path/checkpoints:/workspace/checkpoints を追加してください。

データ準備

NeMo Automodel は、潜在空間で拡散モデルを学習します。学習を開始する前に、生の画像や動画を、VAE 潜在変数とテキスト埋め込みを含む .meta ファイルに前処理する必要があります。これにより、各学習ステップでの再エンコードを回避できます。

組み込みの前処理ツールを使用してデータをエンコードします。このツールは、利用可能なすべてのGPUに自動的にワークを分散します。

動画の前処理
画像の前処理

動画の前処理コマンドは Wan 2.1 と HunyuanVideo で同じですが、フラグが異なります。Wan 2.1 は --processor wan を --resolution_preset と --caption_format sidecar と組み合わせて使用し、HunyuanVideo は --processor hunyuan を --target_frames と組み合わせてフレーム数を設定し、--caption_format meta_json を使用します。

Wan 2.1:

python -m tools.diffusion.preprocessing_multiprocess video \
    --video_dir /data/videos \
    --output_dir /cache \
    --processor wan \
    --resolution_preset 512p \
    --caption_format sidecar

HunyuanVideo:

python -m tools.diffusion.preprocessing_multiprocess video \
    --video_dir /data/videos \
    --output_dir /cache \
    --processor hunyuan \
    --target_frames 121 \
    --caption_format meta_json

出力形式

Preprocessing は、解像度バケットごとに整理されたキャッシュディレクトリを生成します。NeMo Automodel は、バケット化されたサンプリングによるマルチ解像度トレーニングをサポートしています。サンプルは空間解像度ごとにグループ化され、各バッチが同じサイズのサンプルのみを含むようにすることで、パディングによる無駄を回避します。

/cache/
├── 512x512/                      # Resolution bucket
│   ├── <hash1>.meta              # VAE latents + text embeddings
│   ├── <hash2>.meta
│   └── ...
├── 832x480/                      # Another resolution bucket
│   └── ...
├── metadata.json                 # Global config (processor, model, total items)
└── metadata_shard_0000.json      # Per-sample metadata (paths, resolutions, captions)

キャプションの形式、入力データの要件、および利用可能なすべての前処理引数については、Diffusion Dataset Preparationガイドを参照してください。

トレーニング設定

ファインチューニングは、以下の2つのコンポーネントによって駆動されます。

  1. レシピスクリプト(finetune.py)は、学習ループを含む Python のエントリポイントです。モデルの読み込み、dataloader の構築、フォワード/バックワードパスの実行、flow matching ロスの計算、チェックポイントの保存、およびログ出力を行います。
  2. YAML設定ファイルは、レシピが使用するすべての設定を指定します。ファインチューニングするモデル、データの保存場所、オプティマイザーのハイパーパラメータ、並列化戦略などです。コードを変更するのではなく、このファイルを編集してトレーニングをカスタマイズすることで、1台から数百台のGPUまでスケールできます。

YAMLのフィールドは、CLIから上書きすることもできます:

torchrun --nproc-per-node=8 examples/diffusion/finetune/finetune.py \
  -c examples/diffusion/finetune/wan2_1_t2v_flow.yaml \
  --optim.learning_rate 1e-5 \
  --step_scheduler.num_epochs 50

以下は、Wan 2.1 T2V 1.3B のファインチューニング用のアノテーション付き設定です。各セクションについて説明します。

seed: 42

# ── Experiment tracking (optional) ──────────────────────────────────────────
# Weights & Biases integration for logging metrics, losses, and learning rates.
# Set mode: "disabled" to turn off.
wandb:
  project: wan-t2v-flow-matching
  mode: online
  name: wan2_1_t2v_fm

# ── Model ───────────────────────────────────────────────────────────────────
# pretrained_model_name_or_path: any Hugging Face model ID or local path.
# mode: "finetune" loads pretrained weights; "pretrain" trains from scratch.
model:
  pretrained_model_name_or_path: Wan-AI/Wan2.1-T2V-1.3B-Diffusers
  mode: finetune

# ── Training schedule ───────────────────────────────────────────────────────
# global_batch_size: effective batch across all GPUs.
# Gradient accumulation is computed automatically: global / (local × num_gpus).
step_scheduler:
  global_batch_size: 8
  local_batch_size: 1
  ckpt_every_steps: 1000     # Save a checkpoint every N steps
  num_epochs: 100
  log_every: 2               # Log metrics every N steps

# ── Data ────────────────────────────────────────────────────────────────────
# _target_: the dataloader factory function.
#   Use build_video_multiresolution_dataloader for video models (Wan, HunyuanVideo).
#   Use build_text_to_image_multiresolution_dataloader for image models (FLUX).
# model_type: "wan" or "hunyuan" (selects the correct latent format).
# base_resolution: target resolution for multiresolution bucketing.
data:
  dataloader:
    _target_: nemo_automodel.components.datasets.diffusion.build_video_multiresolution_dataloader
    cache_dir: PATH_TO_YOUR_DATA
    model_type: wan
    base_resolution: [512, 512]
    dynamic_batch_size: false  # When true, adjusts batch per bucket to maintain constant memory
    shuffle: true
    drop_last: false
    num_workers: 0

# ── Optimizer ───────────────────────────────────────────────────────────────
# learning_rate: 5e-6 is a good starting point for fine-tuning.
# Adjust weight_decay and betas for your dataset.
optim:
  learning_rate: 5e-6
  optimizer:
    weight_decay: 0.01
    betas: [0.9, 0.999]

# ── Learning rate scheduler ─────────────────────────────────────────────────
# Supports cosine, linear, and constant schedules.
lr_scheduler:
  lr_decay_style: cosine
  lr_warmup_steps: 0
  min_lr: 1e-6

# ── Flow matching ───────────────────────────────────────────────────────────
# adapter_type: model-specific adapter — must match the model:
#   "simple" for Wan 2.1, "flux" for FLUX.1-dev, "hunyuan" for HunyuanVideo.
# timestep_sampling: "uniform" for Wan, "logit_normal" for FLUX and HunyuanVideo.
# flow_shift: shifts the flow schedule (model-dependent).
# i2v_prob: probability of image-to-video conditioning during training (video models).
flow_matching:
  adapter_type: "simple"
  adapter_kwargs: {}
  timestep_sampling: "uniform"
  logit_mean: 0.0
  logit_std: 1.0
  flow_shift: 3.0
  num_train_timesteps: 1000
  i2v_prob: 0.3
  use_loss_weighting: true

# ── FSDP2 distributed training ──────────────────────────────────────────────
# dp_size: number of GPUs for data parallelism (typically = total GPUs on node).
# tp_size, cp_size, pp_size: tensor, context, and pipeline parallelism.
#   For most fine-tuning, dp_size is all you need; leave others at 1.
fsdp:
  tp_size: 1
  cp_size: 1
  pp_size: 1
  dp_replicate_size: 1
  dp_size: 8

# ── Checkpointing ──────────────────────────────────────────────────────────
# checkpoint_dir: where to save checkpoints (use a persistent path with Docker).
# restore_from: path to resume training from a previous checkpoint.
checkpoint:
  enabled: true
  checkpoint_dir: PATH_TO_YOUR_CKPT_DIR
  model_save_format: torch_save
  save_consolidated: false
  restore_from: null

設定フィールドの参照

下表には、最小限の必須設定をリストしています。すべてのモデルの完全な設定例については、NeMo Automodel の例を参照してください。

セクション必須?変更すべき点
modelはいpretrained_model_name_or_path に Hugging Face のモデル ID を設定します。mode: finetune または mode: pretrain を設定します。
step_schedulerはいglobal_batch_size は、すべての GPU にわたる実効バッチサイズです。ckpt_every_steps はチェックポイントの頻度を制御します。勾配の蓄積は自動的に計算されます。
dataはいcache_dir に、前処理済みの.metaファイルを含むパスを設定します。モデルが異なる場合は、_target_とmodel_typeを変更してください。
optimはいlearning_rate: 5e-6 はファインチューニングの適切なデフォルト値です。データセットやモデルに応じて調整してください。
lr_schedulerはいlr_decay_style には cosine、linear、または constant を指定します。段階的なウォームアップには lr_warmup_steps を設定します。
flow_matchingはいadapter_type はモデルと一致する必要があります(Wan は simple、FLUX は flux、HunyuanVideo は hunyuan)。adapter_kwargs については、モデル固有の設定を参照してください。
fsdpはいdp_size を GPU の数に設定します。マルチノードの場合、すべてのノードにまたがる GPU の総数に設定します。
checkpoint推奨checkpoint_dir は永続的なパスに設定してください。Docker を使用する場合、特に重要です。restore_from を使用すると、以前のチェックポイントから再開できます。
wandbオプションWeights & Biases の実験トラッキングを有効にするよう設定します。mode: disabled を設定すると無効になります。

トレーニングを開始

単一ノード
マルチノード
torchrun --nproc-per-node=8 \
  examples/diffusion/finetune/finetune.py \
  -c examples/diffusion/finetune/wan2_1_t2v_flow.yaml

生成

学習後、ファインチューニングされたチェックポイントを使用して、テキストプロンプトから動画や画像を生成します。

Wan 2.1
FLUX
HunyuanVideo
python examples/diffusion/generate/generate.py \
  -c examples/diffusion/generate/configs/generate_wan.yaml

ファインチューニング済みのチェックポイントを使用する場合:

python examples/diffusion/generate/generate.py \
  -c examples/diffusion/generate/configs/generate_wan.yaml \
  --model.checkpoint ./checkpoints/step_1000 \
  --inference.prompts '["A dog running on a beach"]'

Diffusersとの統合

NeMo Automodel は Diffusers を基盤として構築されており、モデルの読み込みと推論のバックボーンとして Diffusers を利用しています。モデルは WanTransformer3DModel、FluxTransformer2DModel、HunyuanVideoTransformer3DModel などの Diffusers のモデルクラスを使用して Hugging Face Hub から直接読み込まれ、WanPipeline や FluxPipeline などの Diffusers パイプラインを通じて出力が生成されます。

この統合により、Diffusersのユーザーには以下の利点があります。

  • チェックポイント変換不要:Hubからの事前学習済み重みはそのまま利用できます。pretrained_model_name_or_pathにDiffusers形式のモデルIDを指定して、すぐにトレーニングを開始できます。
  • Day-0 モデルサポート: 新しい拡散モデルが Diffusers に追加され、Hub にアップロードされると、専用の学習スクリプトを待つことなく、NeMo Automodel を使用してファインチューニングを行うことができます。
  • Pipeline 互換の出力:ファインチューニングされたチェックポイントは、Diffusers のパイプラインに直接読み込んで推論を実行したり、Hub で共有したり、量子化やコンパイルなどのツールでさらに最適化したりできる形式で保存されます。
  • Diffusersモデルのスケーラブルな学習: NeMo Automodelは、組み込みのDiffusers学習スクリプトが提供する機能を超えた分散学習機能(FSDP2、マルチノード、マルチリゾリューションバケット化)を追加します。その際、モデルおよびパイプラインのインターフェースはそのまま維持されます。
  • 共有エコシステム: Diffusersエコシステム由来のモデル、LoRAアダプター、パイプラインコンポーネントはすべて、トレーニングおよび推論ワークフロー全体を通じて互換性を保ちます。

NVIDIA チーム

リソース

Update on GitHub