LoRAの基本的な仕組みと使い方を理解したら、次は自分だけのLoRAを作ってみましょう。この記事では、Z-Image Turbo向けのLoRA学習をOstris AI Toolkitで実践する方法を、データセット準備から推論テストまで解説します。
この記事でわかること
- Z-Image Turbo用LoRA学習に必要な環境と準備
- AI Toolkitのセットアップ手順
- データセットの準備方法とベストプラクティス
- 学習パラメータの設定と実行
- 学習済みLoRAのComfyUIでの使い方
- Apple Silicon(MPS)環境での所要時間の実測値
前提知識
- LoRAの基本を理解していること
- ComfyUIの基本操作ができること
- ターミナル(コマンドライン)の基本操作ができること
Z-Image TurboのLoRA学習で知っておくべきこと
Training Adapterが必要な理由
Z-Image Turboは蒸留モデルです。通常のモデルが20〜50ステップかけて画像を生成するのに対し、Z-Image Turboはわずか8ステップで生成できるよう最適化されています。
この蒸留(Distillation)は効率的ですが、LoRA学習には問題があります。蒸留モデルに直接LoRA学習をかけると、蒸留で獲得した高速生成能力が壊れてしまうのです。これを「Turbo Drift」と呼びます。
この問題を解決するのがTraining Adapterです。学習中のみ蒸留の効果を一時的に解除し、推論時にはAdapterを外してLoRAだけで動作させます。
学習アプローチの選択肢
| 方式 | 推論速度 | 難易度 | 備考 |
|---|---|---|---|
| Turbo + Training Adapter v2 | 8ステップ(最速) | 低 | 初心者向け。最もポピュラー |
| De-Turboモデルで学習 | 20〜30ステップ | 中 | Adapter不要。長時間のfine-tuneに向く |
| Baseモデルで学習 | 高品質だがやや遅い | 高 | 類似度(likeness)が最も優れる報告あり |
この記事では最も一般的なTurbo + Training Adapter v2の方式で進めます。
環境構築
必要なもの
| 項目 | 最小要件 | 推奨 |
|---|---|---|
| GPU(NVIDIA) | 12GB VRAM | 24GB VRAM |
| GPU(Apple Silicon) | 32GB統合メモリ | 64GB統合メモリ |
| Python | 3.10以上 | 3.10〜3.11 |
| PyTorch | 2.0以上 | 2.8以上(MPS対応) |
| ディスク | 50GB | 100GB以上 |
必要なモデル
| モデル | サイズ | 用途 |
|---|---|---|
| Z-Image Turbo BF16 | ~12GB | ベースモデル |
| Training Adapter v2 | ~324MB | 蒸留解除アダプタ |
| Qwen 3 4B | 含む | テキストエンコーダ |
| VAE (ae.safetensors) | 含む | 画像エンコード/デコード |
AI Toolkitのセットアップ
Training Adapter v2のダウンロード:
セットアップの所要時間(実測)
| 手順 | 所要時間 |
|---|---|
| AI Toolkitクローン | ~10秒 |
| pip install | ~20秒(依存関係による) |
| Training Adapter v2ダウンロード | ~5秒(回線速度による) |
| 合計 | 約35秒 |
データセット準備
画像の準備
LoRA学習の成否はデータセットの品質で決まります。
| 目的 | 推奨枚数 | ポイント |
|---|---|---|
| 最小限のテスト | 5〜15枚 | 動作確認向け |
| スタイル学習 | 30〜120枚 | 45枚程度が良いバランス |
| 高品質キャラクター | 70〜80枚 | 肌テクスチャまで再現 |
データセットのルール:
- 解像度: 1024px以上を推奨(512pxでも動作するが品質は落ちる)
- 多様性: 異なるポーズ、角度、表情、背景を含める
- 一貫性: 学習させたい要素(被写体のアイデンティティ等)は統一する
- 背景: キャラクターLoRAなら背景はバラけさせる
- 避けるべき画像: ピンボケ、低解像度、ウォーターマーク入り、複数被写体
構図の配分(キャラクターLoRAの場合)
| 構図 | 割合 | 理由 |
|---|---|---|
| クローズアップ(顔中心) | 40〜50% | 表情・顔の特徴を重点学習 |
| ミドルショット(上半身) | 30〜40% | 体型・服装の学習 |
| フルボディ | 10〜20% | 全身のプロポーション |
キャプションの作成
各画像に対応するテキストファイル(.txt)を同名で作成します。
datasets/
└── my_dataset/
├── image1.jpg
├── image1.txt ← "sks dog, a photo of a cute shiba inu dog"
├── image2.jpg
├── image2.txt
└── ...
トリガーワード(例: sks)は既存の単語と衝突しない一意な文字列を選びます。全キャプションにトリガーワードを含めることで、推論時にトリガーワードでLoRAの効果を発動できます。
学習設定
YAMLコンフィグ
AI Toolkitの学習はYAMLファイルで設定を管理します。Z-Image Turbo用のテンプレート:
主要パラメータの解説
| パラメータ | 推奨値 | 説明 |
|---|---|---|
linear (Rank) | 8〜16 | LoRAのランク。高いほど表現力が上がるがファイルサイズも増加 |
lr | 1e-4〜5e-5 | 学習率。高すぎると過学習、低すぎると学習不足 |
steps | 3,000〜5,600 | 総ステップ数。データセットサイズに応じて調整 |
batch_size | 1〜2 | 小データセットでは1推奨 |
optimizer | adamw8bit | メモリ効率的。Apple Siliconの場合はadamw |
resolution | [512, 768, 1024] | マルチ解像度バケッティングで多様なサイズに対応 |
cache_latents_to_disk | true | VAEのエンコード結果をキャッシュして高速化 |
gradient_checkpointing | true | VRAM節約のため必須(24GB以下の場合) |
Apple Silicon(MPS)での注意点
Apple SiliconのMPSでAI Toolkitを動かす場合、以下の設定変更が必要です:
device:mps:0に変更optimizer:adamw(adamw8bitはCUDA専用)quantize:false(MPS非対応のため。64GB統合メモリなら量子化なしで動作)num_workers:0(データセット設定に追加。MPSテンソルのマルチプロセス共有非対応のため)
学習の実行
学習が開始すると、以下の処理が順に実行されます:
- モデルロード: Transformer、テキストエンコーダ、VAEの読み込み
- Training Adapterマージ: 蒸留解除アダプタの統合
- LoRAネットワーク作成: 指定Rankでの学習用ネットワーク構築
- レイテンシキャッシュ: データセット画像のVAEエンコード結果をディスクに保存
- 学習ループ: 指定ステップ数の学習を実行
学習の監視
ログでloss値の推移を確認します。正常な学習ではloss値が徐々に低下していきます。
実測: 100ステップ・5枚データセットの場合
実際にApple Silicon M4 Pro(64GB)で100ステップの学習を実行し、以下の検証を行った。
loss推移: 前半20ステップの平均loss 0.383、後半20ステップの平均loss 0.383。100ステップでは有意なloss低下は確認できなかった。ステップごとの振れ幅は0.21〜0.60と大きい。
LoRA重みの変化: LoRA B行列(初期値0)のnormがmean 0.16に移動しており、勾配による重み更新は行われている。
推論への影響: 同一プロンプト・同一seedでLoRAあり/なしの画像を比較したところ、98%のピクセルに差分が存在した。ただし平均差分は3.4/255と小さく、構図や被写体は同一で、テクスチャや色調に微細な変化が見られる程度だった。
結論: 5枚・100ステップではパイプラインの動作確認は取れるが、被写体のアイデンティティ学習(学習データの柴犬への寄せ)は確認できない。実用的なLoRAを作るには最低でも15枚以上・1,000ステップ以上を推奨する。
過学習の兆候:
- loss値が極端に低くなる
- サンプル画像が学習データとほぼ同一になる
- プロンプトの変更に反応しなくなる
対策: ステップ数を減らす、学習率を下げる、データセットを増やす。
学習速度の実測値(Apple Silicon M4 Pro, 64GB)
| 処理 | 所要時間 |
|---|---|
| モデルロード | ~20秒 |
| Training Adapterマージ | ~2秒 |
| テキストエンコーダロード | ~1秒 |
| レイテンシキャッシュ(5枚×3解像度) | ~15秒 |
| 1ステップあたり | ~25秒(512〜1024px混合) |
| 100ステップ | ~42分 |
| 500ステップ | ~3.5時間 |
| 3,000ステップ | ~21時間 |
NVIDIA RTX 4090の場合、1ステップあたり約10〜15秒で、3,000ステップを約8〜12時間で完了できます。
学習済みLoRAの使い方
ComfyUIでの推論
学習完了後、出力ディレクトリにある.safetensorsファイルをComfyUIのmodels/loras/に配置します。
ComfyUIのワークフロー構成:
UNETLoader(Z-Image Turbo)
↓ MODEL
LoRA Loader(学習済みLoRA)
↓ MODEL ↓ CLIP
KSampler ← CLIPTextEncode(トリガーワード含むプロンプト)
↓ LATENT
VAEDecode → SaveImage
強度の調整
- LoRA強度: 0.5〜0.8から始めて調整
- 強すぎると画像が崩れる場合は0.5程度に下げる
- 弱すぎると効果が見えない場合は0.9〜1.0に上げる
既存LoRAとのスタッキング
複数のLoRAを組み合わせることが可能です。
スタイルLoRA (0.6) + キャラクターLoRA (0.3) = 合計0.9
合計重みは1.0未満に保つことを推奨します。
トラブルシューティング
よくある問題
| 問題 | 原因 | 対策 |
|---|---|---|
| 学習画像と同じ画像しか出ない | 過学習 | ステップ数を減らす。LR下げる。データ増やす |
| LoRAの効果が見えない | 学習不足 | ステップ数を増やす。LR上げる |
| サンプルが真っ黒/ノイズ | 設定ミス | cfg=1、steps=8を確認 |
| MPS環境でDataLoaderエラー | マルチプロセス非対応 | num_workers: 0を設定 |
| Out of Memory | モデルが大きすぎ | quantize: true、解像度を下げる |
参考になるリソース
- Training a LoRA for Z-Image Turbo with AI Toolkit - HuggingFace Blog
- ostris/ai-toolkit - GitHub
- Training Adapter v2 - HuggingFace



