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 或者其他虚拟环境
- 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
-
- 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:
-
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
命令 -
requirements.txt中包括torch等一系列比较大的库的包名,pip的下载速度因地制宜,太慢了就自己去搜
pip替换清华源
,换源再下 -
如果你解决不了翻墙的问题,那只能去找别人的整合包了(他们的教程更适合小白,比我这个好多了)
下载子模块的依赖
作者在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
)
-
把
animefull-final-pruned/model.ckpt
和animevae.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
前面的文件名完全相同,才能做到加载完主模型后继续加载后续层的权重 -
把
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:
- 如果显存不够8G,那么需要在启动Web-UI时添加启动参数
--lowvram
或者--medvram
python webui.py --medvram
适用于 $(4G, 8G]$ 显存python webui.py --lowvram
适用于 $[2G, 4G]$ 显存
- 如果你使用的是10系和16系显卡,由于模型默认是以半精度浮点数(fp16)进行计算,而10系和16系都不支持半精度,那么需要添加
--precision full --no-half
启动参数指定以原始的fp32进行计算,显然这样反而会增大显存占用,希望你是20系或者30系或者大罐的10、16系python webui.py --precision full --no-half
-
如果你想让局域网中的设备都能够访问Web-UI(
比如电脑运行,你躺在床上用手机生成色图),添加启动参数--listen
会让gradio监听0.0.0.0:7860
,同一局域网下在浏览器中输入你的<电脑ip>:<监听端口>
即可访问,当然防火墙是要开启的,自行搜索”Windows防火墙放行端口” - 如果你想让公网的LSP们都能够使用你运行的Web-UI,有很多方式,浅列3种:
- 一种是如上图中所示 “To create a public link, set
share=True
inlaunch()
“,去源码中修改,这样就可以通过xxxxx.gradio.app
直接访问 - 按照第3步,让gradio监听0.0.0.0,保证你的设备拥有公网IP,直接输入你设备的
<IP地址>:<监听端口>
即可访问 - 用Web服务器比如
Nginx
,代理你的域名,并将http请求转发到WebUI监听的端口
- 一种是如上图中所示 “To create a public link, set
使用 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)$
参数设置
-
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
经过设置后你会发现只要主模型用的是NovelAI-Leak的animefull-final-pruned.ckpt
,只要有相同的Prompts和Seed就可以完全重现一张在NovelAI里生成的图片