10-11 更新:显存占用问题可以通过指定 Fp16 计算解决,16G 显存就足够运行完整模型,77Prompt 长度限制通过增加 - e CLIP_CONTEXTS=3 解决,Docker 的启动指令已经更新。
10-11 更新 @LyanOrz 提供的 Colab 白嫖跑官方前后端
https://colab.research.google.com/drive/1_Ma71L6uGbtt6UQyA3FjqW2lcZ5Bjck-
一些碎碎念
其实我感觉自己用的话部署整套 UI + 后端挺麻烦的,毕竟前端只是帮你发了个请求,后端也只是把请求改了个样子发给实际处理的 Api,直接部署 Api 调用 Api 结果是一样的,还方便白嫖。
可以参考 @LyanOrz 大佬提供的用 Colab 白嫖部署的方法,直接嫖一个后端出来,显卡都省了岂不美哉.jpg
https://colab.research.google.com/drive/1X-62QjZJpZ5Ewo3w6xr9D23Tu90udvQI
或者使用 Stable-Diffusion Webui 替换模型的 Webui,也是白嫖 Colab
https://colab.research.google.com/drive/1zuK0u8UW8IKMEvVNz7lU34Qph_gS14XD
其他的吐槽
原版这全套莫名其妙的极其能吃显存,吃完还不释放(见文末尾),如果有大佬优化一下最好了。
又更新:
看起来全尺寸的 7G 模型就是特别能吃显存,建议显存低于 24G 的就不要尝试使用官方版本前后端了,铁定爆(
目前来看如果准备使用官方前后端还想玩 img2img 的话。。。可能需要 32G + 的显存,建议购买 V100S 或者 A6000 或者 A100(跑
还没写完文章就有的更新:
已经有大佬把官方前端后端单独提出来了,没必要折腾下面那么多完整的部署,直接下载运行就好了,默认使用的是 4G 大的模型,理论上替换成 7G 那个模型就是跟官方一样的效果。
1 >magnet:?xt=urn:btih:4a4b483d4a5840b6e1fee6b0ca1582c979434e4d&dn=naifu&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce
1. 准备
硬件需求:
一台拥有一张至少有 24G 显存(单后端至少11G)的 NVIDIA GPU 的 linux 系统的 x86 设备。
软件需求:
NVIDIA 驱动 (CUDA 11.6 Toolkit)
Docker 19+
Nvidia-Container-Toolkit
2. 安装 Docker
该命令国内访问较慢,可以查国内镜像安装
1 | curl -fsSL https://get.docker.com | bash |
3. 安装 Nvidia-Container-Toolkit
Ubuntu, Debian:
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) |
CentOS/RHEL
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) |
4. 安装显卡驱动
略
5. 确认显卡驱动已经安装好,并且nvidia-smi可以看到显卡
6. 确认 Nvidia-Container-Toolkit 安装成功
7. 下载 NovelAI 模型相关文件
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/Models/novelai.tar.gz
8. 解压 NovelAI 模型相关文件
1 | tar -zxvf novelai.tar.gz |
9. 下载 Docker 镜像相关文件
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/Back-End/novelaidocker.tar
10. 导入 Docker 镜像
1 | docker load -i novelaidocker.tar |
继续部署单后端版本
10.1 运行 Docker
如果希望包含 nsfw 内容,则把
1 - e MODEL_PATH="/root/stableckpt/animesfw-latest"改成
1 -e MODEL_PATH="/root/stableckpt/animefull-latest"
解压的 novelai 位置替换为你实际解压 NovelAI 模型相关文件出来的 novelai 文件夹的位置,如 /root/novelai
1 | docker run --gpus all -d -p 80:80 -v 解压的 NovelAI 位置:/root -e DTYPE="float32" -e AMP="1" -e MODEL="stable-diffusion" -e DEV="True" -e MODEL_PATH="/root/stableckpt/animesfw-latest" -e MODULE_PATH="/root/stableckpt/modules" -e TRANSFORMERS_CACHE="/root/transformer_cache" -e SENTRY_URL=""-e ENABLE_EMA="1"-e VAE_PATH="/root/stableckpt/animevae.pt"-e BASEDFORMER="1"-e PENULTIMATE="1" novelai:latest gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80 |
10.2 查看容器状态
查询出容器 ID
1 | docker ps |
1 | docker logs [Container ID] |
出现 “Application startup complete.” 即代表程序已经就绪
1 | docker attach [Container ID] |
attach 进入 docker 可以看到当前任务实时的生成进度
10.3 请求 API
参考代码,具体参照 leak 的前端后端项目,以及其中的 sd-private\hydra-node-http\main.py
prompt 中 masterpiece, best quality, 开头对应原版 web Add Quality Tags 选项,不建议删除,后面直接跟自己 prompt 即可
uc 部分对应 web Undesired Content,建议保留默认
sampler 是采样方法,可选plms/ddim/k_euler/k_euler_ancestral/k_heun/k_dpm_2/k_dpm_2_ancestral/k_lms
seed 是种子,自己随机一个整数数字,不然一直会出一样的结果。
n_samples 代表要生成几张图片
1 | import requests |
生成的效果图示例
Genshin,lumine, gold hair, cat, girl,White silk
11. 创建一个 Docker Bridge
1 | docker network create --subnet=10.240.0.0/16 nainetwork |
12. 下载 Tag Predict 所需文件
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/TagPredict/safe.zip
13. 将上一步的压缩包解压到Novelai 文件夹中。
14. 修改 Docker 中的 models.py 文件让他从本地加载 Tag Predict 依赖文件
执行
1 | cd ~ |
下载 models.py
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/Models/models.py
然后将 models.py 下载并存放到新建的 docker 文件夹内
执行
1 | echo -e "FROM novelai:latest\nCOPY models.py /usr/src/app/hydra_node" > Dockerfile |
检查一下文件夹内容
无误的话执行
1 | docker build . -t novelai:latest |
15. 启动 Tag Predict Docker
注意:他可能需要从被墙的 Huggingface 下载东西,建议机器科学上网
1 | docker run --gpus all --network "nainetwork" --name "tag-predict" --restart=always -d -p 127.0.0.1:7000:7000 -v 上文中解压 Novelai 相关文件的位置:/root -e DTYPE="float32" -e AMP="1" -e MODEL="embedder" -e DEV="True" -e MODEL_PATH="/root/stableckpt/animefull-latest" -e MODULE_PATH="/root/stableckpt/modules" -e TRANSFORMERS_CACHE="/root/transformer_cache" -e SENTRY_URL=""-e ENABLE_EMA="1"-e VAE_PATH="/root/stableckpt/animevae.pt"-e BASEDFORMER="1"-e PENULTIMATE="1" -e TOKEN=114514qwqqwq novelai:latest gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:7000 |
16. 查看 Tag Predict Docker 状态
17. 测试 Tag Predict 是否工作
1 | curl 'http://127.0.0.1:7000/predict-tags' -H 'Authorization: Bearer 114514qwqqwq' -H 'Content-Type: application/json' --data-raw '{"prompt":"kochiya"}' |
如果以上步骤一切正常的话,就可以开始部署 web 的后端了
18. 运行 Pgsql
18.1 下载 Pgsql 数据库文件
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/Pgsql/pgsqldata.tar.gz
18.2 解压 Pgsql 数据库文件
1 | tar -zxvf pgsqldata.tar.gz |
18.3 拉取 Pgsql Docker
1 | docker pull postgres |
18.4运行 Pgsql
1 | docker run -d --network "nainetwork" --name "pgsql" -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=development -v 解压出的 Pgsqldata 文件夹位置:/var/lib/postgresql/data postgres |
19. 运行 Web 后端
下载并导入 Web 后端 Docker
19.1 导入 Docker
1 | docker load -i novelai-backend.tar |
19.2 运行 Docker
1 | docker run -d --log-opt max-size=10m --log-opt max-file=3 --network "nainetwork" --restart=always -p 3000:3000 -e LISTEN_ADDRESS=0.0.0.0 -e VOICE_TOKEN=114514qwqqwq -e NODE_ENV=development -e DB_HOST=pgsql -e DB_PORT=5432 -e DB_USER=postgres -e DB_PASSWORD=development -e DB_NAME=novelai -e RECAPTCHA_SECRET_KEY=disabled -e HYDRA_DUMMY=true -e AI_KEY= -e JWT_SIGN_SECRET=b95bac5a-9c43-4cdf-8c65-fc1bcc557e41 -e PADDLE_VENDOR_ID=1234 -e PADDLE_VENDOR_TOKEN= -e MAILGUN_DOMAIN=1234 -e MAILGUN_KEY=1234 -e REGISTRATION_DISABLED= -e ADMIN_PASSWORD=1234 novelai-backend:latest |
检查 Web 后端 Log
20. 运行模型
如果准备同时加载两个模型的话对显存要求比较高,量力而行。
20.1 加载 Curated 模型
1 | docker run --gpus all -d --restart=always --network "nainetwork" --name "nai-sfw" -v 解压的 NovelAI 文件夹位置:/root -e DTYPE="float16" -e CLIP_CONTEXTS=3 -e AMP="1" -e MODEL="stable-diffusion" -e DEV="True" -e MODEL_PATH="/root/stableckpt/animesfw-latest" -e MODULE_PATH="/root/stableckpt/modules" -e TRANSFORMERS_CACHE="/root/transformer_cache" -e SENTRY_URL=""-e ENABLE_EMA="1"-e VAE_PATH="/root/stableckpt/animevae.pt"-e BASEDFORMER="1"-e PENULTIMATE="1" -e TOKEN=114514qwqqwq novelai:latest gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80 |
20.2 加载 Full 模型
1 | docker run --gpus all -d --restart=always --network "nainetwork" --name "nai-full" -v 解压的 NovelAI 文件夹位置:/root -e DTYPE="float16" -e CLIP_CONTEXTS=3 -e AMP="1" -e MODEL="stable-diffusion" -e DEV="True" -e MODEL_PATH="/root/stableckpt/animefull-latest" -e MODULE_PATH="/root/stableckpt/modules" -e TRANSFORMERS_CACHE="/root/transformer_cache" -e SENTRY_URL=""-e ENABLE_EMA="1"-e VAE_PATH="/root/stableckpt/animevae.pt"-e BASEDFORMER="1"-e PENULTIMATE="1" -e TOKEN=114514qwqqwq novelai:latest gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80 |
21. 部署前端
21.1 拉取 Nginx docker
1 | docker pull nginx |
21.2 下载前端文件
https://pan.lumine233.ml/d/Lumine/NovelAI-Leak/Front-End/nginx.zip
21.3 解压文件
1 | unzip nginx.zip |
21.4启动 Nginx
1 | docker run -d --network "nainetwork" -v 解压出来的 nginx 目录位置 /conf.d:/etc/nginx/conf.d -v 解压出来的 nginx 目录位置 /build:/etc/nginx/build -p 80:80 nginx:latest |
22. 修改 Hosts
将本地 Hosts 中添加一条
你后端部署在的机器的 ip novelai.baidu.com
23. 访问 Web
现在尝试访问一下 http://novelai.baidu.com
使用账号 test@nya.la
密码 Aa123123123
登录即可
只有 Image Generation 下面的功能是可以使用的。
一些其他信息
跑生成时的显存占用
已知问题:
生成一个图片之后这破程序不回收显存,生成下一张就会
然后 docker 就会自动崩溃重启。
24G 显存的 A10 使用 img2img 功能,哪怕全默认配置
显存也不够他吃的