个人对Stable Diffusion WEBUI启动过程的一些简单思考

发布于 2023-02-16  2136 次阅读


1、当我点击打开webui-user.bat的时候,这个脚本会首先设置一些参数,例如--api --xformers --no-half-vae,然后转到webui.bat。

2、在webui.bat中,脚本会首先检查python和pip等基础组件的安装情况,当这些组件正常时,它会进入自己创建的python虚拟环境中,并开始在这个虚拟环境中调用python启动launch.py。

为什么需要虚拟环境

之前我们安装python第三方库时,都是直接通过pip install xx的方式进行安装的,这样会使第三方库直接安装到Python系统环境中,同时默认安装的都是最新版本的第三方库
这样安装会存在一个问题:
举例:如果用Django 1.10.x开发了一个网站,同时有一个用Django 0.9开发的旧项目需要维护,但是Django 1.10不再兼容Django 0.9的一些语法。这时候就会碰到一个问题,如何在系统环境中同时拥有Django 1.10和Django 0.9两个不同版本的同一程序呢?
解决方案:我们就可以通过安装虚拟环境来解决这个问题,创建多个虚拟环境实现环境拆分,每个虚拟环境安装不同版本的库,从而满足不同的需求,各个虚拟环境之间相互独立、不对其它环境产生影响
————————————————
版权声明:本文为CSDN博主「温柔且上进c」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45261963/article/details/114324148

3、在launch.py中,程序会检测python版本和程序的hash值,检测与安装各种python依赖包(第一次或者添加了新的启动参数时)。大部分在webui-user.bat中添加的参数会在这里被处理,同时,这一步也会安装插件,最后launch.py会通过start函数转到webui.py,并启动webui。

4、在webui.py中,程序会首先判断是否启用stable diffusion webui的API,之后开始初始化。首先根据扩展列表加载扩展插件。接着会列出web服务器的名称、端口、和是否允许远程访问等参数。随后会调用modules文件夹里的一些程序来进行接下来的操作,大致内容是清理模型,加载几个通用模型(codeformer、gfpgan等)。之后会列出图像放大模型、VAE和Stable Diffusion绘图模型权重(就是几个G大的ckpt和safetensor),然后是文字转义模型。在完成列出模型之后,程序开始加载模型。首先是上次使用的大模型(ckpt或safetensor),接着是VAE和hypernetwork(超网)和embeddings。在这些都加载完成后,最后才会开始加载webui。加载webui则是启动一个web服务器以显示内容,最后会显示一个访问的网址。

最后更新于 2023-02-16