SegMoE: Segmind の拡散エキスパート混合モデル

SegMoE は、事前学習済みモデルを組み合わせて、ゼロから Mixture-of-Experts(MoE)拡散モデルを作成するためのフレームワークです。ユーザーは、Feed‑Forward ブロックや attention 層、あるいはそれらすべてといった特定の層を、トークンを最適なエキスパートに効率的に割り当てるルーターネットワークを持つスパース MoE 層に置き換えることができます。

技術アーキテクチャと命名規則

SegMoE モデルは Stable Diffusion と同じ基本アーキテクチャを保ちつつ、複数のエキスパートモデルを単一フレームワークに統合します。命名規則 SegMoE‑AxB はモデルの構成を示します:

  • A: 結合されるエキスパートモデルの総数。
  • B: 各画像生成時にアクティブに使用されるエキスパートの数。

構成に応じて、特定の層(feed‑forward ブロック、attention、またはその両方)だけが複製され、その他のパラメータは標準の Stable Diffusion モデルと同一です。

利用可能なモデルリリース

Apache 2.0 ライセンスのもと、Hugging Face Hub で以下の 3 つの事前マージ済みモデルが公開されています:

  1. SegMoE 2x1: エキスパートモデルを 2 つ使用。
  2. SegMoE 4x2: エキスパートモデルを 4 つ使用。
  3. SegMoE SD 4x2: Stable Diffusion 1.5 のエキスパートモデルを 4 つ使用。

比較テストの結果、SegMoE モデルはベースモデル(例: RealVisXL_V3.0)に比べ、複数オブジェクトの描写(例: "three green glass bottles")や特定の空間配置(例: "the statue of Liberty next to the Washington Monument")といった複雑シナリオでプロンプト理解が向上することが示されています。

実装とカスタマイズ

ユーザーは segmoe パッケージを用いてカスタム MoE モデルを作成できます。このパッケージは mergekit ライブラリに触発されています。手順は、ベースモデルのパス、エキスパート数、混合対象の層タイプ(ffattn、または all)、各エキスパートのソースモデルとゲート重み計算用の正・負プロンプトを指定した config.yaml ファイルを定義することです。

Hugging Face Diffusers との統合

SegMoE は Hugging Face エコシステムに統合されています。推論は segmoe ライブラリの SegMoEPipeline を使用して実行できます:

from segmoe import SegMoEPipeline

pipeline = SegMoEPipeline("segmind/SegMoE-4x2-v0", device="cuda")

prompt = "cosmic canvas, orange city background, painting of a chubby cat"
negative_prompt = "nsfw, bad quality, worse quality"
img = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=1024,
    width=1024,
    num_inference_steps=25,
    guidance_scale=7.5,
).images[0]
img.save("image.png")

パフォーマンスのトレードオフとハードウェア要件

SegMoE は機能強化を提供しますが、特有の計算オーバーヘッドが発生します:

  • 推論速度: トークンあたりのエキスパート数が 1 を超える場合、複数のエキスパートモデルで計算を行う必要があるため、単一の SD 1.5 や SDXL モデルよりも遅くなります。
  • VRAM 使用量: MoE モデルは大量の VRAM を必要とします。例として、SegMoE‑4x2 は半精度で 24 GB の VRAM を要し、ローカル環境よりもマルチ GPU 環境での展開に適しています。

ツールと配布

segmoe ツールで作成したカスタムモデルは、ローカルに保存するか、huggingface-cli または huggingface_hub ライブラリの upload_folder 関数を使って Hugging Face Hub にプッシュできます。

Sources