网站注销,网站运营者,国内大型的网站建设,正规专业的网站建设公文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移
显卡驱动更新#xff1a;https://www.nvidia.cn/geforce/drivers/
下载安装三个程序#xff1a;
python3.10.6: https://www.python.org/downloads/release/python-3106/gi… 文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移
显卡驱动更新https://www.nvidia.cn/geforce/drivers/
下载安装三个程序
python3.10.6: https://www.python.org/downloads/release/python-3106/git: https://git-scm.com/download/winstable-diffusion webui: https://github.com/AUTOMATIC1111/stable-diffusion-webui
快速启动 前置知识
bat运行脚本看懂即可。
webui-user.bat
首先运行webui-user.bat但是里面的路径设置是空的如下。
这就意味着要么路径有一个默认值这么在后面设置了,我估计是有个if判断该值是否为空的代码。
如果我们已经配好了环境和参数那么直接填入即可。
echo offset PYTHON
set GIT
set VENV_DIR
set COMMANDLINE_ARGScall webui.batwebui.bat
主要功能是根据webui-user.bat设置上面的四个参数。 四个变量的预处理 创建日志文件为了后续发生错误输出做准备。 检测python和pip是否可用并升级pip。 :start_venv一段的作用是寻找python解释器。Scripts 下没有就自动递归文件夹搜索python.exe的位置。 :activate_venv的作用是利用python.exe激活环境。 如果ACCELERATE存在就使用accelerate 启动主程序。 启动主程序一个是:launch启动主程序一个是使用:accelerate_launch加速启动。
总结设置四个变量找到python.exe之后启动环境。然后根据是否依据ACCELERATE启动主程序。
下面是具体内容
关闭命令回显
echo off符号的作用是防止当前这行命令本身被显示出来。echo off 用于关闭后续命令在执行过程中的显示让脚本执行时只显示命令的输出结果而不显示命令本身使输出更加简洁。
检查并调用 webui.settings.bat 文件
if exist webui.settings.bat (call webui.settings.bat
)if exist 是一个条件判断语句用于检查当前目录下是否存在 webui.settings.bat 文件。如果文件存在则使用 call 命令调用该文件并执行其中的代码这样可以在主脚本中引入额外的配置或设置。
设置 PYTHON 变量
if not defined PYTHON (set PYTHONpython)if not defined 用于检查环境变量 PYTHON 是否已经被定义。如果 PYTHON 未定义则将其设置为 python这意味着默认使用系统路径中可找到的 Python 解释器。
设置 GIT_PYTHON_GIT_EXECUTABLE 变量
if defined GIT (set GIT_PYTHON_GIT_EXECUTABLE%GIT%)if defined 用于检查环境变量 GIT 是否已经被定义。如果 GIT 已定义则将 GIT_PYTHON_GIT_EXECUTABLE 变量设置为 GIT 的值这通常用于指定 git 可执行文件的路径。
设置 VENV_DIR 变量
if not defined VENV_DIR (set VENV_DIR%~dp0%venv)if not defined 检查环境变量 VENV_DIR 是否已经被定义。如果未定义则将 VENV_DIR 设置为当前批处理文件所在目录下的 venv 文件夹。%~dp0 表示当前批处理文件所在的完整路径。
设置其他变量
set SD_WEBUI_RESTARTtmp/restart
set ERROR_REPORTINGFALSEset SD_WEBUI_RESTARTtmp/restart将 SD_WEBUI_RESTART 变量设置为 tmp/restart可能用于标记重启操作。set ERROR_REPORTINGFALSE将 ERROR_REPORTING 变量设置为 FALSE可能用于控制错误报告的开关。
创建 tmp 文件夹
mkdir tmp 2NULmkdir tmp 用于创建一个名为 tmp 的文件夹。2NUL 表示将命令执行过程中的错误信息标准错误输出文件描述符为 2重定向到 NUL即忽略错误信息。如果 tmp 文件夹已经存在该命令不会报错。
检查 Python 是否可正常运行
%PYTHON% -c tmp/stdout.txt 2tmp/stderr.txt
if %ERRORLEVEL% 0 goto :check_pip
echo Couldnt launch python
goto :show_stdout_stderr%PYTHON% -c 使用 PYTHON 变量指定的 Python 解释器执行一个空的 Python 命令。tmp/stdout.txt 2tmp/stderr.txt将命令的标准输出文件描述符为 1和标准错误输出文件描述符为 2分别重定向到 tmp/stdout.txt 和 tmp/stderr.txt 文件中。if %ERRORLEVEL% 0%ERRORLEVEL% 是一个系统变量用于存储上一条命令的退出状态码。如果退出状态码为 0表示命令执行成功跳转到 :check_pip 标签处继续执行。如果退出状态码不为 0则输出 Couldnt launch python 信息并跳转到 :show_stdout_stderr 标签处显示错误信息。
检查 pip 是否可用
:check_pip
%PYTHON% -mpip --help tmp/stdout.txt 2tmp/stderr.txt
if %ERRORLEVEL% 0 goto :start_venv
if %PIP_INSTALLER_LOCATION% goto :show_stdout_stderr
%PYTHON% %PIP_INSTALLER_LOCATION% tmp/stdout.txt 2tmp/stderr.txt
if %ERRORLEVEL% 0 goto :start_venv
echo Couldnt install pip
goto :show_stdout_stderr%PYTHON% -mpip --help使用 Python 解释器调用 pip 并查看其帮助信息以此检查 pip 是否可用。如果 pip 可用退出状态码为 0则跳转到 :start_venv 标签处开始创建虚拟环境。如果 pip 不可用且 PIP_INSTALLER_LOCATION 变量为空则跳转到 :show_stdout_stderr 标签处显示错误信息。如果 PIP_INSTALLER_LOCATION 不为空则使用 Python 解释器执行该位置的脚本尝试安装 pip。如果安装成功则跳转到 :start_venv 标签处否则输出 Couldnt install pip 信息并跳转到 :show_stdout_stderr 标签处显示错误信息。
创建虚拟环境
:start_venv
if [%VENV_DIR%] [-] goto :skip_venv
if [%SKIP_VENV%] [1] goto :skip_venvdir %VENV_DIR%\Scripts\Python.exe tmp/stdout.txt 2tmp/stderr.txt
if %ERRORLEVEL% 0 goto :activate_venvfor /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 2tmp/stderr.txt
if %ERRORLEVEL% 0 goto :upgrade_pip
echo Unable to create venv in directory %VENV_DIR%
goto :show_stdout_stderr首先检查 VENV_DIR 是否为 - 或者 SKIP_VENV 是否为 1如果满足条件则跳转到 :skip_venv 标签处跳过虚拟环境的创建。然后检查虚拟环境目录下的 Scripts\Python.exe 文件是否存在如果存在则跳转到 :activate_venv 标签处激活虚拟环境。如果虚拟环境不存在则使用 for /f 循环获取 Python 解释器的完整路径并将其存储在 PYTHON_FULLNAME 变量中。接着使用该 Python 解释器创建虚拟环境如果创建成功则跳转到 :upgrade_pip 标签处升级 pip否则输出错误信息并跳转到 :show_stdout_stderr 标签处显示错误信息。
升级 pip
:upgrade_pip
%VENV_DIR%\Scripts\Python.exe -m pip install --upgrade pip
if %ERRORLEVEL% 0 goto :activate_venv
echo Warning: Failed to upgrade PIP version使用虚拟环境中的 Python 解释器调用 pip 并尝试升级到最新版本。如果升级成功则跳转到 :activate_venv 标签处激活虚拟环境否则输出警告信息。
激活虚拟环境
:activate_venv
set PYTHON%VENV_DIR%\Scripts\Python.exe
call %VENV_DIR%\Scripts\activate.bat
echo venv %PYTHON%将 PYTHON 变量设置为虚拟环境中的 Python 解释器路径。使用 call 命令调用虚拟环境的激活脚本 activate.bat 来激活虚拟环境。输出当前使用的虚拟环境 Python 解释器的路径。
跳过虚拟环境创建
:skip_venv
if [%ACCELERATE%] [True] goto :accelerate
goto :launch检查 ACCELERATE 变量是否为 True如果是则跳转到 :accelerate 标签处进行加速配置否则跳转到 :launch 标签处启动主程序。
检查 accelerate 是否可用
:accelerate
echo Checking for accelerate
set ACCELERATE%VENV_DIR%\Scripts\accelerate.exe
if EXIST %ACCELERATE% goto :accelerate_launch输出检查 accelerate 的信息。将 ACCELERATE 变量设置为虚拟环境中 accelerate.exe 的路径。如果该文件存在则跳转到 :accelerate_launch 标签处使用 accelerate 启动主程序。
启动主程序
:launch
%PYTHON% launch.py %*
if EXIST tmp/restart goto :skip_venv
pause
exit /b使用 PYTHON 变量指定的 Python 解释器执行 launch.py 脚本并传递所有命令行参数%*。如果 tmp/restart 文件存在则跳转到 :skip_venv 标签处重新启动否则暂停程序并等待用户输入最后退出当前批处理脚本。
使用 accelerate 启动主程序
:accelerate_launch
echo Accelerating
%ACCELERATE% launch --num_cpu_threads_per_process6 launch.py
if EXIST tmp/restart goto :skip_venv
pause
exit /b输出加速启动的信息。使用 accelerate 工具启动 launch.py 脚本并设置每个进程的 CPU 线程数为 6。如果 tmp/restart 文件存在则跳转到 :skip_venv 标签处重新启动否则暂停程序并等待用户输入最后退出当前批处理脚本。
显示标准输出和错误信息
:show_stdout_stderrecho.
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:endofscriptecho.
echo Launch unsuccessful. Exiting.
pause首先输出上一条命令的退出状态码。检查 tmp/stdout.txt 文件的大小如果不为 0则输出 stdout: 并显示该文件的内容。接着检查 tmp/stderr.txt 文件的大小如果不为 0则输出 stderr: 并显示该文件的内容。最后输出启动失败的信息暂停程序并等待用户输入。
launch_utils.py
首先是运行webui-user.bat然后运行webui.bat最后使用launch_utils.py启动程序。
launch_utils.py文件其实是不用动的。
我粗看了一下如果webui-user.bat路径配置好了并且环境也配置好了那么就可以直接启动程序了。
下一篇开始实践
我结合前面的本地部署内容开始试试