siliconflow / onediff

OneDiff: An out-of-the-box acceleration library for diffusion models.
https://github.com/siliconflow/onediff/wiki
Apache License 2.0
1.4k stars 85 forks source link

webui supports nexfort backend and refactor compile related code #966

Closed marigoold closed 1 week ago

marigoold commented 1 week ago

增加了对 nexfort 后端的支持,但是目前还不支持量化和 controlnet。设置中增加了对后端的选择。目前 3090 sd1.5 512*512 速度是 34it/s,oneflow 后端是 45 it/s。

用 nexfort 后端编译未经 hack 的原生 webui,有以下几个问题,本 PR 针对这几个问题也进行了修复

  1. UNet 的 forward 里面输入是 fp32 的,需要重写一个 forward 把输入都 cast 成 fp16,用重写的 forward 替换原来的 forward
  2. 代码中到处都有 autocast,会导致 nexfort 编译失败,错误原因基本都是 fp16 和 fp32 混合计算导致的,这里在 forward 外层包了一层 autocast(enabled=False) 来关掉 autocast
  3. webui 提供了多种 attention 的 forward 供用户选择,默认的 forward 里面有较多的非计算逻辑(比如判断显存之类),用这个 forward 编译会挂掉。所以自己照抄实现了一个 attention,调用 spda,速度从 23it/s 增加到 34 it/s