AI绘画,正确理解并使用 webui 进行创作

AI 画画

NovelAI 一个使用 ai 绘制二次元图片的网站,你只需要输入想要的画的 tag 即可自动生成对应的画。效果不说和真人画师的比,反正秒杀不会画画的人是完全没问题的。不过也许是因为网站的一些问题,网站所使用的模型被大手子开了,虽然这网站也使用过未经授权的网站的图被炎上过,但这问题并不在我们的讨论范畴中。

作为一个不会画画的人来说,能有个工具拿来产出自己喜欢 / 想要的图片还是挺不错的,至少这几天的体验下来还是挺好的。这里简述一下如果利用泄漏的文件自己动手搭建一个基于 本地 / 在线代码实现平台 的 ai 画画平台。

理解

泄露出来的模型有两批,第一批大小为 52.06GB,磁力链接点我。第二批大小为 113.39GB,不过好像没啥挺大的作用,我也没下所以没有磁力链接。

然后目前的部署方式有大约 3 种,分别是 webui、naifu 和一个百度的代码平台运行的内置版本。前面两个均通过 web 界面进行控制,naifu 的前后端均是原版的精简,初始版本 naifu 依旧需要至少 8G 显存才能正常使用,而后期已经优化到 6G 显存也能够使用的地步了。而另一边的 webui 则是功能比较全面的一个 web 界面,虽然效果逊色于 naifu,但他开源、功能种类多、img2img 的资源占用也比 naifu 少。可以说两个都算很不错的了。最后的那个 ui 界面只能在 codelab 的代码本进行操作,也不能搭建好给别人用,~~ 而且对于显存消耗也十分 bug(40G 的 A100,算不出一张 1152*704 的图)。~~ 好像已经修复了。

所以在这我仅介绍前两种实现方式,后者提到的 codelab 的部署可以直接点击此处,原作者写的也比较详细。当然,百度的那个平台使用需要填各种个人信息,我不建议你填真实的,手机号验证乱填也行,能过(完全为了获取手机号而获取手机号,恶心)。然后目前这平台主要还是在扩展使用人员,没有氪金通道,所有的使用时长只能通过完成每日任务和拉人头获得。


webui 和 naifu 的区别:

webui 是一个开源项目,他早在 novelai 模型泄露之前就已经存在,所以不要把 webui 认为是 novelai。

\ webui naifu
资源消耗
生成结果 略逊于原版 基本和原版一样
本地部署初始显存消耗 2G 显存 + 4G 显存 +
是否支持 colab
是否支持 codelab 不支持 不支持

naifu 一开始使用的是全精度运算,要求显存为 8G,后续被人继续改成了半精度,显存需求再次降低为 6G

webui

Colab

什么是 colab?

简单概述一下就是谷歌的云端代码执行平台,它类似于 Jupyter notebook。且为免费用户提供了一台时效大约 4 小时的,搭载了 Tesla T4 显卡的机器供你进行使用。虽然机器性能一般,但得益于每号每天大约 4 小时的使用额度,白嫖用户也能用得很开心。随带一提,colab 提供的 A100-40G 大约每小时收费 7 元,价钱不是很划算,不如 GPUhub,这上面的 A100-80G 也只要每小时 1.01 美刀,也差不多就 7 块多钱了。

Colab 部署属于是有网和谷歌账号外加一双手就行了,所以我这先讲 Colab 部署

下述链接的 Colab 为本人修改过了的,如果不想用可以自己去 webui 的 GitHub 看 readme 找到原版

至于使用方法其中已经有过说明

点我转到 Colab

本地部署 windows

只有 windows,所以只写 windows

如果你实在看不懂,那推荐你使用本人的整合包,如果你在使用整合包时出现了问题,本人愿意提供技术支持

安装好 python3.10.6 ,配置好好环境变量;装好 git ,配好环境变量。

找一个看着顺眼的文件夹,当然不能是必须管理员权限才能读写的文件夹。右键打开终端(ps 或者 cmd 都行), 或者直接在地址栏输入 cmd 打开,随便你。输入

1
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

如果报错,那就是网络问题或者 git 问题,请自行下载 Watt Toolkit 或其他网络工具解决 Github 的网络问题。如果你是程序员的话,我相信这都不是事~

git clone 完成之后把之前泄露的文件的模型复制过去,模型在泄露文件中的 novelaileak\stableckpt 目录。

如果你不知道这个目录在哪,请先通过磁力链接下载。右键可以复制。

你只需要下载 novelaileak\stableckpt 里面的 animefull-final-prunedanimefull-latestmodulesanimevae.pt

webui 存放模型文件的路径为 stable-diffusion-webui\models\Stable-diffusion\

这里简述一下各个文件的作用:

  • animefull-final-pruned - 经过修剪的模型,可以看作用户版(一般被称为 4G 模型)

  • animefull-latest - 未经过修建的模型,可以看作开发版(一般被称为 7G 模型)

  • modeles - 包含一些已经被锻炼好了的风格超网络,可以有效影响图像的画风,平时不常使用(需要在 webui 的 setting 中手动启用)

  • animevae.pt - vae 文件,如果正常 text2img 必带,但 img2img 与训练 tag 和超网络时建议卸载(不然会出古神)

  • model.ckpt - 模型文件,一个大型神经网络,可以当作母体看待

  • config.yaml - 配置文件,可以让图片更符合原本的样子,但是加载这个文件会更占用显存,显存不够可以不加(可以加但是没必要)

这里简述以下超网络:它是一个用来影响其他神经网络权重的另外一个神经网络。说直白一点的话就是 输入文本通过 model.ckpt 转化为图像时,超网络模型进来插了一脚,导致最后生成的图片变成了超网络的样子。

也有人用某个特定画师的图片训练超网络,装载训练好的超网络之后无论你是否输入训练 tag 它都将生成具有明显画师画风的图像。(超网络对普通 tag 的干扰)


既然我们知道了模型文件应该放置在 stable-diffusion-webui\models\Stable-diffusion\ 里面,而我们又有两个模型,那我该如何区分呢?亦或是我该如何选择呢?

此处引用一篇 B 站专栏,其中对模型选择做了一个直观、详细的说明,我在此处就简要概述一下

https://www.bilibili.com/read/cv19099066

模型选择的话,推荐日常使用【4G 模型 + vae】的组合,能得到一个很不错的效果和一个适当的显存占用。而用来训练的话则推荐使用【7G 模型不带 vae】的组合。选 7G 模型是因为它适合用来训练,而不带 vae 文件是因为带了它会严重影响训练效果。

所以我们可以在 models\Stable-diffusion 文件夹中新建两个文件夹,分别命名为 4G7G 。然后再分别把对应的文件放进去。如下所示

1
2
3
4
5
6
~\models\Stable-diffusion
\- 4G
\- model.ckpt
\- model.vae.pt
\- 7G
\- model.ckpt

至于为什么 animevae.pt 变成了 model.vae.pt ,这里就要简述一下 webui 的读取机制了。它会优先读取 .ckpt 文件然后再在同文件夹中搜寻有没有与 .ckpt 文件同名的其他文件。比如模型叫 hayasa.ckpt ,那么它就会自动寻找 hayasa.vae.pthayasa.yaml 等文件。看到这里应该很好理解为什么要给 vae 文件改名了吧?


如果你的显卡显存大于 4G,那你不用修改启动的 bat 文件了,确保网络流畅然后运行 webui 根目录的 webui.bat 即可。

如果你不是,那可以考虑使用内存优化参数,如 --medvram ,但是使用内存优化参数时假如再进行文本反转训练可能会导致程序报错,此问题我无法解决。

启动参数您可以在 webui-user.bat 中修改,它最终依旧指向 webui.bat

另外 16 系显卡假如想要使用训练功能也很困难,因为显卡问题 16 系不支持半进度运算的问题,需要加全精度参数才能正常生图,而开启全精度训练必定会把 16 系的显存撑爆。


运行需要下载依赖和一个 1G 多的包,如果因为网络问题下载出错请尝试删除根目录的 venv 文件夹以及 C:\Users\你用户名\.cache\huggingface 文件夹

不出错的话下完就能在指令窗口看见一个 http://127.0.0.1:7860/ 的链接了,浏览器打开就能看到 webui 的界面了。


什么?你还不会?那就下载我做的整合包吧,基本需要的东西都装了,打开基本就能直接使用。内置中文本地化文件,不懂英文也呆胶布。

优化篇

关于具体的优化,引用 GitHub 上 wiki 中的相关介绍。如有需求可自行前往查看

xformers | 优化

xformers

谷歌直译为变形金刚,个人习惯简称为 xfor

这个东西在民用显卡领域支持已经很完善了,如果你使用的是 Python3.10,且你用的显卡是 Pascal、Turing、Ampere、Lovelace、Hopper 架构的英伟达显卡,则直接使用 --xformers 即可自动安装。

如果你想要自行编译,那么这可能需要点时间。至少我在我的 2060 上编译花费了超过半小时的时间。编译的文件会比它自动安装的文件要小,因为你自己编译的只适用于自己的电脑,当然,也可能是我 cuda 版本过低导致的,这玩意我也说不清楚。所以,如果你符合上述的要求,你直接使用参数安装会简单得多。

当然,你也很可能遇到问题,我懂得。你可以尝试在 GitHub 手动下载发行文件手动安装,注意,你得先激活你的 webui 得 venv 环境才行。


下载至 webui 根目录:https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases

激活 venv 环境,然后安装( .whl 文件名请自行修改或通过 TAB键 补全)

1
2
.\venv\Scripts\activate
pip install xformers-xxxx-xxxxxxxx-xxxxx-win_amd64.whl

注意,如果你使用的是整合包,请尝试找到整合包使用的 python 或者 venv 环境中的 python,并在 pip 指令中加入。如

.\venv\Scripts\python.exe -m pip install xformers-xxxx-xxxxxxxx-xxxxx-win_amd64.whl

优化

如果你有使用 DeepDanbooru 的需求,那么你可以好好看一下这儿

除了 xformers 的优化外,安装 cuda 与 cuDNN 也是个不错的选择。当然,cuda 并不影响 text2img 功能,只不过… 有 cuda 你能更舒服的出图。

  • 安装 cuda

安装 cuda 很简单,你需要去英伟达官网下载一个 cuda 安装包,至于版本… 好像也不是那么严格,我使用的 11.3.0 和群友使用的 11.8 均能正常使用。

下载 cuda 安装包时我建议选择 network 版本,它的大小只有 50 多 MB,它只会下载你选择的组件,对比另外那个 2G 大的安装包不知道高到哪里去了。

打开安装包,你会看见一个路径,别急,这是临时文件的存放位置,不用管他也不用修改。

检测完系统兼容性之后会有一个同意条款,同意之后选择自定义安装,不然的话它就默认给你安装全家桶了,多少有点得不偿失。

组件除了 CUDA 其他全部取消勾选,点开 CUDA,我们能够看到里面还是有一堆我们用不着的。我们除了 DevelopmentRuntime 以外全部取消勾选。这样就差不多了。

完事后我们可以通过 nvcc -V 查看 cuda 版本号。

  • 安装 cuDNN

详细说明请参考英伟达官方支持文档:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-windows

在安装 cuDNN 之前,我们需要先安装 Zlib。

Zlib 是 cuDNN 需要的数据压缩软件库。

首先下载 zlib123dllx64.zip ,如果你的电脑不是 x64,请下载 zlib123dll.zip

解压压缩包,我们能够看见 dll_x64 文件夹和 static_x64 文件夹。但是我们只需要使用前者中的两个文件。

进入 dll_x64 文件夹,复制 zlibwapi.dllC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\版本自己看\bin\

然后再复制 zlibwapi.lib 放到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\版本自己看\lib\x64

如果 lib 文件夹中没有 x64 文件夹,则直接把 zlibwapi.lib 放置于 lib 文件夹中即可

至此,webui 应该能够正确搜寻到你的 Zlib 了。

  • 安装 cuDNN

下载 cuDNN 压缩包,解压。

C:\Program Files\ 中创建 NVIDIA 文件夹,再在其中创建 CUDNN 文件夹,再在其中创建 v8.x 的文件夹

v 后面为你自己下载的 cuDNN 版本号,这个请按照实际情况自行修改。

复制 bin 文件夹 至 C:\Program Files\NVIDIA\CUDNN\v8.x\
复制 include 文件夹 至 C:\Program Files\NVIDIA\CUDNN\v8.x\
复制库 lib 文件夹 至 C:\Program Files\NVIDIA\CUDNN\v8.x\

配置环境变量

win 键 搜索 高级系统设置,找到 环境变量 设置界面。在 系统变量 一栏中找到 Path

将 cuDNN 的 bin 目录路径添加即可。

例如: C:\Program Files\NVIDIA\CUDNN\v8.x\bin


至此,cuDNN 的安装已完成。这时如果使用 DeepDanbooru 的话,应该会正确调用 GPU 进行处理,而不是使用 CPU 硬跑。

调用 GPU 的话,大致能够提升 40% 左右的预处理性能,当然,这个值取决于你的 GPU 与 CPU 的本身差距。


拓展优化,开启 cuDNN 基准化

此发现来源于:https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/2819

在安装 cuDNN 后,可以通过修改 modules/sd_models.py 文件的 setup_model 方法来开启基准测试。

你只需要在 if not … 前加上一行 torch.backends.cudnn.benchmark = True 即可。修改后的代码如下所示。

1
2
3
4
5
def setup_model():
torch.backends.cudnn.benchmark = True
if not os.path.exists(model_path):
os.makedirs(model_path)
list_models()

注意,开启 cuDNN 基准测试之后,它会在生成第一轮图片时运行测试,同参数第二轮图片即可享受到它的加速效果。但是如果你频繁更改生成参数,则可能导致把时间浪费在测试上。推荐在训练和批量生图时开启。也希望后续能够把这个选项直接加入 webui 中,避免重复更改代码。

naifu

Colab

点我转到 Colab

本地部署 windows

关于 naifu 方面,我不打算做详细说明了。因为 naifu 这玩意,直接解压运行 setup.bat,完事之后运行 run.bat 就行了。纯纯傻瓜化操作,另外这段时间基本都放在 webui 整合包制作和性能优化方面了。我甚至还没在本地用 naifu 成功跑过图(因为我这 2060 只有 6G,还没下人家的半精度优化版本。。。)