Skip to content

DiffusionBlocks

DiffusionBlocks 将兼容的扩散 Transformer 转换为可独立训练的层组。每个组负责一个噪声区间;一次训练前向只执行当前批次对应的组。

这是基于 DiffusionBlocks 的实验性架构转换,不是普通的冻结层。推理时必须使用与训练相同的分块路由。

配置

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

DDP 会自动启用 find_unused_parameters;显式设为 false 会报错。

键 默认值 含义
layers_per_block 必填 每个噪声块包含的最大连续 Transformer 层数。
overlap 0.05 相邻训练噪声区间的扩展比例,范围 0.0 到 0.5。
blocks_to_train "all" 当前任务负责的块索引;其他组在创建 adapter 后冻结。
block_paths 自动 自动发现不足时使用的显式 ModuleList 路径。
timestep_boundaries 自动 从 0.0 到 1.0 的升序边界,数量必须为 num_blocks + 1。

自动边界按等概率切分已配置的 timestep 分布。块 0 负责最高噪声和最前面的层;最后一个块负责最低噪声和最后的层。

支持范围

共享实现支持具有同构 Transformer block 列表的 diffusion 和 flow-matching 模型,包括单阶段、joint/single stream、double/single stream、blocks 和 layers。

以下配置会在启动时拒绝:UNet、ControlNet、Musubi block swap、TwinFlow、多 timestep scheduled sampling、使用固定层捕获的 CREPA,以及 LayerSync。TREAD 路由保留模型的全局层索引,并裁剪到活动组的全局范围。

路由会改变 denoiser 架构。初始 loss 和输出质量不应被认为与普通全深度训练一致。启用此选项不会把已有的普通 LoRA 变成训练完成的 DiffusionBlocks adapter。

仅在确认每条路径都是顺序 denoiser 阶段后才设置 block_paths。不要选择文本 adapter、VAE block 或带 skip connection 的 UNet 阶段。 不会发现依赖 skip 的 encoder-decoder Transformer 堆栈,例如 i1 的 in_blocks/out_blocks,因为输出组无法在没有配对输入组 activation 的情况下运行。

内存

只有活动层组创建 Transformer activation。这是单任务训练全部块时的主要显存节省。全部块最终仍会分配各自的 optimizer state。

要使用独立块任务,请为每个任务设置不同的 blocks_to_train。未归属组会被冻结,不分配 optimizer state。推理前必须按参数归属合并这些 checkpoint。

推理

SimpleTuner validation 会自动使用控制器。标准 Diffusers pipeline 无法从 LoRA 权重推断该转换,必须先应用控制器:

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 层;layers_per_block=4 会创建 7 个块。

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

恢复训练时不得改变 block 路径、层数、边界、blocks_to_train、拓扑、world size、batch sampling 或 timestep 配置。推理时执行全部层会改变架构并使训练目标失效。