为何感觉更新后生成图片的速度变慢了?感觉好像卡在最后1%很久?
这个原因有很多,首先必须明确的是,其中占据比重不小的部分其实是心里作用,因为等待会让人焦躁,有科学研究表明,当等待时间超过3分钟后,人们会普遍感觉烦躁感逐渐上升,会觉得后续等待的时间相对更加漫长。
除了心理作用之外,还有以下几个原因:
1 版本的升级。
关于版本的问题请在文档内搜索“关于版本的扫盲”,搞懂什么是内核版本和插件版本。无论是内核版本的升级还是各种插件版本的升级,既然是升级,通常是为了提供更优质的效果,也就代表着更多的计算量和更多的资源占用。
比如2023年8月份的时候,最新的内核版本也不过是SD1.5,生成的图片标准尺寸是512x512;而现在,最新版本已经是SDXL1.1,基本尺寸也来到了1024x1024,而你使用的显卡却没有在这两个月里升级,自然会带来不可避免的生成速度下降。
需要注意的是,这种版本的升级是整体的,并不是指“大模型”这一单一部分。
比如可能有人会说,我现在用SD1.5的模型速度也一样很慢啊?对,那是因为sd-webUI整体的版本升级了,即便你使用的“大模型”是sd1.5,但webUI不是旧版本,因此只是改变大模型自身的版本,并不能带来显著的速度变化。
除了模型版本之外, 你所使用的各种插件,也在不断推出新版本,即便不考虑效果,为了兼容sd1.5和sdxl等各个版本,也会增加大量原本不需要考虑的计算,这些累计起来,带来的速度影响就很明显了。
2 VAE计算带来的工作量所导致。
对于执行到最后5%或3%时通常会卡住很久,这一现象可以粗略的理解为是VAE计算量带来的影响。
首先必须说明下面要说的只是一个方便理解的说法,并非真实如此,实际运算过程比这复杂得多。
粗略的来说,最后一步通常是在进行VAE演算,这一步会生成新的工作量需求,如果之前的工作已经占用了大部分GPU资源,这部分工作将会放在共享显存上进行,导致无限变慢;或者在关闭共享显存的情况下,它没有足够的显存进行,则需要等待前面的工作陆续退出,让出显存后才会开始工作。
可能有人会说,那我关闭VAE调用是不是就快了?比如“外挂VAE”的下拉列表选择无。
实际上这并不会带来什么影响,因为VAE是一个固定的步骤,之所以叫做“外挂VAE”,指的是通过外挂一个VAE来覆盖模型内部的VAE模型,所以,当你外挂VAE选无的时候,程序依旧会调用模型内部自带的VAE进行最后一步运算。
那为什么以前并不觉得慢,现在却感受明显呢?
这就和上一个原因有关了。以前运行的时候,因为本身生成图片的工作量恰好在你的显卡承受能力范围内,因此即便最后的VAE运算也是调用显存直接完成的。
但是,现在所有环节都升级到新版本后,很可能本身前面的工作就已经几乎占据了你的所有显存,这样最后产生的VAE工作量只有两个选择,要么放在共享显存运算,要么等待新的独享显存释放出来后运算。无论哪个选择都会导致最后这一步变慢。
总结来说,影响速度的就是以上三个原因:1心理作用,2环境升级,3VAE所需运算量无法迅速执行。
既然知道了变慢的原因,那么能不能改变呢?
最有效的改进方法自然是升级硬件。
你不能要求硬件不变的情况下,SDXL时代生成速度跟SD1.5时代的速度一致,这不是你自己选择旧版本模型就可以解决的问题,而是包括内核、插件、大模型等等所有版本都已经更新了,就像windows系统,即便你自己顽固的使用XP系统,现在的这些大型软件你也已经无法正常运行了,一个QQ就要占几个G的内存,你拿什么运行?
升级一个更好的显卡,升级更多的内存,更好的CPU,都是行之有效的提速方式。
其次就是降低参数。
以前你可能直接拉满,2048x2048直出随便出,那是因为当时无论是sd内核,还是sdwebui环境,都相对比较简单,效果也差强人意。
现在生成的图像效果已经肉眼可见的提高了,你还指望它占用和之前一致,这不现实。
降低你的直出尺寸,适当使用tiles分块,给它一点时间和耐心,与自己和解,这也是解决问题的另一个办法。
本文转载于叶小猴https://docs.qq.com/doc/DU3ZudG1UZ1hiU01K
加入Stable Diffusion交流群
(备注:SD)