跳转至

Dense2MoE: Restructuring Diffusion Transformer to MoE for Efficient Text-to-Image Generation

会议: ICCV 2025
arXiv: 2510.09094
代码: 无
领域: 图像生成
关键词: 扩散模型, Mixture of Experts, 模型压缩, 知识蒸馏, FLUX

一句话总结

首次提出将密集型扩散Transformer(DiT)转化为MoE稀疏结构的范式Dense2MoE,通过FFN替换为MoE层+Transformer块分组为MoB(Mixture of Blocks),配合多阶段蒸馏流水线,将FLUX.1的12B参数压缩至5.2B激活参数同时保持原始性能,全面超越剪枝方法。

研究背景与动机

扩散Transformer(DiT)在文生图领域取得卓越性能,但模型规模急剧膨胀——FLUX.1有120亿参数,是SD1.5的13.8倍,带来巨大的推理开销。现有模型压缩主要依赖剪枝,但高压缩率下剪枝会导致严重的性能退化——因为剪枝减少了模型的总参数量,从根本上限制了模型容量。

本文的核心洞察:能否在不减少总参数量的前提下,减少每次推理的激活参数量? MoE架构允许不同输入激活不同参数子集,既减少计算量又保持模型容量。关键观察是:FFN占DiT总参数近50%——非常适合MoE化;DiT块的重要性随时间步和prompt显著变化——适合动态激活。

方法详解

整体框架

Dense2MoE包含两层稀疏化设计和三阶段蒸馏流水线: - MoE层:替换FFN为MoE层(共享专家 + 多个普通专家),减少每个块内的激活参数 - MoB组:将连续Transformer块分组,动态路由选择性激活部分块,减少模型深度 - 蒸馏流水线:增强初始化 → MoE蒸馏 → MoB蒸馏

关键设计

  1. FFN→MoE替换: 用共享专家(expansion ratio \(r_s\))和 \(n\) 个普通专家(expansion ratio \(r_n\) )替换原始FFN。约束 \(r = r_s + n \cdot r_n\) 保持总参数不变。推理时每个token仅选top-k个普通专家激活,激活扩展比 \(r_a = r_s + k \cdot r_n\)。默认配置:\(r_s=1, r_n=0.25, n=12, k=2\),FFN激活参数压缩率为 \(r_a/r = 1.5/4 = 37.5\%\)(压缩62.5%)。前向过程: \(y^{(t)} = \text{MLP}_s(x^{(t)}) + \sum_{i=1}^k g(x^{(t)},i) \cdot \text{MLP}_n^{(i)}(x^{(t)})\)

  2. Mixture of Blocks (MoB): 将连续 \(m\) 个Transformer块分组为MoB组,推理时仅激活相邻的 \(\kappa\) 个块。路由器设计利用AdaLN的全局嵌入 \(y\)(融合了text和timestep条件): \(\text{TopK}(\alpha W_x[x^{(p)}, c^{(p)}] + (1-\alpha)W_y y, \kappa)\) 这使路由能显式感知文本和时间步条件,实现动态的深度压缩。

  3. 三阶段蒸馏流水线:

    • 增强初始化: 用一阶Taylor度量 \(\mathcal{I}_i = |\frac{\partial\mathcal{L}}{\partial w_i}w_i|\) 评估权重重要性,将重要权重分配给共享专家,其余均分给普通专家。再对仅含共享专家的模型做KD提升初始化质量
    • MoE蒸馏: 冻结共享专家,激活普通专家和门控网络,使用输出蒸馏损失 + 块特征损失 + 负载平衡损失训练
    • MoB蒸馏: 设计组特征损失——用原始模型中对应MoB组最后一个块的输出作为教师特征,与MoB组输出对齐

损失函数 / 训练策略

  • 输出蒸馏损失: \(\mathcal{L}_{distill} = \mathbb{E}\|f_{tea} - f_{stu}\|_2^2\)
  • 块特征损失: \(\mathcal{L}_{feature} = \sum_{l=1}^L w_l \|f_{tea}^{(l)} - f_{stu}^{(l)}\|_2^2\),特征权重经归一化确保各层学习稳定
  • 负载平衡损失: 防止路由坍塌到少数专家,\(\lambda_{balance} = 10^{-2}\)
  • 训练配置: 32×A100 GPU,全局batch size 64
  • 训练数据: Laion-5B + Coyo-700M + JourneyDB
  • 在FLUX.1 [dev]基础上构建4个稀疏度级别:L(5.2B)/M(4B)/S(3.2B)/XS(2.6B)

实验关键数据

主实验 (与剪枝方法对比)

模型 激活参数(B) FLOPs(T) GenEval↑ DPG↑ CLIP↑ IR↑
FLUX.1 [dev] 11.90 66.00 0.6595 83.42 32.24 0.9656
FLUX.1-Lite (剪枝) 8.16 53.15 0.5229 79.00 31.79 0.8380
FLUX-Mini (剪枝) 3.18 17.37 0.3209 69.34 29.94 0.2151
FLUX.1-MoE-L 5.15 43.42 0.5702 81.63 31.39 0.8011
FLUX.1-MoE-S 3.19 26.43 0.4441 75.61 30.67 0.5942
FLUX.1-MoE-XS 2.64 20.26 0.4036 73.66 30.40 0.5076

MoE-L比FLUX.1-Lite少3B激活参数但性能更优;MoE-S/XS在相似参数下大幅超越FLUX-Mini。

消融实验 (MLP剪枝 vs MoE / 深度剪枝 vs MoB)

MLP Pruning vs FFN-to-MoE:

方法 激活扩展比 GenEval DPG
Diff-Pruning (r=1.5) 1.5 0.4113 72.23
Diff-Pruning (r=2.0) 2.0 0.4888 77.53
MoE (r=1.5) 1.5 0.5728 81.24

MoE在62.5%压缩率下仍优于剪枝50%压缩率的结果。

Depth Pruning vs MoB (相同激活块数):

方法 D块 S块 GenEval DPG
Lite 9 26 0.0926 41.62
BK-SDM 9 26 0.3450 66.86
MoB 9 26 0.4956 76.51

MoB在高压缩率下优势更加显著——Lite方法在深压缩后几乎崩溃。

关键发现

  • Taylor度量初始化显著提升共享专家质量: 相比随机分割,各指标稳定提升
  • 两阶段分离训练(共享→全MoE)优于联合训练: 独立优化策略更佳
  • 更多MoB组 = 更好的蒸馏效果: 因为提供更多的组特征对齐监督层
  • 专家特化分析: 双流块中图像分支的MoE呈现空间特化(不同专家负责不同空间区域);同prompt类别的专家选择模式相似;高噪声阶段专家选择更集中
  • 支持动态Top-K: 由于蒸馏流水线设计,不用额外训练即可动态调整激活专家数量。Top-K=0时只用共享专家也能生成合理图像,增加K则提升细节和真实感
  • HyperFLUX加速与MoE兼容:MoE-L+8步采样仍保持强性能

亮点与洞察

  • 范式创新: 首次将Dense-to-MoE范式引入扩散模型,思路是"保容量减计算"vs剪枝的"减容量减计算"
  • MoB概念新颖: 不同于token级MoE路由,MoB在特征级做块路由,天然适配扩散模型的多步去噪过程
  • 三阶段蒸馏设计精巧: Taylor初始化→共享专家蒸馏→MoE蒸馏→MoB蒸馏,逐步构建
  • 对FLUX实用: 12B→5.2B激活参数且性能不降,对实际部署有直接价值

局限与展望

  • 虽然激活参数减少60%,但总参数量(9B)仍然很大,显存占用未必显著降低
  • MoE推理需要专门的grouped GEMM kernel支持(如MegaBlocks),通用GPU上可能不如预期的加速
  • 延迟改善相对有限(21.2s→17.8s,仅约16%),因为attention部分未压缩
  • 仅在FLUX.1上验证,未在其他DiT(如SD3、PixArt)上实验
  • 蒸馏训练需要32×A100,成本不低

相关工作与启发

  • LLM领域的Dense-to-MoE工作(如MoE化LLM)为本文提供直接灵感
  • Mixture of Depths方法让token自适应跳过层,与MoB思路相关但实现不同
  • DiT-MoE在训练时就使用MoE扩展到16B,本文是从已有dense模型转化
  • 步蒸馏方法(HyperFLUX)与模型压缩可正交组合

评分

  • 新颖性: ⭐⭐⭐⭐⭐ 首次Dense-to-MoE用于扩散模型,MoB设计新颖
  • 实验充分度: ⭐⭐⭐⭐ 与多种剪枝方法对比、详细消融、专家特化分析
  • 写作质量: ⭐⭐⭐⭐ 结构清晰,可视化丰富
  • 价值: ⭐⭐⭐⭐⭐ 为高效扩散模型开辟新范式,实用性和学术价值兼具