Stable Diffusion加速相关

Diffusion Model DDPM: Denoising Diffusion Probabilistic Models

加速Clip 、 UNet 、 ControlNet 、VAE Encoder 和 Decoder

初赛是利用 TensorRT 加速带有 ControlNet 的 Stable Diffusion canny2image pipeline,以优化后的运行时间和出图质量作为主要排名依据。

流程

img = resize_image(HWC3(input_image), image_resolution)
#      H, W, C = img.shape  uint8



参考

一些收集的信息:

  • 时间大于2600ms,或者avg pd score>12就没有分
  • avg score <=8分数最好。>8时就会衰减严重。大于10基本就没戏了
  • 如果你看到可以用batch2 来inference 的地方, 就不要用loop 一个batch 一个batch的inference
  • groupnorm也有大的提升
  • 还有一点是减少reformat
  • 还有一些小细节,resblock,的加法,用inplace操作可以快5ms左右
  • resblock里面的emb那一层linear和silu也可以提前算好,与输入无关
  • 意思是使用 trt 优化后的 fp32 的模型想在整个 pipeline 上与 pytorch 结果对齐是不太可能的,测试的平均 PD 分在 1 左右。不过由于 clip 模型没有 conv 操作,只有 gemm 操作,为了减少整个 pipeline 的误差,我转换时加了 --noTF32,这样至少在 clip 这个阶段结果和 pytorch 能保持一致
  • 前赛方说的step蒸馏有没有大佬尝试过?

把 unet 拆分成 input 和 output 两个部分。然后 unet 的 input 和 controlnet 用两个不同的流来并行计算。

参考