StableDiffusion打包 项目迁移 项目分发 1

文章目录

    • SD项目迁移
    • 前置知识
      • webui-user.bat
      • webui.bat
      • launch_utils.py
    • 下一篇开始实践

SD项目迁移

显卡驱动更新:https://www.nvidia.cn/geforce/drivers/

下载安装三个程序:

  1. python3.10.6: https://www.python.org/downloads/release/python-3106/
  2. git: https://git-scm.com/download/win
  3. stable-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_ARGS=call webui.bat

webui.bat

主要功能是根据webui-user.bat,设置上面的四个参数。

  1. 四个变量的预处理;

  2. 创建日志文件,为了后续发生错误输出做准备。

  3. 检测pythonpip是否可用,并升级pip

  4. :start_venv一段的作用是寻找python解释器。Scripts 下没有就自动递归文件夹搜索python.exe的位置。

  5. :activate_venv的作用是利用python.exe激活环境。

  6. 如果ACCELERATE存在就使用accelerate 启动主程序。

  7. 启动主程序,一个是:launch启动主程序,一个是使用:accelerate_launch加速启动。

总结:设置四个变量,找到python.exe之后启动环境。然后根据是否依据ACCELERATE启动主程序。

下面是具体内容

  1. 关闭命令回显
@echo off
  • @ 符号的作用是防止当前这行命令本身被显示出来。
  • echo off 用于关闭后续命令在执行过程中的显示,让脚本执行时只显示命令的输出结果,而不显示命令本身,使输出更加简洁。
  1. 检查并调用 webui.settings.bat 文件
if exist webui.settings.bat (call webui.settings.bat
)
  • if exist 是一个条件判断语句,用于检查当前目录下是否存在 webui.settings.bat 文件。
  • 如果文件存在,则使用 call 命令调用该文件并执行其中的代码,这样可以在主脚本中引入额外的配置或设置。
  1. 设置 PYTHON 变量
if not defined PYTHON (set PYTHON=python)
  • if not defined 用于检查环境变量 PYTHON 是否已经被定义。
  • 如果 PYTHON 未定义,则将其设置为 python,这意味着默认使用系统路径中可找到的 Python 解释器。
  1. 设置 GIT_PYTHON_GIT_EXECUTABLE 变量
if defined GIT (set "GIT_PYTHON_GIT_EXECUTABLE=%GIT%")
  • if defined 用于检查环境变量 GIT 是否已经被定义。
  • 如果 GIT 已定义,则将 GIT_PYTHON_GIT_EXECUTABLE 变量设置为 GIT 的值,这通常用于指定 git 可执行文件的路径。
  1. 设置 VENV_DIR 变量
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
  • if not defined 检查环境变量 VENV_DIR 是否已经被定义。
  • 如果未定义,则将 VENV_DIR 设置为当前批处理文件所在目录下的 venv 文件夹。%~dp0 表示当前批处理文件所在的完整路径。
  1. 设置其他变量
set SD_WEBUI_RESTART=tmp/restart
set ERROR_REPORTING=FALSE
  • set SD_WEBUI_RESTART=tmp/restart:将 SD_WEBUI_RESTART 变量设置为 tmp/restart,可能用于标记重启操作。
  • set ERROR_REPORTING=FALSE:将 ERROR_REPORTING 变量设置为 FALSE,可能用于控制错误报告的开关。
  1. 创建 tmp 文件夹
mkdir tmp 2>NUL
  • mkdir tmp 用于创建一个名为 tmp 的文件夹。
  • 2>NUL 表示将命令执行过程中的错误信息(标准错误输出,文件描述符为 2)重定向到 NUL,即忽略错误信息。如果 tmp 文件夹已经存在,该命令不会报错。
  1. 检查 Python 是否可正常运行
%PYTHON% -c "" >tmp/stdout.txt 2>tmp/stderr.txt
if %ERRORLEVEL% == 0 goto :check_pip
echo Couldn't launch python
goto :show_stdout_stderr
  • %PYTHON% -c "":使用 PYTHON 变量指定的 Python 解释器执行一个空的 Python 命令。
  • >tmp/stdout.txt 2>tmp/stderr.txt:将命令的标准输出(文件描述符为 1)和标准错误输出(文件描述符为 2)分别重定向到 tmp/stdout.txttmp/stderr.txt 文件中。
  • if %ERRORLEVEL% == 0%ERRORLEVEL% 是一个系统变量,用于存储上一条命令的退出状态码。如果退出状态码为 0,表示命令执行成功,跳转到 :check_pip 标签处继续执行。
  • 如果退出状态码不为 0,则输出 "Couldn't launch python" 信息,并跳转到 :show_stdout_stderr 标签处显示错误信息。
  1. 检查 pip 是否可用
: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
  • %PYTHON% -mpip --help:使用 Python 解释器调用 pip 并查看其帮助信息,以此检查 pip 是否可用。
  • 如果 pip 可用(退出状态码为 0),则跳转到 :start_venv 标签处开始创建虚拟环境。
  • 如果 pip 不可用,且 PIP_INSTALLER_LOCATION 变量为空,则跳转到 :show_stdout_stderr 标签处显示错误信息。
  • 如果 PIP_INSTALLER_LOCATION 不为空,则使用 Python 解释器执行该位置的脚本尝试安装 pip
  • 如果安装成功,则跳转到 :start_venv 标签处;否则输出 "Couldn't install pip" 信息,并跳转到 :show_stdout_stderr 标签处显示错误信息。
  1. 创建虚拟环境
:start_venv
if ["%VENV_DIR%"] == ["-"] goto :skip_venv
if ["%SKIP_VENV%"] == ["1"] goto :skip_venvdir "%VENV_DIR%\Scripts\Python.exe" >tmp/stdout.txt 2>tmp/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 2>tmp/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 标签处显示错误信息。
  1. 升级 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 标签处激活虚拟环境;否则输出警告信息。
  1. 激活虚拟环境
:activate_venv
set PYTHON="%VENV_DIR%\Scripts\Python.exe"
call "%VENV_DIR%\Scripts\activate.bat"
echo venv %PYTHON%
  • PYTHON 变量设置为虚拟环境中的 Python 解释器路径。
  • 使用 call 命令调用虚拟环境的激活脚本 activate.bat 来激活虚拟环境。
  • 输出当前使用的虚拟环境 Python 解释器的路径。
  1. 跳过虚拟环境创建
:skip_venv
if [%ACCELERATE%] == ["True"] goto :accelerate
goto :launch
  • 检查 ACCELERATE 变量是否为 True,如果是则跳转到 :accelerate 标签处进行加速配置;否则跳转到 :launch 标签处启动主程序。
  1. 检查 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 启动主程序。
  1. 启动主程序
:launch
%PYTHON% launch.py %*
if EXIST tmp/restart goto :skip_venv
pause
exit /b
  • 使用 PYTHON 变量指定的 Python 解释器执行 launch.py 脚本,并传递所有命令行参数(%*)。
  • 如果 tmp/restart 文件存在,则跳转到 :skip_venv 标签处重新启动;否则暂停程序并等待用户输入,最后退出当前批处理脚本。
  1. 使用 accelerate 启动主程序
:accelerate_launch
echo Accelerating
%ACCELERATE% launch --num_cpu_threads_per_process=6 launch.py
if EXIST tmp/restart goto :skip_venv
pause
exit /b
  • 输出加速启动的信息。
  • 使用 accelerate 工具启动 launch.py 脚本,并设置每个进程的 CPU 线程数为 6。
  • 如果 tmp/restart 文件存在,则跳转到 :skip_venv 标签处重新启动;否则暂停程序并等待用户输入,最后退出当前批处理脚本。
  1. 显示标准输出和错误信息
: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路径配置好了,并且环境也配置好了,那么就可以直接启动程序了。

下一篇开始实践

我结合前面的本地部署内容,开始试试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode2414:最长的字母序连续子字符串的长度

题目描述: 字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说,字符串 "abcdefghijklmnopqrstuvwxyz" 的任意子字符串都是 字母序连续字符串 。 例如,"abc" 是一个字母序连续字符串,而 "ac…

FFmpeg+vvenc实现H.266的视频编解码教程

Linux系统:FFmpegvvenc实现H.266的视频编解码教程(视频压缩) 关键网址 ffmpeg目前支持libvvenc,因此配置好libvvenc只会在一些make、sudo make install命令时遇到问题,例如默认安装或配置路径指定错误、ffmpeg版本、v…

vscode使用豆包MARSCode----集成doubao1.5 DeepSeekR1 DeepseekV3模型的ai编程插件

引入扩展 打开VSCode扩展窗口,在搜索窗口搜索MarsCode,找到MarsCode 插件单击「install」,完成安装,登录即可使用MarsCode 编程助手。 主要功能 主要快捷键 / explain 解释项目代码,AI 返回的内容有结构分类&#…

uni小程序wx.switchTab有时候跳转错误tab问题,解决办法

在一个子页面里面使用uni.switchTab或者wx.switchTab跳转到tab菜单的时候,先发送了一个请求,然后执行跳转到tab菜单,但是这个时候,出错了........也是非常的奇怪,不加请求就没问题......但是业务逻辑就是要先执行某个请…

软件工程---需求工程

软件需求工程师发现、获取、组织、分析、编写和管理需求的系统方法,以使客户和项目组之间达成共识。 需求工程共包含五个步骤: 需求获取:对业务问题分析,与项目干系人沟通,以理解系统的目标、期望和约束,…

React七Formik

Formik是一个专为React构建的开源表单库。它提供了一个易于使用的API来处理表单状态管理,表单验证以及表单提交。Formik支持React中的所有表单元素和事件,可以很好地与React生态系统中的其他库集成。同时,Formik还提供了一些高级功能&#xf…

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型,有些能生成PPT内容; 有些能生成PPT,但下载需要付费; 目前只有Kimi生成的PPT,能选择模板、能在线编辑、能下载,关键全部免费! 一、用kimi生成PP…

编写一个程序,计算并输出1到100的和(Python版)

编写一个程序,计算并输出1到100的和 以下是两种计算1到100之和的方法: 方法一:循环累加法(适合编程练习) total 0 for num in range(1, 101):total num print("1到100的和为:", total)原理:通…

MyBatis-Plus 自动填充功能

MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…

final 关键字在不同上下文中的用法及其名称

1. final 变量 名称:final 变量(常量)。 作用:一旦赋值后,值不能被修改。 分类: final 实例变量:必须在声明时或构造函数中初始化。 final 静态变量:必须在声明时或静态代码块中初…

springboot项目部署脚本

Springboot部署脚本 该脚本可用于jenkins自动执行,具有以下功能 适配所有以内嵌tomcat容器springboot项目jar包可根据参数选择环境,基于profiles可自动识别并关闭已存在进程第一个参数是指定jar包所在绝对路径(该路径下必须有且仅有一个.jar文件) 第二…

向量数据库milvus部署

官方文档 Milvus vector database documentationRun Milvus in Docker (Linux) | Milvus DocumentationMilvus vector database documentation 按部署比较简单,这里说一下遇到的问题 一:Docker Compose 方式部署 1、镜像无法拉取,(docker.io被禁) …

【密码学实战】Java 实现 SM2 国密算法(签名带id、验签及 C1C3C2 加密解密)

前言 SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准(GB/T 32918),属于国密算法体系。与RSA和ECDSA相比,SM2在相同安全强度下密钥更短、计算效率更高。本文将介绍如何在Java中实现SM2的密钥生成、数字签名、验签、加密及…

网络原理---TCP/IP

活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧&#xff01…

【大语言模型笔记进阶一步】提示语设计学习笔记,跳出框架思维,自己构建提示词

一、大语言模型应用场景 1. 文本生成 文本创作: 诗歌故事,剧本,推文帖子 摘要与改写: 长文本摘要与简化,多语言翻译与本地化 结构化生成: 表格,根据需求生成代码片段,API文档生成…

Unity XR-XR Interaction Toolkit开发使用方法(十一)组件介绍(XR Interactable)

目录 一、插件介绍 二、主要组件 XR Interaction Manager XR Controller XR Interactor XR Direct Interactor XR Ray Interactor XR Socket Interactor XR Gaze Interactor XR Interaction Group 三、XR Interactable 1、组件介绍 2、核心功能与特点 交互类型支…

Spring Boot spring-boot-maven-plugin 参数配置详解

一 spring-boot-maven-plugin 插件的5个Goals spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin;重新打包存在的jar或者war包从而使他们可以在命令行使用…

eMMC安全简介

1. 引言 术语“信息安全”涵盖多种不同的设计特性。一般而言, 信息安全是指通过实践防止信息遭受未经授权的访问、使用、披露、中断、篡改、检查、记录或销毁。 信息安全的三大核心目标为 机密性(Confidentiality)、完整性(Integr…

Python 数据结构 2.时间复杂度和空间复杂度

Life is a journey —— 25.2.28 一、引例:穷举法 1.单层循环 所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了的意思。 例:给定n(n ≤ 1000)个元素ai,求其中奇数有多少个 判断一…

FFmpeg-chapter3-读取视频流(原理篇)

ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…