Artiprocher / FastSDXL

An efficient implementation of Stable-Diffusion-XL
Apache License 2.0
45 stars 2 forks source link

关于加速和生成质量 #2

Closed ziyaxuanyi closed 9 months ago

ziyaxuanyi commented 9 months ago

加速是因为重构的unet,重构的unet和原版的unet在生成效果上是否是一致的呢?(相同条件下,仅替换重构的unet,生成图像是否一样) olss采样器是否比其他采样器速度更快,是否也起到加速作用呢?

Artiprocher commented 9 months ago
  1. 关于 UNet 的部分
    1. 重构的 UNet 和原版的 UNet 生成效果完全一致。换句话说,给定同样的输入,在不考虑浮点数舍入误差的前提下,两者的输出完全一致。仅替换重构的 UNet,生成图像完全一样。
    2. UNet 加速的原理是,所有模型结构都被简化,以序列化的形式管理,因此 PyTorch 的显存调度更高效。
    3. 如果你想在自己的代码库里使用这部分,完全可以把 FastSDXL/BlockUNet.py 中的代码复制过去,我的代码中已经包含了从 diffusers 或 civitai 格式加载模型权重的逻辑,希望这份代码可以帮助到您。
  2. 关于 OLSS 采样器的部分
    1. 同等步数下,任何采样器的速度都是相同的,因为采样器仅仅用来构造迭代公式中的那几个系数,只涉及数千个浮点数的计算,与动辄上亿参数的模型推理相比,采样器消耗的时间完全可以忽略不计。
    2. OLSS 采样器可以做到在相同步数下实现更高的图像质量,换句话说,要实现相同的图像质量,OLSS 所需的步数更少,从这个角度可以认为 OLSS 是有加速作用的。