世界を動かす技術を、日本語で。

純粋なPyTorchでゼロから「Stable Diffusion 3.5」を再実装しました

概要

miniDiffusion は、Stable Diffusion 3.5を PyTorch のみで再実装した軽量なプロジェクト。 教育・実験・ハッキング用途を重視した 最小限コード 設計。 VAEからDiT、トレーニング・データセットまで 約2800行 で構成。 各主要ファイルと役割、セットアップ手順も明確に説明。 MITライセンス、実験的要素を含むため 注意喚起 あり。

miniDiffusion概要

  • Stable Diffusion 3.5 の純粋なPyTorch再実装プロジェクト
  • 教育・実験・ハッキング を主目的としたミニマル設計
  • VAE、DiT、トレーニング、データセット まで約2800行のシンプルなコードベース
  • 依存関係を最小限に抑え、 再現性・拡張性 を重視
  • MITライセンス 下で公開、自由な利用と改変が可能

主要ファイル構成

  • dit.py :メインのStable Diffusionモデル実装
  • dit_components.py :埋め込み、正規化、パッチ埋め込み、補助関数
  • attention.py :Joint Attention実装
  • noise.py :Rectified FlowのODEを解くEuler Scheduler
  • t5_encoder.py/clip.py :T5・CLIPテキストエンコーダ
  • tokenizer.py :Byte-Pair・Unigramトークナイザー
  • metrics.py :Fréchet inception distance(FID)評価指標
  • common.py :トレーニング用ヘルパー関数
  • common_ds.py :画像データをDiT用に変換するイテラブルデータセット

主要フォルダ構成

  • modelフォルダ :トレーニング後のモデルチェックポイント・ログ保存先
  • encodersフォルダ :VAEやCLIPなど他モジュールのチェックポイント保存先

コアコンポーネント

  • 画像生成モジュール :VAE、CLIP、T5テキストエンコーダの実装
  • トークナイザー :Byte-Pair・Unigram方式
  • SD3コンポーネント :Multi-Modal Diffusion Transformer、Flow-Matching Euler Scheduler、Logit-Normal Sampling、Joint Attention
  • 学習・推論スクリプト :SD3用のトレーニング・推論

セットアップ手順

  • リポジトリ取得
    • git clone "https://github.com/yousef-rafat/miniDiffusion"
  • 依存パッケージインストール
    • pip install -r requirements.txt
  • モデル用チェックポイント取得
    • get_checkpoints.py内に Hugging Faceトークン を追加
    • python3 encoders/get_checkpoints.py実行

注意事項

  • 実験的機能 多数、十分なテストが未実施
  • 安定性や本番運用前の 追加検証 推奨

ライセンス

  • MITライセンス
  • 教育・実験用途向け公開

Hackerたちの意見

ソフトウェア開発にあまり情熱を注いでないけど、これはクールなプロジェクトだね。誰でも基本から車輪を再発明できるなんて、めっちゃすごいよ。

学習者にとって素晴らしいリソースになりそうだね。ちょっと気になるんだけど、初心者が使えるチュートリアルとか解説ってあるのかな?

fast.aiにはStable Diffusionを構築するためのコースがあるよ。 https://course.fast.ai/Lessons/part2.html

ここでのDiTは、フルSD 3.5と同じようにクロストークンアテンションをキャッチしてるの?それとも分かりやすくするために簡略化されてるのかな?

これが何を意味するのかよくわからないな。もしStable Diffusion 3.5モデルを指してるなら、なんでここでそれを取得してるの? https://github.com/yousef-rafat/miniDiffusion/blob/main/enco... トレーニングデータセットはすごく小さくて、ファッション関連の画像しか含まれてないよね。 https://github.com/yousef-rafat/miniDiffusion/tree/main/data...

このデータセットは、拡散モデルのファインチューニングを試すためのものだよ。SD3をゼロからコードを書き直して再実装してるけど、ハードウェアの制約からHuggingFaceの重みを使ってるんだ。

もし興味があれば、Fluxのリファレンス実装はすごくミニマリスティックだよ。 https://github.com/black-forest-labs/flux/tree/main/src/flux minRFプロジェクトは、小さな拡散モデルを教正流でトレーニングするのがとても簡単だよ。 https://github.com/cloneofsimo/minRF それに、SD 3.5のリファレンス実装も実際にはミニマリスティックだよ。 https://github.com/Stability-AI/sd3-ref

参考実装はメンテされてないし、バグも多いよ。例えば、https://github.com/huggingface/transformers/issues/27961 のOpenAIのCLIP用トークナイザーはバグだらけ。これは参考実装だから、トレーニングに使ったものじゃないし、問題も解決されずに他のプロジェクトに無限にコピーされてる。Fluxはどうなの? トレーニングに使ったとは言ってないし、実際には使ってない。バグもあって、cudagraphsとか壊すこともあるけど、そこまで影響はないかな。一方で、CLIPの参考を使ってるから、CLIPの参考もバグがあるし、結局これもバグだらけだね…。

この実装には何か注目すべき特性があるの?一部は遅かったり速かったりするのかな?

つまり、ライセンス制約なしのStable Diffusionってこと?

いや、推論やトレーニングのアルゴリズムは数学だから著作権はないよ。OPはただ別の実装を書いただけ。著作権があるのはモデルで、OPはそれをゼロからトレーニングしてないし、トレーニングに必要な素材や計算資源も持ってないからね。

ルートヴィヒ・マクシミリアン大学のCompVizグループから入手できる元の学術ソースは、どれくらい使えるの?

質問するのが恥ずかしいけど、今あるもので、リポジトリが存在する前にはなかったものについて詳しく教えてくれる人いる? モデルを作るのはずっと避けてきたけど、その出力には何年も関わってきたから…混乱の根源は、推論やトレーニング用のPyTorchベースのスクリプトがすでにあったと思ってたからだと思う。(少なくとも推論用のスクリプトはモデルと一緒にリリースされると思ってたし、ファインチューニングやトレーニング用のもそうだろうと考えてた)だから、これがクリーンルーム/ダーティールームのリライトなのか、みんなが「PyTorch」を使ってるけど、実際にはCUDA/C/何かのプロプライエタリなものを呼び出してて、純粋なPyTorch実装より理解するのが難しいのか、よくわからない。とにかく、これらはあまり良い推測じゃないから、ここでやめとくね。 :)

Stability AIはStable Diffusionモデルのクリエイターで、彼らの製品は独自のStability AI Community Licenseの下でリリースされてるけど、これはMITライセンスのような「自由」なものじゃないよ。特定の方法で重みを変更することは許可されてない。このパッケージは基本的にモデルを動かす(推論)もので、既存のAIの重みを使ってファインチューニングするかもしれない。学ぶには素晴らしい方法だけど、同じライセンスの問題にぶつかる可能性もあるね。