Skip to content

DiffusionBlocks

DiffusionBlocks は、対応する diffusion Transformer を独立に学習できるレイヤー群へ変換します。各グループは 1 つのノイズ範囲を担当し、1 回の forward ではその batch に対応するグループだけを実行します。

これは DiffusionBlocks に基づく実験的なアーキテクチャ変換です。通常の layer freeze ではありません。推論でも学習時と同じ routing が必要です。

設定

{
  "diffusion_blocks_config": {
    "layers_per_block": 4,
    "overlap": 0.05
  },
  "find_unused_parameters": true
}

DDP では find_unused_parameters が自動的に有効になります。false はエラーです。

キー 既定値 意味
layers_per_block 必須 1 ノイズブロックあたりの連続 Transformer layer の最大数。
overlap 0.05 隣接する学習ノイズ範囲の拡張率。0.0 から 0.5。
blocks_to_train "all" この run が担当する block index。他のグループは adapter 作成後に freeze されます。
block_paths 自動 自動検出で不足する場合の ModuleList path。
timestep_boundaries 自動 0.0 から 1.0 の昇順境界。要素数は num_blocks + 1。

自動境界は設定済み timestep 分布を等確率で分割します。block 0 は最大ノイズと先頭 layer、最後の block は最小ノイズと末尾 layer を担当します。

対応範囲

同種の Transformer block list を持つ diffusion / flow-matching family に対応します。単一 stage、joint/single stream、double/single stream、blocks、layers を検出します。

UNet、ControlNet、Musubi block swap、TwinFlow、multi-timestep scheduled sampling、固定 layer capture を使う CREPA、LayerSync は起動時に拒否されます。TREAD route は model 全体の layer index を保持し、active group の global range に clip されます。

Routing は denoiser architecture を変更します。初期 loss と出力品質が通常の full-depth run と一致するとは限りません。この option を有効にしても、既存の通常 LoRA が学習済み DiffusionBlocks adapter に変わることはありません。

block_paths は各 path が逐次 denoiser stage であることを確認した場合だけ指定してください。text adapter、VAE block、skip 接続を持つ UNet stage は指定しないでください。 i1 の in_blocks/out_blocks のような skip 依存 encoder-decoder Transformer stack は検出されません。output group は対応する input group の activation なしでは実行できないためです。

メモリ

Transformer activation を作るのは active group だけです。全 block を 1 run で学習すると optimizer state は最終的に全 trainable group 分確保されます。

独立 block job では job ごとに blocks_to_train を指定します。担当外 group は freeze され、optimizer state を持ちません。推論前に parameter ownership に従って checkpoint を統合する必要があります。

推論

SimpleTuner validation は controller を自動使用します。通常の Diffusers pipeline は LoRA weight だけから変換を判断できません。

from simpletuner.helpers.training.diffusion_blocks import DiffusionBlocksConfig, DiffusionBlocksController

config = DiffusionBlocksConfig.from_dict({"layers_per_block": 4, "overlap": 0.05})
controller = DiffusionBlocksController(pipe.transformer, config)

pipeline の有効期間中 controller を保持し、simpletuner_config.json の設定をそのまま使ってください。

Anima 例

simpletuner/examples/anima/base-v1.0/default/peft-lora+diffusion-blocks/config.json を参照してください。Anima v1.0 の 28 layer は layers_per_block=4 で 7 block になります。

simpletuner train env=examples/anima/base-v1.0/default/peft-lora+diffusion-blocks max_train_steps=10 validation_steps=10

resume では block path、layer 数、境界、blocks_to_train、topology、world size、batch sampling、timestep 設定を変更しないでください。推論時に全 layer を実行すると別のアーキテクチャになります。