自力更生:Stable Diffusion webui本地部署遇到的坑及解决

很早以前我就玩AI绘画了,用过Stable Diffusion为自己的小说绘制插图,也在P站投稿过不少个人XP的作品。
当时因为我本地部署时有问题,就偷懒用的B站的整合包,现在用的也是。但版本太旧,不能加载safesensors的模型,不能玩Lora和ControlNet,加上开学了工作忙,就没有弄这个。
今天听说因为三次元绘画出事了,遂担心B站和社群。和朋友A老师讨论此事后,A老师建议我看外网教程,在本地部署,以后更新也方便。加上有A老师成功的经验,我就花了一下午来部署,其中遇到了各种坑。因为本人是计算机专业,一边阅读修改代码,一边在网上查找其他人遇到问题的解答,总算完成了本地的部署。
考虑到这个过程中很多类似文章的帮助,加上未来可能有更多人遇到和我相同的问题,花费大量的精力解决。出于互联网共享精神,我写了这篇文章,细数我本地部署遇到的坑和解决方案,如果能对读者解决问题有帮助就再好不过了。
这篇文章可能有点“硬核”,建议有一定编程和计算机基础的同学阅读。

非常建议有一定编程动手能力的人使用本地部署。毕竟总依赖整合包让别人喂也不是办法,一来每次更新都要下载新的,不如学会自己更新webui;二来万一别人不分享整合包怎么办?就一直不更新了?自力更生比较好哦。
我参考的很不错的教程:https://ivonblog.com/posts/windows-stable-diffusion-webui/
照着这个教程部署就好,如果不出错的话就不用看下面了。那么下面是我遇到的问题和解答,以及对问题和相关代码的分析:
我的配置:
Win11
GTX3060 8G
重要提示:运行一次.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安装需要的依赖包
相关代码:

分析:实际上这一步是要从git下载依赖库,所以应该是访问git的网络问题,用开发者边车解决;
也可以自己用pip install指令按照需要的包,反正是在自己的python环境里。注意openclip的名字不对,应该是open_clip_torch;这个方法的原理应该是用了你的pip源,绕过了git。经常自己装python库的同学可以用这个方法。
参考:https://juejin.cn/post/7193586551907942458
https://www.bilibili.com/read/cv19991459?spm_id_from=333.976.0.0
3. CUDA和torch匹配?

报错:AssertionError: Torch is not able to use GPU;
解决方法:修改launch.py代码:

问题分析:查了一下似乎是CUDA和torch版本不匹配的问题,但我的CUDA版本是每问题的。所以把相关的两行注释掉,绕过这个检测好了。建议先检查一下自己的版本,实在不行再用我的这个方法。
4. Commit hash <none>
报错:RuntimeError:Couldn’t checkout {name}’s hash: {commithash}
相关代码:

分析:总之就是是和git有关系,如果你显示commit hash: <none>,那么大概会遇到这个问题。github上也有人问过相关的问题(https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/1888).
解决方法:在命令行运行下面的提示,就是下面红框框里的,出一个运行一个,直到不报错为止。

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

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

我迫不及待地输入1 girl,然而……
不能画!!!
5. Half-float
报错:RuntimeError: "LayerNormKernelImpl" not implemented for 'Half'
解决:在编辑器修改webui-user.bat,在COMMANDLINE_ARGS=后面加上--skip-torch-cuda-test --precision full --no-half

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

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

可以愉快的玩耍啦!
最后用Anything4.0画的一张爱丽丝为这篇文章结尾吧:
