SDWebUI:AI绘图本地部署及绘图效率实验

文章首发及后续更新:https://mwhls.top/4543.html,无图/无目录/格式错误/更多相关请至首发页查看。
新的更新内容请到mwhls.top查看。
欢迎提出任何疑问及批评,非常感谢!

服务部署汇总

摘要:本地部署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 较快。
    • 我的经验告诉我显存不爆就死劲塞,效率会更高,这里的结论不一致,可能两个原因:
      1. 有专门针对爆显存的处理,所以即便塞满了,它也可以分批计算。
      2. 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
  • 能用,但安包安一半就报错。

你可能感兴趣的:(AI模型,人工智能,计算机视觉)