当前位置: 首页 > article >正文

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路径配置好了,并且环境也配置好了,那么就可以直接启动程序了。

下一篇开始实践

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

相关文章:

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

文章目录 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/gi…...

【数据结构进阶】哈希表

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列&#xff0…...

【蓝桥杯嵌入式】各模块学习总结

系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...

Rust学习总结之-枚举

枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...

Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境

文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统&#xff…...

SLAM算法工程师的技术图谱和学习路径

SLAM(Simultaneous Localization and Mapping)算法工程师是负责开发和实现用于机器人、自动驾驶车辆等领域的SLAM算法的专业人士。下面是SLAM算法工程师需要掌握的基础理论知识: 机器人运动学和动力学:理解机器人在空间中的运动方式和控制方法,包括轮式、蜘蛛腿、飞行器等…...

【第三天】零基础学习量化基础代码分析-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 记录量化基础代码总览引言基本概念量化投资 伪代码示例:量化投资模型框架总结 每日-往期回看 第一天零基础学量化基础知识点总览-持续更新 第二天零基础…...

深入了解 Python 中的 MRO(方法解析顺序)

文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…...

如何防止 Instagram 账号被盗用:安全设置与注意事项

如何防止 Instagram 账号被盗用:安全设置与注意事项 在这个数字化时代,社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而,随着网络犯罪的增加,保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…...

采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程

参考 https://arxiv.org/pdf/2010.02502 一、背景与动机 去噪扩散隐式模型(DDIM) 是对DDPM的改进,旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异,但其采样需迭代数百至数千次,效率较低。DDIM通过以下关键…...

各种类型网络安全竞赛有哪些 网络安全大赛的简称

本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF(capture the flag)是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会,替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993,…...

包子凑数——蓝桥杯真题Python

包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括:1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来,所以有无限多个 运行限制 最大运行时间:1s最大运行内存: 256M 最大公约数 最大公…...

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…...

【前端】简单原生实例合集html,css,js

长期补充,建议关注收藏点赞。 目录 分栏input各种类型iframe表单拖拽 分栏 区分fieldset和framesetframeset是把浏览器窗口分成几个区域,每个区域分别放置一个html文档到对应的frame中,而且这个比例可以按住边栏进行调整col指定左右边栏的宽…...

MySQL--》如何在MySQL中打造高效优化索引

目录 初识索引 索引结构 性能分析 索引使用 最左前缀法则 SQL提示使用 覆盖索引使用 前缀索引使用 索引失效情况 初识索引 索引(index):是帮助MySQL高效获取数据的数据结构(有序),在数据之外数据库系统还维护着满足特定查找算法的数据结构&…...

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…...

HTML转义和反转义工具类

HTML转义和反转义工具类 package com.common.utils;import cn.hutool.http.HTMLFilter; import org.apache.commons.lang3.StringUtils;/*** 转义和反转义工具类** author lxx*/ public class EscapeUtil {public static final String RE_HTML_MARK "(<[^<]*?>…...

网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术

文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …...

DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data

项目地址&#xff1a; https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天 (4/5)&#xff01; ​ ​ 一、背景概述 …...

树莓百度百科更新!宜宾园区业务再添新篇

树莓集团宜宾园区业务不断拓展&#xff0c;主要体现在以下几个方面&#xff1a; 产业布局 -聚焦数字经济核心领域&#xff1a;涵盖软件开发、人工智能、大数据等&#xff0c;吸引众多上下游企业入驻&#xff0c;形成从芯片研发、软件开发到系统集成的完整产业链条。 -推进“双…...

RabbitMQ操作实战

1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang&#xff1a;http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…...

IO 和 NIO 有什么区别?

文章目录 阻塞模式与非阻塞模式数据处理方式通信模型应用场景 阻塞模式与非阻塞模式 IO&#xff1a;是阻塞式的 IO 操作。在传统的 IO 中&#xff0c;当一个线程执行读操作或者写操作时&#xff0c;该线程会被阻塞&#xff0c;直到操作完成。例如&#xff0c;在从文件读取数据…...

OpenWebUI配置异常的外部模型导致页面无法打开

一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置&#xff0c;且默认是打开的&#xff0c;默认情况下&#xff0c;启动后&#xff0c;会不断的去连https://api.openai.com/v1&#xff0c;但是无法连上&#xff0c;会报错&#xff0c;但是不会影响页面&#xff0c;能正常…...

2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程样题模块二

模块二 网络安全事件响应、数字取证调查、应用程序安全 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查。 本次比赛时间为90分钟。 介绍 竞赛有固定的开始和结束时间&#xff0c;参赛队伍必须…...

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了&#xff0c;很多之前的移动端地图应用&#xff0c;纷纷都要求适配鸿蒙Next。作为开发者都清楚&#xff0c;所谓的适配其实都是重新开发&#xff0c;鸿蒙的开发语言和纯前端的Javascript不同&#xff0c;也可以Android原始开发的语言不同。鸿蒙自带的…...

java练习(45)

ps:题目来自力扣 两数相除 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断…...

面试之《前端开发者如何优化页面的加载时间?》

前端开发者可以从多个方面入手优化页面的加载时间&#xff0c;以下是一些常见且有效的方法&#xff1a; 优化资源加载 压缩资源文件&#xff1a;对 HTML、CSS、JavaScript 文件进行压缩&#xff0c;去除不必要的空格、注释等&#xff0c;减小文件体积&#xff0c;加快下载速度…...

部署Flink1.20.1

1、设置环境变量 export JAVA_HOME/cluster/jdk export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarp #export HIVE_HOME/cluster/hive export MYSQL_HOME/cluster/mysql export HADOOP_HOME/cluster/hadoop3 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop …...

iOS自归因详细介绍

iOS自归因详细介绍 自归因&#xff08;Self-Attribution&#xff09;是指应用或广告平台通过分析用户行为数据&#xff0c;确定用户安装应用的来源渠道。在iOS生态中&#xff0c;由于隐私政策的限制&#xff08;如App Tracking Transparency&#xff0c;ATT&#xff09;&#…...

影视后期工具学习之PR

pr剪辑之旅 第一节课 入门基础知识 1.了解影视基础术语 2.PR面板&首选项设置 首选项需要设置的选项: 自动保存: 修剪: 媒体: 媒体缓存: 经典面板设置,可以根据个人喜好做出改变: 3.展示与准备工作 新建序列:1.横板序列 2.竖版序列:</...