SDWebUI:AI绘图本地部署及绘图效率实验
摘要:本地部署Stable Diffusion Web UI整合包,预设参数修改,绘图效率实验。
Stable Diffusion Web UI-2023/05/02
- AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI - https://github.com/AUTOMATIC1111/stable-diffusion-webui
- GitHub上这个 star 最多,七万,NB,所以我选它。
- 下文称 SDWebUI。
整合包
- 【AI绘画】Stable Diffusion整合包v4发布!全新加速 解压即用 防爆显存 三分钟入门AI绘画 ☆可更新 ☆训练 ☆汉化_哔哩哔哩
- 我放弃了,我不理解,安环境这么多年,我还是第一次碰到这么复杂的,不知道是我的问题还是它的问题,反正我弱爆了。
- 这玩意好诶,下载就能用了。
预设参数修改-2023/05/06
- 搞了一堆毫无意义的操作,不好意思发,所以多凑点。
- 修改位置:sd-webui-aki-v4/ui-config.json
- 简单示例:
txt2img/*:所有以txt2img开头
*/Width/*:任意开头,Width在第二位,如txt2img/Width表示txt2img的宽度选项
文生图的宽度默认值:txt2img/Width/value
图生图的高度最大值:img2img/Height/maximum
采样方法的迭代次数:*/Sampling method/value
总批次数的默认值:*/Batch count/value
- 修改示例:
- 假设文生图的时候都是用 DPM++ SDE Karras 采样方法,一次6张,图像尺寸为 1280x720,迭代28次。
- 图生图的时候 DPM++ SDE Karras 采样方法,一次1张,图像默认尺寸为 2048x1152,最大尺寸为2560x2560,迭代28次。后处理使用 BSRGAN 上采样至 2560x1440。
- 修改如下:
"txt2img/Sampling method/value": "DPM++ SDE Karras",
"txt2img/Batch count/value": 6
"txt2img/Width/value": 1280,
"txt2img/Height/value": 720,
"txt2img/Sampling steps/value": 28,
"img2img/Sampling method/value": "DPM++ SDE Karras",
"img2img/Width/value": 2048,
"img2img/Width/maximum": 2560,
"img2img/Height/value": 1152,
"img2img/Height/maximum": 2560,
"img2img/Sampling steps/value": 28,
"customscript/postprocessing_upscale.py/img2img/Width/value": 2560,
"customscript/postprocessing_upscale.py/img2img/Height/value": 1440,
"customscript/postprocessing_upscale.py/img2img/Upscaler 1/value": "BSRGAN",
绘图效率实验
- 论文实验还在跑,比赛实验和 SD 同时跑会卡着,而比赛实验的代码我又快写好了。
- 所以来不务正业一下。
实验配置-2023/05/08
- 我看菩萨说每次一张更好,前几天用的时候我也是这样搞的,省脑子。
- 但是我跑实验的时候,一般是尽量塞满内存或是使用通用 batch size。
- 打比赛的时候我用自己笔记本跑,大 batch size 影响不会显著降低速度,但同时跑多个实验会较大影响速度,尤其当实验塞满显存后,完全无法训练。
- 最近总是在一直调参,论文是,AI 绘图也是,这次把绘图速度的影响实验一下。
- 实验仅重复一轮,实验时 Prompt 有变动。
- 实验配置见下表
迭代步数 | 采样方法 | 放大算法 | 上采样器 | Clip skip |
---|---|---|---|---|
20 | DPM++ SDE Karras | Latent (nearest-exact) | BSRGAN | 2 |
- 实验环境见下表
显卡 | 内存 | CPU | 系统 |
---|---|---|---|
笔记本 3080 16G | 16x2G | i7-11800H | Win11 22H2 |
- 涉及名词见下表
名词 | Batch Count | Batch Size | 2K | 1080P | 720P | 360P |
---|---|---|---|---|---|---|
含义 | 总批次数 | 单批数量 | 2560x1440 | 1920x1080 | 1280x720 | 640X360 |
- 文生图,高分,上采样的组合见下表
文生图(T1) | 文生图+高分辨率修复(T2) | 文生图+高分辨率修复+上采样(T3) | |
---|---|---|---|
文生图输出 | 720P | 720P | 720P |
高分输出 | - | 2K | 1080P |
上采样输出 | - | - | 2K |
最终输出 | 720P | 2K | 2K |
实验及结论-2023/05/08-2023/05/09
我的方向里面,推理分辨率和训练分辨率差别越大,效果越差,所以推荐使用模型前确认推荐分辨率。
单纯文生图 2K 效果很差,所以不用。
起始 360P 也不行,毕竟默认 512x512,太窄了质量差。
文生图 720P + 上采样 2K 的话,细节处理不好。
这几天的测试下来,用上高分可以修复错误,增加细节,但大幅高分会带来新的问题。
注:T1 只是添头,细节不够好,我实验的主要对象还是 2K。
推荐三阶段的 T3。
处理类型 | Batch Count | Batch Size | 总数 | 耗时 | active/reserved | Sys VRAM |
---|---|---|---|---|---|---|
T1 | 4 | 1 | 4 | 1m9s | 5445/8538 | 10815 (66.01%) |
T2 | 4 | 1 | 4 | 13m42s | 15069/15482 | 16384 (100.0%) |
T3 | 4 | 1 | 4 | 6m23s | 9476/15610 | 16384 (100.0%) |
- 2K 时,我的电脑用 batch size = 4 较快。
- 我的经验告诉我显存不爆就死劲塞,效率会更高,这里的结论不一致,可能两个原因:
- 有专门针对爆显存的处理,所以即便塞满了,它也可以分批计算。
- Batch size = 8 时没塞满,但在利用率已经满的时候,越多的数据处理的越慢。
- 所以 T3 的 Batch size = 2 时效率没有高,可能是利用率没满
- 我的经验告诉我显存不爆就死劲塞,效率会更高,这里的结论不一致,可能两个原因:
处理类型 | Batch Count | Batch Size | 总数 | 耗时 | active/reserved | Sys VRAM |
---|---|---|---|---|---|---|
T1 | 4 | 1 | 4 | 1m9s | 5445/8538 | 10815 (66.01%) |
T1 | 1 | 4 | 4 | 58s | 5472/10826 | 13528 (82.57%) |
T1 | 1 | 8 | 8 | 2m6s | 6525/15156 | 16384 (100.0%) |
T2 | 4 | 1 | 4 | 13m42s | 15069/15482 | 16384 (100.0%) |
T2 | 2 | 2 | 4 | 13m42s | 15111/15582 | 16384 (100.0%) |
T2 | 1 | 4 | 4 | 10m43s | 15155/15542 | 16384 (100.0%) |
T3 | 4 | 1 | 4 | 6m23s | 9476/15610 | 16384 (100.0%) |
T3 | 1 | 4 | 4 | 5m17s | 9536/15584 | 16384 (100.0%) |
T3 | 8 | 1 | 8 | 12m 57.66s | 9556/15594 | 16384 (100.0%) |
T3 | 4 | 2 | 8 | 12m 59s | 9578/15598 | 16384 (100.0%) |
T3 | 2 | 4 | 8 | 10m36s | 9671/15602 | 16384 (100.0%) |
T3 | 1 | 8 | 8 | 12m17s | 10912/15618 | 16384 (100.0%) |
T3 | 3 | 4 | 12 | 15m45s | 9662/15584 | 16384 (100.0%) |
T3 | 4 | 4 | 16 | 21m10s | 9671/15586 | 16384 (100.0%) |
T3 | 8 | 4 | 32 | 44m | ||
T3 | 40 | 4 | 160 | 213m38s | 9671/15586 | 16384 (100.0%) |
T3 | 120 | 4 | 480 | 624m57s | 9663/15626 | 16384 (100.0%) |
- 上面那个10个小时480张的prompt不好,我很喜欢它的场景,但是生成质量很差,我初步筛选只有17张是人体不违和的,可恶。
一堆无效操作
- 后文可以不用看,是我安装源码的时候出的问题。
- 我的建议就是拜一拜赛博菩萨,赛博菩萨除了整合包以外还有好些教程:【AI绘画】Stable Diffusion整合包v4发布!全新加速 解压即用 防爆显存 三分钟入门AI绘画 ☆可更新 ☆训练 ☆汉化_哔哩哔哩。
运行以删除环境-2023/05/02
- GItHub 上介绍直接运行 webui-user.bat,查看该文件,发现有配置python路径。和前面一样,我用的是 ChatGLM 环境,所以这里对应修改。
- 过分,我改了路径之后可以运行了,但是pip直接被删了。
- 好哥哥们帮我看看,第一个是我更改的 webui-user.bat,第二个是它调用的 webui.bat,我都没动,为毛这会让我环境被删。
- 还好这个环境是我前几天才创的,没用平时跑实验的环境。
@echo on
set PYTHON=python.exe
set GIT=
set VENV_DIR=F:\0_DATA\2_CODE\Anaconda\envs\ChatGLM
set COMMANDLINE_ARGS=
call webui.bat
@echo on
if not defined PYTHON (set PYTHON=python)
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
set ERROR_REPORTING=FALSE
mkdir tmp 2>NUL
%PYTHON% -c "" >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :check_pip
echo Couldn't launch python
goto :show_stdout_stderr
:check_pip
%PYTHON% -mpip --help >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :start_venv
if "%PIP_INSTALLER_LOCATION%" == "" goto :show_stdout_stderr
%PYTHON% "%PIP_INSTALLER_LOCATION%" >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :start_venv
echo Couldn't install pip
goto :show_stdout_stderr
:start_venv
if ["%VENV_DIR%"] == ["-"] goto :skip_venv
if ["%SKIP_VENV%"] == ["1"] goto :skip_venv
dir "%VENV_DIR%\Scripts\Python.exe" >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :activate_venv
for /f "delims=" %%i in ('CALL %PYTHON% -c "import sys; print(sys.executable)"') do set PYTHON_FULLNAME="%%i"
echo Creating venv in directory %VENV_DIR% using python %PYTHON_FULLNAME%
%PYTHON_FULLNAME% -m venv "%VENV_DIR%" >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :activate_venv
echo Unable to create venv in directory "%VENV_DIR%"
goto :show_stdout_stderr
:activate_venv
set PYTHON="%VENV_DIR%\Scripts\Python.exe"
echo venv %PYTHON%
:skip_venv
if [%ACCELERATE%] == ["True"] goto :accelerate
goto :launch
:accelerate
echo Checking for accelerate
set ACCELERATE="%VENV_DIR%\Scripts\accelerate.exe"
if EXIST %ACCELERATE% goto :accelerate_launch
:launch
%PYTHON% launch.py %*
pause
exit /b
:accelerate_launch
echo Accelerating
%ACCELERATE% launch --num_cpu_threads_per_process=6 launch.py
pause
exit /b
:show_stdout_stderr
echo.
echo exit code: %errorlevel%
for /f %%i in ("tmp\stdout.txt") do set size=%%~zi
if %size% equ 0 goto :show_stderr
echo.
echo stdout:
type tmp\stdout.txt
:show_stderr
for /f %%i in ("tmp\stderr.txt") do set size=%%~zi
if %size% equ 0 goto :show_stderr
echo.
echo stderr:
type tmp\stderr.txt
:endofscript
echo.
echo Launch unsuccessful. Exiting.
pause
解决 No module named 'pip'
-2023/05/02
from pip._internal.cli.main import main
ModuleNotFoundError: No module named 'pip'
- python - No module named 'pip._internal.cli.main' - Stack Overflow - https://stackoverflow.com/questions/66561487/no-module-named-pip-internal-cli-main
- 一个不确定可不可行的方法:
conda install -c conda-forge pip
- 另一个可能导致删库的操作:
- 下载 https://bootstrap.pypa.io/get-pip.py 保存为 get-pip.py
- 运行
python get-pip.py --force-reinstall
- 我这样做完后发现环境被删了,但我不确定是这段代码导致的还是这个项目导致的。
重新创环境-2023/05/02
conda create --name AIDeploy python=3.10.6
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
pip install requirements.txt
- requirements.txt 指的是 SDWebUI 源码里的。
- 没用。
环境复制-2023/05/02
- 可以直接运行 webui-user.bat,让它自动下载。
- 但我没流量了,给这几次创环境给搞的剩7G,手机热点速度贼慢。
- 我把我刚创的给 ChatGLM 用的环境复制过来了,命名成 venv
- 能用,但安包安一半就报错。
共有 0 条评论