LoRA を使用した効率的な Stable Diffusion ファインチューニング

Hugging Face は Low‑Rank Adaptation(LoRA)を diffusers ライブラリに統合し、VRAM 要求を大幅に削減し、モデルの重みを 3 MB 程度に小さくした、より高速な Stable Diffusion のファインチューニングを可能にしました。この実装により、ユーザーは大規模な拡散モデルを特定のスタイルや概念に合わせて適応させることができ、フルモデルのファインチューニングに伴う膨大な計算コストを回避できます。

Stable Diffusion における LoRA のアーキテクチャと応用

Low‑Rank Adaptation(LoRA)は、Microsoft の研究者が GPT‑3 のような大規模言語モデル(LLM)向けに最初に開発した手法です。事前学習済みモデルの重みを凍結し、トランスフォーマーブロックに学習可能なランク分解行列を注入することで機能します。このアプローチは、ほとんどのモデル重みについて勾配が計算されないため、学習可能パラメータ数と GPU メモリ使用量を削減します。

Stable Diffusion の文脈では、LoRA はクロスアテンション層に適用されます。これらの層は画像表現とそれを記述するテキストプロンプトとの関係を構築する役割を担います。特定の層を対象とすることで、LoRA はフルモデルのファインチューニングに匹敵する品質を実現しつつ、より高速で計算効率が高くなります。

LoRA ファインチューニングの主なメリット

LoRA を diffusers ライブラリに統合することで、従来のファインチューニング手法に比べて主に 3 つの利点があります。

  • 計算リソースの削減: ファインチューニングは一般的な消費者向けハードウェア上で実行可能です。例えば、NVIDIA 2080 Ti(VRAM 11 GB)を使用してフルファインチューニング済みモデルを作成できます。
  • 高速なトレーニング: 学習可能パラメータが減少することで、トレーニングサイクルが大幅に高速化します。
  • 極端に小さい重みファイル: 元のモデルは凍結されたままであるため、注入された層の重みだけを保存すればよいです。その結果、約 3 MB(場合によっては 3.29 MB と示される)の重みファイルとなり、元の UNet モデルの約 1,000 分の 1 のサイズになります。

実装と推論ワークフロー

ファインチューニングプロセス

Hugging Face は、GPU RAM が 11 GB しかなくても動作可能な専用 LoRA ファインチューニングスクリプト(train_text_to_image_lora.py)を提供しています。注目すべき技術的詳細として、LoRA は通常のファインチューニングよりも高い学習率を必要とすることが多く、例えば 1e-4 の学習率が使用されるのに対し、フルファインチューニングでは一般的に ~1e-6 が用いられます。

推論とロード

推論プロセスは、変更されていない Stable Diffusion のベースモデル上に LoRA 重みをロードするよう設計されています。ワークフローは以下の通りです:

  1. ベースモデルの特定: Hub API を使用して、トレーニング時に使用されたベースモデル(例:CompVis/stable-diffusion-v1-4 または runwayml/stable-diffusion-v1-5)を判別します。
  2. パイプラインの初期化: 判別したベースモデルで標準の StableDiffusionPipeline をロードします。
  3. 重みの注入: pipe.unet.load_attn_procs(model_path) を使用して、Hub から LoRA 重みを直接通常のモデル重みにロードします。

Dreambooth との互換性

LoRA は、Stable Diffusion に新しい特定の概念を学習させる手法である Dreambooth と互換性があります。この 2 つの手法を組み合わせることで、以下のような利点があります:

  • 標準的な Dreambooth に比べた高速なトレーニング速度
  • 低データ要件:対象の画像が 5〜10 枚程度で済みます。
  • テキストエンコーダの微調整(任意):対象への忠実度を向上させます。

他のファインチューニング手法との比較

Stable Diffusion を適応させるための他の手法も存在しますが、LoRA は利用シーンに応じて明確な利点を提供します:

  • Textual Inversion: LoRA と同様に小さく共有しやすい重みを生成しますが、通常は単一の対象またはごく少数の概念に限定されます。
  • LoRA: 汎用的なファインチューニングに適しており、モデルを全く新しいドメインやデータセットに適応させることができます。
  • Pivotal Tuning: Textual Inversion でトークン埋め込みを取得し、続いて LoRA でその埋め込みを学習させるハイブリッド手法です。

Sources