自力更生:Stable Diffusion webui本地部署遇到的坑及解决
橘法师成前
编辑于 2023年02月24日 21:51

很早以前我就玩AI绘画了,用过Stable Diffusion为自己的小说绘制插图,也在P站投稿过不少个人XP的作品。

 

当时因为我本地部署时有问题,就偷懒用的B站的整合包,现在用的也是。但版本太旧,不能加载safesensors的模型,不能玩Lora和ControlNet,加上开学了工作忙,就没有弄这个。

 

今天听说因为三次元绘画出事了,遂担心B站和社群。和朋友A老师讨论此事后,A老师建议我看外网教程,在本地部署,以后更新也方便。加上有A老师成功的经验,我就花了一下午来部署,其中遇到了各种坑。因为本人是计算机专业,一边阅读修改代码,一边在网上查找其他人遇到问题的解答,总算完成了本地的部署。

 

考虑到这个过程中很多类似文章的帮助,加上未来可能有更多人遇到和我相同的问题,花费大量的精力解决。出于互联网共享精神,我写了这篇文章,细数我本地部署遇到的坑和解决方案,如果能对读者解决问题有帮助就再好不过了。

这篇文章可能有点“硬核”,建议有一定编程和计算机基础的同学阅读。

 

cut-off

非常建议有一定编程动手能力的人使用本地部署。毕竟总依赖整合包让别人喂也不是办法,一来每次更新都要下载新的,不如学会自己更新webui;二来万一别人不分享整合包怎么办?就一直不更新了?自力更生比较好哦。

 

我参考的很不错的教程:https://ivonblog.com/posts/windows-stable-diffusion-webui/

照着这个教程部署就好,如果不出错的话就不用看下面了。那么下面是我遇到的问题和解答,以及对问题和相关代码的分析:

 

我的配置:

Win11

GTX3060 显存6G

 

重要提示:运行一次.bat后(打开看,其实两个代码只有配置的不同),就可以只运行python launch.py了,后面主要也是修改这个python文件的代码。每次在命令行运行launch.py,然后解决报错就可以了。

 

1.      电脑里装了多版本Python

如果你是计算机专业学生,那么大概和我一样,电脑里已经装了其他版本的Python了,但是webui又要求Python 3.10.6

 

解决:A老师提醒了我,用anaconda虚拟环境,这个学人工智能的同学应该很熟,可以自行学习安装。

创建一个python3.10.6的虚拟环境,然后后面的操作都在这个虚拟环境就好了。(需要一点命令行基础)

当然,不用虚拟环境可能也没有问题,我只是要保证前期准备没有问题。

 

2.      不能安装依赖库

报错:RuntimeError: Couldn't install gfpgan.

 

这是我当时就遇到的坑,估计也是大多数人第一个被劝退的坑,这个坑似乎还和commit hash<none>有关系,我就说说我的解决方法。

解决方法:1.安装开发者边车 2.自己用pip install安装需要的依赖包

相关代码:

launch.py

分析:实际上这一步是要从git下载依赖库,所以应该是访问git的网络问题,用开发者边车解决;

也可以自己用pip install指令按照需要的包,反正是在自己的python环境里。注意openclip的名字不对,应该是open_clip_torch;这个方法的原理应该是用了你的pip源,绕过了git。经常自己装python库的同学可以用这个方法。

 

参考:https://juejin.cn/post/7193586551907942458

网页链接​

 

3.      CUDA和torch匹配?

报错信息

报错:AssertionError: Torch is not able to use GPU;

解决方法:修改launch.py代码:

launch.py

问题分析:查了一下似乎是CUDA和torch版本不匹配的问题,但我的CUDA版本是每问题的。所以把相关的两行注释掉,绕过这个检测好了。建议先检查一下自己的版本,实在不行再用我的这个方法。

2.23更新 实际上这个问题很可能是因为.bat自动安装了CPU版本的torch,所以无法使用CUDA。

建议检查一下python环境里能不能用CUDA和torch的版本

不能用CUDA

检查torch版本:cpu

解决方法:先用pip uninstall torch卸载cpu版本的torch

然后到torch官网https://pytorch.org/get-started/locally/ 选择自己匹配的版本,复制命令自行安装torch

复制红框框里的命令安装torch,我是用pip比较快

安装完后检查是GPU版本能用CUDA就OK了

GPU版本,能用CUDA

参考:https://blog.csdn.net/qq_46126258/article/details/112708781

 

4.      Commit hash <none>

报错:RuntimeError:Couldn’t checkout {name}’s hash: {commithash}

相关代码:

launch.py

分析:总之就是是和git有关系,如果你显示commit hash: <none>,那么大概会遇到这个问题。github上也有人问过相关的问题(https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/1888).

解决方法:在命令行运行下面的提示,就是下面红框框里的,出一个运行一个,直到不报错为止。

在命令行运行红框框的命令

参考:https://blog.csdn.net/Xy_G__/article/details/128180356

这个问题在后面装插件时也会遇到,似乎是因为git的安全机制,会逐层读取git配置时检查文件所有权人

报错:unsafe repository xxx is owned by someone else

解决:自己本地下好后放到extensions文件夹

 参考:https://blog.csdn.net/qq_43777201/article/details/125639188

cut-off

 

到这里,我运行launch.py就没有问题了,熟悉的http://127.0.0.1:7860/ 出来了,也可以在浏览器打开webUI了。

 

熟悉的127.0.0.1:7860

我迫不及待地输入1 girl,然而……

不能画!!!

 

5.      Half-float

报错:RuntimeError: "LayerNormKernelImpl&#​34; not implemented for 'Half&#​39;

解决:在编辑器修改webui-user.bat,在COMMANDLINE_ARGS=后面加上--skip-torch-cuda-test --precision full --no-half

webui-user.bat

分析:看了下面微笑脸社区的文章,似乎是因为显卡不支持half-float的数据类型,所以在启动项增加这一句no-half,以后运行webui-user.bat就可以了。

参考:https://huggingface.co/CompVis/stable-diffusion-v1-4/discussions/64

 

cut-off

终于,我双击webui-user.bat,然后画出了本地部署的第一张图:

激动!

 

可以愉快的玩耍啦!

最后用Anything4.0画的一张爱丽丝为这篇文章结尾吧:

cut-off

2.33更新 

6.显存不够

不能玩controlNet

玩ControlNet时,提示torch.cuda.OutOfMemoryError: CUDA out of memory。

就是说显存不够了。我目前也还没有完全解决ControlNet运行显存不够的问题。但如果你只是跑跑图,不玩ControlNet的话,下面是一些可能奏效的方法:

(1)修改启动参数

webui-user.bat

看到commandline_Args了吗,可以在后面加上--medvram 或者--lowvram,牺牲运行速度减少显存需求。

参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Troubleshooting

(2)安装xformers

你启动时有这个信息吗?

No module 'xformers&#​39;. Proceeding without it.

使用xfomers似乎可以减少显存需求,安装方式也很简单,同样是上面的webui-user.bat,在commandline_args后面加上--xformers,启动时就会自动安装了。

虽然不能解决ControlNet的问题,但对提升出图速度还是有帮助的。

2.24 更新

不知道什么原因,似乎加上xformers反而速度更慢,发热也更严重。

那么,现在一切就绪了(除了ControlNet):

一切就绪!

开始生成你喜爱的二次元角色和OC吧!

我的OC萝姬

模型推荐:

https://huggingface.co/gsdf/Counterfeit-V2.5  配合EasyNegative使用,上面的萝姬就是用这个模型,很好看,tag写起来也简单。

https://huggingface.co/andite/anything-v4.0 祖师爷,出图质量稳定,插图风格很不错。

https://huggingface.co/datasets/gsdf/EasyNegative 用这个负面tag就可以写很简单了。

https://huggingface.co/TASUKU2023/Chilloutmix 真人模型,不过我没怎么用过,还是喜欢二次元的图,不过之后可能研究配合Lora玩赛博COS。

插件推荐:

https://github.com/DominikDoom/a1111-sd-webui-tagcomplete 可以自动补全标签,有助于写出更准确的tags

提高分辨率功能:

webui自带,研究中