[消遣]NovelAI部署教程

Stable Diffusion WebUI 安装与使用

Posted by Penistrong on October 19, 2022

NovelAI部署教程

前言

这段时间以来,AI作画十分火爆,其中NovelAI因为能够生成优质的二刺猿图片(包括NSFW),吸引了一大批喜欢二刺猿的LSP,b站也出现了很多教程教你如何部署所谓的本地版

在教程开始前,我先梳理一下各个版本之间的关系

NovelAI

https://novelai.net,墙外网站,生成图片需要消耗点数,而点数只能通过花费dollar获取,其实这也无可厚非,毕竟GPU帮你生成图片也是需要维护费的,要恰饭的嘛

NAIFU

全称 NovelAI AI Image Frontend Ultimate,国外某网站上匿名人士发布的NovelAI官网的泄漏版本

虽然他们也谴责了这种行为,但阴谋论者不难怀疑可能是自身炒作,毕竟官网模型每天都在更新,而Leak版使用的模型文件不再更新,效果自然有所差距,而且不是所有人都有显卡去跑本地版,这样就能够引一波大流

NAIFU的磁力链接下载地址:

magnet:?xt=urn:btih:4a4b483d4a5840b6e1fee6b0ca1582c979434e4d&dn=naifu

跟官网一模一样,不需要花钱充点数就可以生成图片,其实他使用的也是下面的stable diffusion模型

Stable-Diffusion-WebUI

GitHub仓库地址: AUTOMATIC1111/stable-diffusion-webui

stable-diffusion(图像生成模型中的Diffusion models里的一种)的Browser Interface,你可以理解成前后端的集合,前端在浏览器中打开,你与之交互,设定各种请求的参数,后端使用Stable Diffusion模型和其他的辅助模型、工具生成图片

可以将NovelAI视为另一个基于Stable Diffusion开发的浏览器用户界面(Web User Interface)

下面都将stable-diffusion-webui简称为sd-webui, 不然打字费劲

sd-webui重点在于开源,有很多人一起贡献Pull Requests参与功能开发与优化,每天的Commits很多,其能够调节的参数也很多,有很多NovelAI官网没有的功能

最重要的是, 通过调整设置可以让sd-webui与NovelAI达到一致,具体见后文配置

综上,我建议的是,直接安装sd-webui版本,通过git及时拉取官方仓库的更新,享受最新的feature

安装 Stable Diffusion WebUI

无论你是Linux还是Windows,搭建环境都是必不可少的前置步骤

下面每一节,我都尽量分开两个平台进行讲解,我没有分开讲解的,绝大部分都是两个平台通用

如果你懂什么是虚拟环境(使用过conda, venv等),那么建议你新建一个虚拟环境来完成以下所有操作,这样依赖不会过于混乱,不想用的时候一删了之(下面如果出现可以使用虚拟环境的操作,都会放在与本行类似的引用文本框里,而且默认是以conda为例)

前置环境

  • Python 3.10
  • Git
  • (你可以不装,我推荐而已)Conda 或者其他虚拟环境

  1. Linux:
    • 较新的分发版Linux如Ubuntu(Debian系), CentOS(RedHat系), Manjaro(Arch系)都可以通过包管理器或者从Python官网下载源码进行编译,以安装最新的Python版本。

      下面的Linux相关都默认为Ubuntu,其他分发版自己搜索对应的相似命令

      sudo apt install python=3.10
      

      如果软件源里没有,自行搜索“Ubuntu如何从官网源码安装Python指定版本”

    • 不会有哪个分发版不带git的吧?要是没有就

      sudo apt install git
      
  2. Windows:
    • Python官网-目前最新3.10.8版本下载Windows Installer(64-bit)(不会有人还是32位Windows吧),直接运行

      注意,安装过程中有一步会出现Add Python to Path,将python的相关文件夹添加到环境变量下,如果你没有勾选,那么安装完成后自行搜索怎么把Python添加到Windows环境变量里

      Optional:如果你安装了虚拟环境,以conda为例,新建1个python版本为3.10的名为novelai的虚拟环境

      conda create --name novelai python=3.10
      
    • Git官网-Windows下载页里下载Standalone Installer/64-bit Git for Windows Setup,自己安装不多废话,安装后可能需要配置邮箱和昵称,自行搜索

安装流程

我懒了,会用Linux的人看Windows教程也知道怎么装,下面全是Windows下的安装流程

拉取官方仓库并安装依赖

用文件资源管理器进入你想存放NovelAI的文件夹下,shift+右键点击空白处,找到在此处打开Powershell窗口(或者CMD,都行),按序执行

温馨提示,按Tab键大部分命令都可以自动补全,而不需要你自己一个字一个字的敲或者复制

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

cd stable-diffusion-webui

pip install -r requirements.txt

Q&A:

  1. git clone后一直没反应,或者提示连接到Github.com(port:443) Time Out,说明你的网络环境需要VPN翻墙才能访问Github。如果你使用的是v2rayN,默认开启了http(10809)和socks(10808)代理,那么可以在Shell中输入

     git config --global http.proxy http://127.0.0.1:10809
     git config --global https.proxy http://127.0.0.1:10809
    

    再执行git clone命令

  2. requirements.txt中包括torch等一系列比较大的库的包名,pip的下载速度因地制宜,太慢了就自己去搜pip替换清华源,换源再下

  3. 如果你解决不了翻墙的问题,那只能去找别人的整合包了(他们的教程更适合小白,比我这个好多了)

下载子模块的依赖

作者在launch.py中写好了下载其他子模型的代码,只需要执行

python launch.py

launch.py的逻辑是,先检查对应文件夹下是否已下载需要的子模块,如果没有他会调用git克隆那些仓库,最后会启动sd-webui

但是,你还没有下载模型文件(.ckpt与.vae.pt),启动sd-webui后会提示没有模型存在而报错

下载需要用到的模型文件

官方Git仓库的Wiki让你下载的是他们自己使用的sd-v1-4.ckpt,这个模型更偏向于真人的生成,如果你想生成二次元小姐姐,那么就从下面的磁力链接里下载对应的模型

magnet:?xt=urn:btih:5bde442da86265b670a3e5ea3163afad2c6f8ecc&dn=novelaileak

不要全部下载,看下图勾选的模型文件

此处应有图

下载完成后:(假定你打开了下载文件夹novelaileak/stableckpt)

  1. animefull-final-pruned/model.ckptanimevae.pt移动到stable-diffusion-webui/models/Stable-diffusion

    我建议你将他们重命名,便于管理(省得你换模型换昏头了):

    • model.ckpt $\rightarrow$ animefull-final-pruned.ckpt
    • animevae.pt $\rightarrow$ animefull-final-pruned.vae.pt

    大致说一下, ckpt是主模型参数文件,vae.pt是辅助的权重文件,按照源码的加载逻辑必须保证.vae.pt.ckpt前面的文件名完全相同,才能做到加载完主模型后继续加载后续层的权重

  2. modules/modules/下所有的*.pt全部移动到stable-diffusion-webui/models/hypernetworks

最终结果如下图所示

模型存放位置

启动Web-UI

还是在stable-diffusion-webui文件夹下打开终端(Powershell or CMD or Windows Terminal)

如果你之前的终端没有关闭webui的进程,记得回到那个终端里使用Ctrl + C组合键终止进程 不然可能出现端口被占用无法绑定的情况

在终端里键入

python webui.py

此处应有图

显示Running on local URL: http://127.0.0.1:7860,用浏览器打开即可

Q&A

  1. 如果显存不够8G,那么需要在启动Web-UI时添加启动参数--lowvram或者--medvram
    • python webui.py --medvram适用于 $(4G, 8G]$ 显存
    • python webui.py --lowvram适用于 $[2G, 4G]$ 显存
  2. 如果你使用的是10系和16系显卡,由于模型默认是以半精度浮点数(fp16)进行计算,而10系和16系都不支持半精度,那么需要添加--precision full --no-half启动参数指定以原始的fp32进行计算,显然这样反而会增大显存占用,希望你是20系或者30系或者大罐的10、16系
    • python webui.py --precision full --no-half
  3. 如果你想让局域网中的设备都能够访问Web-UI(比如电脑运行,你躺在床上用手机生成色图),添加启动参数--listen会让gradio监听0.0.0.0:7860,同一局域网下在浏览器中输入你的<电脑ip>:<监听端口>即可访问,当然防火墙是要开启的,自行搜索”Windows防火墙放行端口”

  4. 如果你想让公网的LSP们都能够使用你运行的Web-UI,有很多方式,浅列3种:
    • 一种是如上图中所示 “To create a public link, set share=True in launch()“,去源码中修改,这样就可以通过xxxxx.gradio.app直接访问
    • 按照第3步,让gradio监听0.0.0.0,保证你的设备拥有公网IP,直接输入你设备的<IP地址>:<监听端口>即可访问
    • 用Web服务器比如Nginx,代理你的域名,并将http请求转发到WebUI监听的端口

使用 Stable Diffusion WebUI

UI界面如下图所示

使用简介

  • 正面Tag(Prompts)就是你想要生成的图片所包含的语义元素,可以是一段描述性的语言,也可以是许多形容词或定语,用英文半角逗号分隔

  • 负面Tag(Negative Prompts)是你不想要的语义元素,按照大家通常的叫法,你可以当作古神护身咒

至于Prompts怎么获得,这里提供一个网站魔咒百科词典,自己去查

Prompts强调

如果想要重点突出某些Prompts(即模型提高对他们的注意力)

sd-webui使用()及其默认比例$1.1$作为强调效果,而且括号可以嵌套乘算叠加,也可以通过(<word>:<ratio>)的形式调整到任意你想要的程度,同时[]能够降低注意力但是不能够设定ratio

  • a (word) - 以$1.1$的比例提高对word的注意力
  • a ((word)) - 以$1.1 \times 1.1 = 1.21$的比例提高对word的注意力
  • a (word:1.85) - 以$1.85$的比例提高对word的注意力
  • a (word:0.25) - 以$0.25$的比例降低对word的注意力
  • a [word] - 以$1.1$的比例降低对word的注意力

显然,如果你想要在prompt里使用包含语义的括号,那么就需要转义字符\

  • a \(word\) - ()不再被识别为注意力强调关键字,而是其本身的含义,通过括号打备注或追加信息是很常见的事

进阶配置

对WebUI进行更多的配置

获得与NovelAI官网相同的生成效果

SD-WebUI-WIKI的Attention Emphasis部分有言,NovelAI拉取的是他们2022.09.29之前的仓库:

NAI uses my implementation from before 2022-09-29, except they have 1.05 as the multiplier and use {} instead of ()

如果你想要sd-webui跟NovelAI官网生成的图片基本一致,那么就按照下面的教程一步步更改

Prompts强调转换

{}(替换了sd-webui的())和[]作为NovelAI提高和降低注意力的关键字,其默认比例都被改成了$\color{red}{1.05}$

如果你得到了来源于NovelAI的召唤术式,想要在sd-webui中重现,那么需要简单的权重计算即可,例如:

  • naifu的{word} = sd-webui的(word:1.05)
  • naifu的`` = sd-webui的(word:1.1025)$(1.05 \times 1.05)$
  • naifu的[word] = sd-webui的(word:0.952)$(1/1.05)$

参数设置

NovelAI-Official-Settings

  • Undesired Content板块的Low Quality + Bad Anatomy等价于提前添加了负面Prompts:

    nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

  • Add Quality Tags默认开启,等价于提前添加了正面Prompts:

    masterpiece, best quality

  • Steps对应Sampling Steps,NovelAI设置为28

  • Scale对应CFG Scale,NovelAI设置为12,在sd-webui中设置CFG Scale=11即可

  • Sampler采样器为k_euler_ancestral(即Euler_A)时,需要在sd-webui的setting里设置ENSD(Eta Noise Seed Delta)为31337

    ENSD设置

经过设置后你会发现只要主模型用的是NovelAI-Leak的animefull-final-pruned.ckpt,只要有相同的Prompts和Seed就可以完全重现一张在NovelAI里生成的图片