(明天开学qwq)
废话不多说,上方法。
(本人配置:5600 + 32g + 3060ti 8g,cuda11.8,torch2.0,xformers开)
1. 命令行参数与ControlNet低显存优化
首先,放结论:
6g以下显存建议 --lowvram
8g~10g建议 --medvram
12g起步不需要这类参数
为什么不建议随便用这个参数?
首先,在使用--lowvram后,显存占用率显著降低,但是会发现内存与显存的占用有大的波动。打开taskmgr看一下占用,全都是波浪形的。
所以,在使用--lowvram后,显存和内存是在不断的交换的。
这就导致了你的cuda永远是吃不满的。往往这种情况下,你的cuda占用无法到达100%。(除了显卡算力过低以外)
在使用--medvram后,你会发现内存与显存的变化较平稳。sd做了一个决策,就是在每次开始生成和一次生成结束后,将模型、vae等全部扔回内存,然后需要的时候一个一个取。而不是一开始就将所有的模型全塞显存里,跑图根本干不动。另外,在结束生成后,还会清理显存的缓存。
现在有个主要问题来了,这个问题查便全网都找不到很好的解决方案:开启ControlNet后,真的需要命令行参数和插件里都勾上lowvram(低显存)吗?
答案是不需要。
对于6g的显存而言,一是想要能出来图,二是速度。若两个都开的话,速度是奇慢的。通常,cuda占用率很低,而且波动较大。这中情况下,命令行参数加--lowvram,controlnet不开低显存优化。
对于8g的显存而言,出图应当没太大问题,主要问题是在你跑图跑着跑着,显存会越占越多,最后自然是跑了大概4-5张512*512后,显存快满了,若你使用了--medvram的话,你的跑图速度会奇慢,但也能出图。这种情况下,为了保证达到最大速度,有两种方法:
1. 命令行开--lowvram,controlnet不开低显存优化。实测3060ti 3s/it
2. 命令行开--medvram,controlnet开低显存优化,实测3060ti 1.5s/it
3. 命令行开无显存参数,controlnet开低显存优化,实测3060ti 2.6s/it
证明命令行开--medvram,controlnet开低显存优化为最优解。
2. 进一步优化
(注:此项特殊对ControlNet进行优化)
在使用ControlNet进行干预时,最常用的有openpose、reference等。而这些模型进行干预,往往不需要从头干预到尾。
实测,使用openpose,其他条件完全相同,在使用如下控制时:
结果同全程控制几乎完全一样
这就使得8g显存/6g显存的显卡,在使用controlnet的时候其实可以更进一步的加速。
若只用上面的命令行优化,我手上的3060ti g6版本最快能达到1.5s/it。这个速度,若跑25steps/512*512的一张图,仍需要37.5s的时间。这实在是太长了。但,在进一步优化后,时间达到了21s。
3. 你杠就是你对
有人就开始了:你3060ti啊怎么就还要跑20多秒啊叽里呱啦一大堆。
首先,你要知道:8g显存正常跑图没什么,一开controlnet就爆炸。十分容易爆显存,就是能跑也奇慢无比,3060ti 大约9s/it
所以,事实证明,3060ti玩ai绘图就是不如3060。显存少4g,造成的性能损失十分大。
最后有几个报错的解决方案,这里当做一个笔记了:
1
File "C:\stable-diffusion-webui-master\New folder\stable-diffusion-webui\venv\lib\site-packages\gradio\blocks.py", line 504, in get_api_info serializer = serializing.COMPONENT_MAPPING[type]()KeyError: 'dataset'
把depth插件(sd-webui-depth-lib)挪走就好。
2
在设置里的stable diffusion选项卡中,选择了将模型和vae放入缓存(上方两条缓存数量)
导致controlnet无法生效。关闭后依然无法生效,各种奇怪报错。
重启电脑即可。
必须强调:模型和vae放入缓存的优化方式与controlnet不兼容。但是低显存、不用controlnet十分推荐!!!详情可以看这篇文章:(不是我的但是很好,大佬很厉害!)Stable Diffusion1.10稳定版小内存、显存推荐模式(sd-13周到1.31版本535驱动测试) - 哔哩哔哩 (bilibili.com)
(没图镇楼了,晕)
铁华团的黄金船 2023-06-23
麦克多娜AI 2023-11-17