iPhone两秒出图,目前已知的最快移动端Stable Diffusion模型来了

stable diffusion (sd)是当前最热门的文本到图像(text to image)生成扩散模型。尽管其强大的图像生成能力令人震撼,一个明显的不足是需要的计算资源巨大,推理速度很慢:以 sd-v1.5 为例,即使用半精度存储,其模型大小也有 1.7gb,近 10 亿参数,端上推理时间往往要接近 2min。
为了解决推理速度问题,学术界与业界已经开始对 sd 加速的研究,主要集中于两条路线:(1)减少推理步数,这条路线又可以分为两条子路线,一是通过提出更好的 noise scheduler 来减少步数,代表作是 ddim [1],pndm [2],dpm [3] 等;二是通过渐进式蒸馏(progressive distillation)来减少步数,代表作是 progressive distillation [4] 和 w-conditioning [5] 等。(2)工程技巧优化,代表作是 qualcomm 通过 int8 量化 + 全栈式优化实现 sd-v1.5 在安卓手机上 15s 出图 [6],google 通过端上 gpu 优化将 sd-v1.4 在三星手机上加速到 12s [7]。
尽管这些工作取得了长足的进步,但仍然不够快。
近日,snap 研究院推出最新高性能 stable diffusion 模型,通过对网络结构、训练流程、损失函数全方位进行优化,在 iphone 14 pro 上实现 2 秒出图(512x512),且比 sd-v1.5 取得更好的 clip score。这是目前已知最快的端上 stable diffusion 模型!
论文地址:https://arxiv.org/pdf/2306.00980.pdf
webpage: https://snap-research.github.io/snapfusion
核心方法
stable diffusion 模型分为三部分:vae encoder/decoder, text encoder, unet,其中 unet 无论是参数量还是计算量,都占绝对的大头,因此 snapfusion 主要是对 unet 进行优化。具体分为两部分:(1)unet 结构上的优化:通过分析原有 unet 的速度瓶颈,本文提出一套 unet 结构自动评估、进化流程,得到了更为高效的 unet 结构(称为 efficient unet)。(2)推理步数上的优化:众所周知,扩散模型在推理时是一个迭代的去噪过程,迭代的步数越多,生成图片的质量越高,但时间代价也随着迭代步数线性增加。为了减少步数并维持图片质量,我们提出一种 cfg-aware 蒸馏损失函数,在训练过程中显式考虑 cfg (classifier-free guidance)的作用,这一损失函数被证明是提升 clip score 的关键!
下表是 sd-v1.5 与 snapfusion 模型的概况对比,可见速度提升来源于 unet 和 vae decoder 两个部分,unet 部分是大头。unet 部分的改进有两方面,一是单次 latency 下降(1700ms -> 230ms,7.4x 加速),这是通过提出的 efficient unet 结构得到的;二是 inference steps 降低(50 -> 8,6.25x 加速),这是通过提出的 cfg-aware distillation 得到的。vae decoder 的加速是通过结构化剪枝实现。
下面着重介绍 efficient unet 的设计和 cfg-aware distillation 损失函数的设计。
(1)efficient unet
我们通过分析 unet 中的 cross-attention 和 resnet 模块,定位速度瓶颈在于 cross-attention 模块(尤其是第一个 downsample 阶段的 cross-attention),如下图所示。这个问题的根源是因为 attention 模块的复杂度跟特征图的 spatial size 成平方关系,在第一个 downsample 阶段,特征图的 spatial size 仍然较大,导致计算复杂度高。
为了优化 unet 结构,我们提出一套 unet 结构自动评估、进化流程:先对 unet 进行鲁棒性训练(robust training),在训练中随机 drop 一些模块,以此来测试出每个模块对性能的真实影响,从而构建一个 “对 clip score 的影响 vs. latency” 的查找表;然后根据该查找表,优先去除对 clip score 影响不大同时又很耗时的模块。这一套流程是在线自动进行,完成之后,我们就得到了一个全新的 unet 结构,称为 efficient unet。相比原版 unet,实现 7.4x 加速且性能不降。
(2)cfg-aware step distillation
cfg(classifier-free guidance)是 sd 推理阶段的必备技巧,可以大幅提升图片质量,非常关键!尽管已有工作对扩散模型进行步数蒸馏(step distillation)来加速 [4],但是它们没有在蒸馏训练中把 cfg 纳入优化目标,也就是说,蒸馏损失函数并不知道后面会用到 cfg。这一点根据我们的观察,在步数少的时候会严重影响 clip score。
为了解决这个问题,我们提出在计算蒸馏损失函数之前,先让 teacher 和 student 模型都进行 cfg,这样损失函数是在经过 cfg 之后的特征上计算,从而显式地考虑了不同 cfg scale 的影响。实验中我们发现,完全使用 cfg-aware distillation 尽管可以提高 clip score, 但 fid 也明显变差。我们进而提出了一个随机采样方案来混合原来的 step distillation 损失函数和 cfg-aware distillation 损失函数,实现了二者的优势共存,既显著提高了 clip score,同时 fid 也没有变差。这一步骤,实现进一步推理阶段加速 6.25 倍,实现总加速约 46 倍。
除了以上两个主要贡献,文中还有对 vae decoder 的剪枝加速以及蒸馏流程上的精心设计,具体内容请参考论文。
实验结果
snapfusion 对标 sd-v1.5 text to image 功能,目标是实现推理时间大幅缩减并维持图像质量不降,最能说明这一点的是下图:
该图是在 ms coco’14 验证集上随机选取 30k caption-image pairs 测算 clip score 和 fid。clip score 衡量图片与文本的语义吻合程度,越大越好;fid 衡量生成图片与真实图片之间的分布距离(一般被认为是生成图片多样性的度量),越小越好。图中不同的点是使用不同的 cfg scale 获得,每一个 cfg scale 对应一个数据点。从图中可见,我们的方法(红线)可以达到跟 sd-v1.5(蓝线)同样的最低 fid,同时,我们方法的 clip score 更好。值得注意的是,sd-v1.5 需要 1.4min 生成一张图片,而 snapfusion 仅需要 1.84s,这也是目前我们已知最快的移动端 stable diffusion 模型!
下面是一些 snapfusion 生成的样本:
更多样本请参考文章附录。
除了这些主要结果,文中也展示了众多烧蚀分析(ablation study)实验,希望能为高效 sd 模型的研发提供参考经验:
(1)之前 step distillation 的工作通常采用渐进式方案 [4, 5],但我们发现,在 sd 模型上渐进式蒸馏并没有比直接蒸馏更有优势,且过程繁琐,因此我们在文中采用的是直接蒸馏方案。
(2)cfg 虽然可以大幅提升图像质量,但代价是推理成本翻倍。今年 cvpr’23 award candidate 的 on distillation 一文 [5] 提出 w-conditioning,将 cfg 参数作为 unet 的输入进行蒸馏(得到的模型叫做 w-conditioned unet),从而在推理时省却 cfg 这一步,实现推理成本减半。但是我们发现,这样做其实会造成图片质量下降,clip score 降低(如下图中,四条 w-conditioned 线 clip score 均未超过 0.30, 劣于 sd-v1.5)。而我们的方法则可以减少步数,同时将 clip score 提高,得益于所提出的 cfg-aware 蒸馏损失函数!尤其值得主要的是,下图中绿线(w-conditioned, 16 steps)与橙线(ours,8 steps)的推理代价是一样的,但明显橙线更优,说明我们的技术路线比 w-conditioning [5] 在蒸馏 cfg guided sd 模型上更为有效。
(3)既有 step distillation 的工作 [4, 5] 没有将原有的损失函数和蒸馏损失函数加在一起,熟悉图像分类知识蒸馏的朋友应该知道,这种设计直觉上来说是欠优的。于是我们提出把原有的损失函数加入到训练中,如下图所示,确实有效(小幅降低 fid)。
总结与未来工作
本文提出 snapfusion,一种移动端高性能 stable diffusion 模型。snapfusion 有两点核心贡献:(1)通过对现有 unet 的逐层分析,定位速度瓶颈,提出一种新的高效 unet 结构(efficient unet),可以等效替换原 stable diffusion 中的 unet,实现 7.4x 加速;(2)对推理阶段的迭代步数进行优化,提出一种全新的步数蒸馏方案(cfg-aware step distillation),减少步数的同时可显著提升 clip score,实现 6.25x 加速。总体来说,snapfusion 在 iphone 14 pro 上实现 2 秒内出图,这是目前已知最快的移动端 stable diffusion 模型。
未来工作:
1.sd 模型在多种图像生成场景中都可以使用,本文囿于时间,目前只关注了 text to image 这个核心任务,后期将跟进其他任务(如 inpainting,controlnet 等等)。
2. 本文主要关注速度上的提升,并未对模型存储进行优化。我们相信所提出的 efficient unet 仍然具备压缩的空间,结合其他的高性能优化方法(如剪枝,量化),有望缩小存储,并将时间降低到 1 秒以内,离端上实时 sd 更进一步。

防爆红外探测器的优势及特性
RS-485窄体隔离收发器
关于NAS网络存储器常用功能的详细介绍
诺基亚8 Sirocco开售:2K OLED曲面屏搭配骁龙835
详解网页篡改的分类和解决方式
iPhone两秒出图,目前已知的最快移动端Stable Diffusion模型来了
基于双目结构光和AI的3D相机实现自动化解决方案
高通2020年芯片出货量下降,凸显中国市场的重要地位
AR金融技术的应用前景
恒温恒湿试验箱怎样进行加湿除湿
Analog Devices ADCMP60x系列比较器的应用电路分析
中国移动携手华为打通首个煤矿井下5G网络,推进煤炭行业智能化升级
【大大芯方案】引领尾灯视觉潮流,大联大推出基于NXP 产品的汽车尾灯方案
英国政府将投入2800万英镑用于研发并建设动力电池工厂
思必驰联合华强聚丰联合举办的车联网论坛,取得圆满成功
终于有人把工业数据采集讲明白了
2020年我国集成电路行业已销售8848亿元
在2021年,有哪些重要的技术值得我们持续关注
中国半导体产业逆势增长 云计算/IoT带动服务器增15%
verilog向量的部分选择