8時間の長い待機の末、ついに学習が完了しました。

DGX Spark(ARMベース)でFLUX 1-dev 12Bモデルをファインチューニングした結果、果たして90Wの低電力で生み出された成果物はどうだったのでしょうか?

今日は250、500、750、1000ステップごとに生成されたLoRAアダプタを比較分析し、私が発見した '学習のハニースポット(Honey Spot)' についてお話ししたいと思います。


1. テスト環境と条件



  • ベースモデル: FLUX 1-dev (12B)

  • データセット: 人物リアル画像40枚 (1024x1024)

  • サンプラー: dpmpp_2m, euler

  • ハードウェア: DGX Spark (120GBユニファイドメモリ)

  • LoRAチェックポイント: 250, 500, 750, 1000ステップ

2. ステップごとの結果比較 (The Battle of Steps)

学習された人物が登場するリアル画像を生成し、整合性をテストしました。

🥉 ステップ250: "君... 誰?" (アンダーフィッティング)

  • 結果: 学習対象と雰囲気は似ていますが、「同一人物か?」と問えば首を傾げることになります。目鼻立ちの微妙なディテールが不足しています。

  • 速度: 生成速度は最も速かったですが(100秒未満)、望んでいたクオリティではありませんでした。

  • 診断: アンダーフィット。モデルがまだデータの特徴を十分に吸収していない段階です。

🥈 ステップ500: "あ!君だ!" (グッドフィット)

  • 結果: 誰が見ても学習されたその人物です。ついにLoRAが適切に機能しているという感触を得ました。

  • 特異点: 時々表情を多様にすると他の人のように見えることがありますが、全体的に素晴らしい整合性を示します。

  • 診断: 適正学習区間に入った。 40枚のデータを基準にこの地点から実使用が可能なようです。

🥇 ステップ750: "安定感の美学" (ステーブル)

  • 結果: 500ステップとの大きな違いはありませんが、より安定した印象です。多様なポーズでも人物の特徴がよく維持されます。

  • 診断: 500ステップの延長線上にあり、強いて言えば「熟成された」印象です。

🏅 ステップ1000: "完璧だが... あまりにも完璧すぎる問題" (オーバーフィッティングリスク)

  • 結果: 整合性100%。ブラインドテストをしても原本と区別することが難しいほど自然です。

  • 問題点: 学習データに不存在の「怒った表情」や「セクシーな表情」を要求すると、人物の整合性が崩れる現象が発生します。

  • 診断: オーバーフィットの境界。 モデルが学習データ(「この人のこの表情」)をあまりにも覚え込んでしまい、応用力(Generalization)が低下し始めました。

3. 技術的なミステリーと分析



テスト過程で二つの興味深い(あるいは困惑する)技術的問題を発見しました。

1) LoRAファイルが5GB?

生成された4つのLoRAファイルの容量がすべて 5GB で同じでした。通常、LoRAアダプタは数十MBから数百MBのレベルであるべきです。

分析:

最初は「オプティマイザの状態やテキストエンコーダ全体が一緒に保存されたのか?」と疑いましたが、
FLUX 12B規模にrank 256 LoRAを全レイヤーに付加すると、 LoRA自体のパラメータ数が数GBに達する可能性があります。
つまり、SD1.5基準の「LoRAは数十〜数百MB」という感覚をそのまま適用してはいけなく、
大型モデルではLoRAのrankと適用範囲がすぐに容量に直結するという点を実感しました。
次回は network_dim を64〜128のレベルに下げ、容量と性能のバランスを再度考える予定です。

2) 生成速度の低下 (97〜130秒)

LoRA適用前より生成時間が増加しました。

分析:

  1. 構造的原因: LoRAは基本の重み($W$)に学習された重み($B \times A$)を加算して計算するため、計算量が増えます。

  2. ボトルネック現象: 学習スクリプト設計上、 T5XXLテキストエンコーダはキャッシング後にCPUで処理する構造 なので、
    推論パイプラインでも同様のパスでCPU↔GPUの往復が発生する可能性が疑われます。
    ただし、この部分はまだコードレベルで完全に確認していないため、次回の実験では

  3. TEを全てCUDAに強制配置したとき

  4. キャッシュ戦略を変更したとき
    生成速度と品質がどのように変化するか比較する計画です。

4. 結論: 'ハニースポット(Honey Spot)'を探して

今回の8時間の壮大な旅から得た結論は明確です。 「むやみにたくさん学習させることが良いわけではない。」

  1. 最適の区間: 40枚データセット基準で、 400〜600ステップ が「コストパフォーマンス」と「クオリティ」を両立するハニースポットに見えます。1000ステップは時間の無駄であるだけでなく、柔軟性を損なう可能性があります。

  2. データの重要性: 特定の表情だけを学習すると、その表情しかできない「表情ロボット」になります。データセット構成の際に様々なアングルや表情を盛り込むことが、ステップ数を増やすことよりもはるかに重要です。

  3. DGX Sparkの可能性: たとえ8時間かかり設定に問題があったとしても、90Wの電力で12Bモデルをファインチューニングしたという事実自体が鼓舞されます。

もちろんこのハニースポット(400〜600ステップの区間)は
「40枚データ / FLUX 1-dev / このLoRA設定」というかなり特定の条件から得られた結果です。
ただしこの経験を基に、

  • データ数に比例して適切なステップ範囲をまず探索し
  • その中で細かく切り分けながら最適な地点を見つける方法でアプローチすべきだということを感じました。

5. 次のステップ

次回実験の目標は明確になりました。

  • 最適化: テキストエンコーダ(TE)を全てCUDAに強制割り当てするか、これは FLUX LoRAスクリプトの設計(大きなT5XXLをキャッシュ後にCPUで処理しVRAM節約) の意図なのか深く掘り下げてみます。

  • LoRAダイエット: network_dim 256 → 128 → 64に減った際の容量/クオリティ/整合性を比較します。

  • 精密たたき: 1000ステップまで行かずに、 400〜600ステップの区間を細かく分けて(Save every 50 steps) 最高のモデルを見つけます。

  • 学習データセットにキャプションを導入:

    • 今と同じ人物40枚、キャプション追加 vs ない場合の比較
    • 「表情/ポーズの多様性 vs オーバーフィッティング」という視点で分析

低電力高効率AI研究は続きます。次の投稿ではダイエットに成功したLoRAとともに戻ってきます!