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.pswp.cn/news/896580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896580.shtml
英文地址,請注明出處:http://en.pswp.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是一個包含音頻/視頻編解碼器的解碼器和編…