OmniGen クイックスタート¶
この例では、OmniGen 用の Lycoris LoKr をトレーニングします。現時点では一般的な T2I 性能改善に焦点を当てており、編集/指示学習ではありません。
ハードウェア要件¶
OmniGen は約 3.8B パラメータの比較的コンパクトなモデルです。SDXL VAE を使用しますが、テキストエンコーダは使いません。代わりに OmniGen はネイティブトークン ID を入力として使用し、マルチモーダルモデルのように振る舞います。
トレーニング時のメモリ使用量はまだ不明ですが、バッチサイズ 2 または 3 で 24G カードに十分収まると予想されます。モデルは量子化でき、さらに VRAM を節約できます。
OmniGen は SimpleTuner で学習可能な他のモデルと比べて独特なアーキテクチャです。
- 現在サポートされているのは t2i (text-to-image) 学習のみで、モデル出力が学習プロンプトと入力画像に整合します。
- 画像から画像の学習モードはまだサポートされていませんが、将来対応する可能性があります。
- このモードでは 2 枚目の画像を入力として提供し、モデルはそれを出力のコンディショニング/参照データとして使用します。
- OmniGen の学習中の損失値は非常に高く、その理由は不明です。
前提条件¶
Python がインストールされていることを確認してください。SimpleTuner は 3.10 から 3.12 でうまく動作します。
以下を実行して確認できます:
Ubuntu に Python 3.12 がインストールされていない場合は、以下を試してください:
コンテナイメージの依存関係¶
Vast、RunPod、TensorDock(など)の場合、CUDA 12.2-12.8 イメージで CUDA 拡張のコンパイルを有効にするには以下が機能します:
インストール¶
pip で SimpleTuner をインストールします:
pip install 'simpletuner[cuda]'
# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
手動インストールまたは開発セットアップについては、インストールドキュメントを参照してください。
環境のセットアップ¶
SimpleTuner を実行するには、設定ファイル、データセットとモデルのディレクトリ、およびデータローダー設定ファイルをセットアップする必要があります。
設定ファイル¶
実験的なスクリプト configure.py を使用すると、インタラクティブなステップバイステップの設定でこのセクションを完全にスキップできる可能性があります。一般的な落とし穴を避けるための安全機能が含まれています。
注意: これはデータローダーを設定しません。後で手動で設定する必要があります。
実行するには:
⚠️ Hugging Face Hub に容易にアクセスできない国にいるユーザーは、使用している
$SHELLに応じて、~/.bashrcまたは~/.zshrcにHF_ENDPOINT=https://hf-mirror.comを追加する必要があります。
手動で設定したい場合:
config/config.json.example を config/config.json にコピー:
そこで、以下の変数を変更する必要があります:
model_type-loraに設定します。lora_type-lycorisに設定します。model_family-omnigenに設定します。model_flavour-v1に設定します。output_dir- チェックポイントと検証画像を保存するディレクトリに設定します。ここではフルパスを使用することをお勧めします。train_batch_size- 24G カードでフルの gradient checkpointing を使う場合、6 まで上げられます。validation_resolution- OmniGen のこのチェックポイントは 1024px モデルなので、1024x1024か OmniGen の他の対応解像度に設定します。- 他の解像度はカンマ区切りで指定できます:
1024x1024,1280x768,2048x2048 validation_guidance- OmniGen の推論時に普段使う値を設定します。2.5-3.0 程度の低い値はよりリアルになります。validation_num_inference_steps- 30 前後を使用します。-
use_ema-trueにすると、メインのチェックポイントに加えてより滑らかな結果が得られます。 -
optimizer- 使い慣れた最適化手法なら何でも良いですが、この例ではadamw_bf16を使用します。 mixed_precision- 最も効率的な学習のためにbf16を推奨します (またはnoですがメモリ消費が増え遅くなります)。gradient_checkpointing- これを無効化すると最速ですがバッチサイズが制限されます。VRAM 最小化には有効化が必須です。
マルチ GPU ユーザーは、使用 GPU 数の設定に関する情報として このドキュメント を参照してください。
最終的な config.json は次のようになります:
設定例を表示
{
"validation_torch_compile": "false",
"validation_step_interval": 200,
"validation_seed": 42,
"validation_resolution": "1024x1024",
"validation_prompt": "A photo-realistic image of a cat",
"validation_num_inference_steps": "20",
"validation_guidance": 2.0,
"validation_guidance_rescale": "0.0",
"vae_cache_ondemand": true,
"vae_batch_size": 1,
"train_batch_size": 1,
"tracker_run_name": "eval_loss_test1",
"seed": 42,
"resume_from_checkpoint": "latest",
"resolution": 1024,
"resolution_type": "pixel_area",
"report_to": "tensorboard",
"output_dir": "output/models-omnigen",
"optimizer": "adamw_bf16",
"num_train_epochs": 0,
"num_eval_images": 1,
"model_type": "lora",
"model_family": "omnigen",
"mixed_precision": "bf16",
"minimum_image_size": 0,
"max_train_steps": 10000,
"max_grad_norm": 0.01,
"lycoris_config": "config/lycoris_config.json",
"lr_warmup_steps": 100,
"lr_scheduler": "constant",
"lora_type": "lycoris",
"learning_rate": "4e-5",
"gradient_checkpointing": "true",
"grad_clip_method": "value",
"eval_steps_interval": 100,
"disable_benchmark": false,
"data_backend_config": "config/omnigen/multidatabackend.json",
"checkpoints_total_limit": 5,
"checkpoint_step_interval": 500,
"caption_dropout_probability": 0.0,
"base_model_precision": "no_change",
"aspect_bucket_rounding": 2
}
そしてシンプルな config/lycoris_config.json。追加の学習安定性のため FeedForward を削除することもできます。
設定例を表示
高度な実験的機能¶
高度な実験的詳細を表示
SimpleTuner には、トレーニングの安定性とパフォーマンスを大幅に向上させることができる実験的機能が含まれています。 * **[Scheduled Sampling (Rollout)](../experimental/SCHEDULED_SAMPLING.md):** トレーニング中にモデルが独自の入力を生成できるようにすることで、露出バイアスを減らし、出力品質を向上させます。 > ⚠️ これらの機能はトレーニングの計算オーバーヘッドを増加させます。 #### 検証プロンプト `config/config.json` の "primary validation prompt" (`--validation_prompt`) は、単一の被写体やスタイルに対して学習しているメインの instance_prompt です。加えて、検証時に回す追加プロンプトを含む JSON ファイルを作成できます。 `config/user_prompt_library.json.example` の形式は次の通りです: ニックネームは検証ファイル名になるため、短くしてファイルシステムと互換にしてください。 このプロンプトライブラリをトレーナーに指定するには、`config.json` の末尾に新しい行として TRAINER_EXTRA_ARGS へ追加します: 多様なプロンプトのセットは、モデルが崩壊していないかを判断するのに役立ちます。この例では `{
"anime_<token>": "a breathtaking anime-style portrait of <token>, capturing her essence with vibrant colors and expressive features",
"chef_<token>": "a high-quality, detailed photograph of <token> as a sous-chef, immersed in the art of culinary creation",
"just_<token>": "a lifelike and intimate portrait of <token>, showcasing her unique personality and charm",
"cinematic_<token>": "a cinematic, visually stunning photo of <token>, emphasizing her dramatic and captivating presence",
"elegant_<token>": "an elegant and timeless portrait of <token>, exuding grace and sophistication",
"adventurous_<token>": "a dynamic and adventurous photo of <token>, captured in an exciting, action-filled moment",
"mysterious_<token>": "a mysterious and enigmatic portrait of <token>, shrouded in shadows and intrigue",
"vintage_<token>": "a vintage-style portrait of <token>, evoking the charm and nostalgia of a bygone era",
"artistic_<token>": "an artistic and abstract representation of <token>, blending creativity with visual storytelling",
"futuristic_<token>": "a futuristic and cutting-edge portrayal of <token>, set against a backdrop of advanced technology",
"woman": "a beautifully crafted portrait of a woman, highlighting her natural beauty and unique features",
"man": "a powerful and striking portrait of a man, capturing his strength and character",
"boy": "a playful and spirited portrait of a boy, capturing youthful energy and innocence",
"girl": "a charming and vibrant portrait of a girl, emphasizing her bright personality and joy",
"family": "a heartwarming and cohesive family portrait, showcasing the bonds and connections between loved ones"
}
安定した評価損失¶
安定した MSE 損失を使用してモデルのパフォーマンスをスコアリングしたい場合は、評価損失の設定と解釈に関する情報について このドキュメント を参照してください。
検証プレビュー¶
SimpleTuner は、Tiny AutoEncoder モデルを使用した生成中の中間検証プレビューのストリーミングをサポートしています。これにより、Webhook コールバックを介してリアルタイムで段階的に生成される検証画像を確認できます。
有効にするには:
要件: - Webhook 設定 - 検証が有効
Tiny AutoEncoder のオーバーヘッドを削減するには、validation_preview_steps をより高い値 (例: 3 または 5) に設定します。validation_num_inference_steps=20 と validation_preview_steps=5 の場合、ステップ 5、10、15、20 でプレビュー画像を受け取ります。
Flow schedule shifting¶
現在 OmniGen は独自のフローマッチング方式を使うようハードコードされており、スケジュールシフトは適用されません。
データセットの考慮事項¶
モデルをトレーニングするには、かなりのデータセットが必要です。データセットサイズには制限があり、モデルを効果的にトレーニングするためにデータセットが十分に大きいことを確認する必要があります。最小限のデータセットサイズは train_batch_size * gradient_accumulation_steps に加えて vae_batch_size よりも大きい必要があります。データセットが小さすぎると使用できません。
ℹ️ 画像数が少なすぎると no images detected in dataset と表示されることがあります。その場合は
repeatsを増やすと解決します。
持っているデータセットに応じて、データセットディレクトリとデータローダー設定ファイルを異なる方法でセットアップする必要があります。この例では、データセットとして pseudo-camera-10k を使用します。
--data_backend_config (config/multidatabackend.json) を作成し、次を含めます:
設定例を表示
[
{
"id": "pseudo-camera-10k-omnigen",
"type": "local",
"crop": true,
"crop_aspect": "square",
"crop_style": "center",
"resolution": 512,
"minimum_image_size": 512,
"maximum_image_size": 512,
"target_downsample_size": 512,
"resolution_type": "pixel_area",
"cache_dir_vae": "cache/vae/omnigen/pseudo-camera-10k",
"instance_data_dir": "datasets/pseudo-camera-10k",
"disabled": false,
"skip_file_discovery": "",
"caption_strategy": "filename",
"metadata_backend": "discovery",
"repeats": 0,
"is_regularisation_data": true
},
{
"id": "dreambooth-subject",
"type": "local",
"crop": false,
"resolution": 1024,
"minimum_image_size": 1024,
"maximum_image_size": 1024,
"target_downsample_size": 1024,
"resolution_type": "pixel_area",
"cache_dir_vae": "cache/vae/omnigen/dreambooth-subject",
"instance_data_dir": "datasets/dreambooth-subject",
"caption_strategy": "instanceprompt",
"instance_prompt": "the name of your subject goes here",
"metadata_backend": "discovery",
"repeats": 1000
},
{
"id": "dreambooth-subject-512",
"type": "local",
"crop": false,
"resolution": 512,
"minimum_image_size": 512,
"maximum_image_size": 512,
"target_downsample_size": 512,
"resolution_type": "pixel_area",
"cache_dir_vae": "cache/vae/omnigen/dreambooth-subject-512",
"instance_data_dir": "datasets/dreambooth-subject",
"caption_strategy": "instanceprompt",
"instance_prompt": "the name of your subject goes here",
"metadata_backend": "discovery",
"repeats": 1000
},
{
"id": "text-embeds",
"type": "local",
"dataset_type": "text_embeds",
"default": true,
"cache_dir": "cache/text/omnigen",
"disabled": false,
"write_batch_size": 128
}
]
caption_strategy のオプションと要件は DATALOADER.md を参照してください。
ℹ️ 512px と 1024px のデータセットを同時に走らせることはサポートされており、収束の改善につながる可能性があります。
ℹ️ OmniGen はテキストエンコーダ埋め込みを生成しませんが、現時点では定義が必要です。
私の OmniGen 設定は非常に基本的で、安定評価損失の学習セットを使用した場合は次のようになりました:
設定例を表示
[
{
"id": "something-special-to-remember-by",
"type": "local",
"instance_data_dir": "/datasets/pseudo-camera-10k/train",
"minimum_image_size": 1024,
"maximum_image_size": 1536,
"target_downsample_size": 1024,
"resolution": 1024,
"resolution_type": "pixel_area",
"caption_strategy": "filename",
"cache_dir_vae": "cache/vae/omnigen",
"vae_cache_clear_each_epoch": false,
"crop": true,
"crop_aspect": "square"
},
{
"id": "omnigen-eval",
"type": "local",
"dataset_type": "eval",
"crop": true,
"crop_aspect": "square",
"instance_data_dir": "/datasets/test_datasets/squares",
"resolution": 1024,
"minimum_image_size": 1024,
"maximum_image_size": 1024,
"target_downsample_size": 1024,
"resolution_type": "pixel_area",
"cache_dir_vae": "cache/vae/omnigen-eval",
"caption_strategy": "filename"
},
{
"id": "text-embed-cache",
"dataset_type": "text_embeds",
"default": true,
"type": "local",
"cache_dir": "cache/text/omnigen"
}
]
次に datasets ディレクトリを作成します:
mkdir -p datasets
pushd datasets
huggingface-cli download --repo-type=dataset bghira/pseudo-camera-10k --local-dir=pseudo-camera-10k
mkdir dreambooth-subject
# place your images into dreambooth-subject/ now
popd
これにより、約 10k の写真サンプルが datasets/pseudo-camera-10k にダウンロードされ、自動的にディレクトリが作成されます。
Dreambooth 画像は datasets/dreambooth-subject に配置します。
WandB と Huggingface Hub へのログイン¶
特に --push_to_hub や --report_to=wandb を使う場合、トレーニング開始前に WandB と HF Hub にログインしておくと良いでしょう。
Git LFS リポジトリに手動でプッシュする場合は、git config --global credential.helper store も実行してください。
以下のコマンドを実行します:
と
指示に従って両方にログインしてください。
トレーニングの実行¶
SimpleTuner ディレクトリから、以下のいずれかで開始できます:
オプション 1 (推奨 - pip install):
pip install 'simpletuner[cuda]'
# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
simpletuner train
オプション 2 (Git clone 方式):
オプション 3 (レガシー方式 - まだ動きます):
これにより、テキスト埋め込みと VAE 出力のディスクキャッシュが開始されます。
詳細は dataloader と tutorial を参照してください。
メモとトラブルシューティングのヒント¶
最低 VRAM 構成¶
OmniGen の最小 VRAM 構成はまだ不明ですが、以下に近いと予想されます:
- OS: Ubuntu Linux 24
- GPU: 単一の NVIDIA CUDA デバイス (10G, 12G)
- システムメモリ: 約 50G
- ベースモデル精度:
int8-quanto(またはfp8-torchao,int8-torchaoは同様のメモリ特性) - Optimiser: Lion 8Bit Paged,
bnb-lion8bit-paged - 解像度: 1024px
- バッチサイズ: 1、勾配蓄積なし
- DeepSpeed: 無効 / 未設定
- PyTorch: 2.7+
- 起動時の outOfMemory を避けるため
--quantize_via=cpuを使用 --gradient_checkpointingを有効化- 小さな LoRA / Lycoris 設定 (例: LoRA rank 1 または Lokr factor 25)
注意: VAE 埋め込みとテキストエンコーダ出力の事前キャッシュはさらにメモリを使い OOM する可能性があります。その場合は VAE のタイル/スライスを有効にします。大規模データセットで VAE キャッシュのディスク使用を避けるには --vae_cache_disable を使用してください。
AMD 7900XTX + Pytorch 2.7 + ROCm 6.3 で速度は約 3.4 iter/sec でした。
マスク付き損失¶
被写体やスタイルをマスクしたい場合は、Dreambooth ガイドの masked loss training を参照してください。
量子化¶
まだ十分に検証されていません。
学習率¶
LoRA (--lora_type=standard)¶
未対応。
LoKr (--lora_type=lycoris)¶
- LoKr には穏やかな学習率が良い (
1e-4with AdamW,2e-5with Lion) - 他のアルゴリズムは要検証。
is_regularisation_dataの設定が OmniGen に与える影響は不明 (未検証)
画像アーティファクト¶
OmniGen のアーティファクトへの反応は不明ですが、SDXL VAE を使用するため、細部の制限は同じです。
画質の問題があれば、GitHub で issue を開いてください。
アスペクトバケッティング¶
アスペクトバケットデータへの反応は不明です。試験的な検証が役立ちます。
高い損失値¶
OmniGen は損失値が非常に高く、その理由は不明です。損失値は無視し、生成画像の視覚品質に注目することを推奨します。