STABLE DIFFUSION 1.5 → FLUX.2 · ARCHITECTURE / OPERATOR / TECHNIQUE EVOLUTION · GROUNDED IN 15 CUDA TRACES从 SD 1.5 到 FLUX.2:结构、算子与技术的演进图谱
这份图谱不是文献综述,而是十五次真实 GPU trace 的横向合成。每一个参数量都由 module 级的输入输出维度反推重建,并与对应那次运行的 summary.json 逐位核对;每一处跨模型的差异都能被一个算式精确复现。
组织方式不是时间线,而是三条正交轴:主干(图像信息在什么结构里流动)× 条件通路(条件怎么进到主干里)× 潜空间(图像被压成什么)。任何一个模型都可以写成三个坐标。
按轴看比按时间线看更有用:能看清哪些变化互相牵连(主干换成 Transformer → 文本能与图像合成一条序列 → 空间条件也能塞进去,代价归零),哪些是独立的(潜通道 4 → 16 → 32)。
覆盖 15 次 trace5 代模型 · SD 1.5 → FLUX.2主干 0.86B → 9.08B文本塔 0.12B → 8.19B潜通道 4 → 16 → 32参数量重建差额 全部为 0
1 · 十五次 GPU trace 的地图
总览
2 · 三条正交轴
框架
3 · 主干:卷积 U-Net → 单双流混合
轴一
4 · 条件通路:文本
轴二 a
5 · 条件通路:全局标量
轴二 b
6 · 条件通路:空间条件
轴二 c
7 · 八项算子逐条对照
算子
8 · 潜空间与 VAE
轴三
9 · 每一处差异都能被算式复现
方法
如果只记一条:架构换代会让一部分能力从「需要新增网络」变成「免费」。同样是把空间条件(掩码、参考图、边缘图)告诉模型,四种做法的代价跨越五个数量级 —— SD 1.5 / SD 2 / SDXL 改 conv_in 要 +14,400(三代完全相同);SDXL 的旁路 ControlNet 要 +1,251,014,160(主干的 48.7%,因为 U 型结构有一半可以省);SD3 的旁路 ControlNet 要 +2,023,618,560(主干的 99.8%,同构堆叠无从省起);而 FLUX.2 的四个变体是 +0 —— 参数量逐位相同,共用同一个 checkpoint。
最后那个 0 不是靠技巧堆出来的:主干换成「一条统一序列上的注意力」之后,往序列里多塞 4096 个 token 本来就是天然支持的。UNet 时代做不到,因为文本走交叉注意力、图像走卷积,压根没有这样一条序列。
另一条值得记的:算力越来越多地花在「理解 prompt」上。五代下来管线总参数涨 16.3 倍,主干只涨 10.6 倍,而文本编码器涨了 66.6 倍(123,060,480 → 8,190,735,360)。峰值出现在 SD 3 Medium —— 三个文本塔比主干还大 2.75 倍。
也有反直觉的:条件通路曾经绕了一次远路。它占主干的比例从 UNet 时代的 0.24% 涨到 SD 3.5 Large 的 33.80%(每层各生成一份 AdaLN 调制),再被 FLUX.2 的共享 Modulation 压回 2.77%。这是整条演化线里少见的「纯粹的效率优化」:不改变能力边界,只把参数花得更值。
边界:形状、结构、层数、显存、参数量是真实的 CUDA 证据;任何数值结论都不成立(权重不是训练出来的);耗时是单次带 trace 开销的观测值,不能当基准测试读。