python 工具链、包管理、Stable Diffusion WebUI 源码结构和部署方法
本文结合 Python 工具链和包管理来介绍 AIGC 框架的 SD WebUI 源码结构和部署方法。
本文主要介绍以下几个部分:
① python工具链:包括anaconda、spyder等,如果想做python,一个强大且方便的开发环境是非常有必要的
Thon包管理器②:一个彻底介绍它包括虚拟环境、包管理、导入系统和动态加载。这部分内容比较复杂
③Python和AIGC:Python是人工智能领域的主流编程语言。本文分析了sd-webui的源码结构及其在多个领域的使用。环境的实现方法
教Python的时候,除了写好代码之外,还要不断地搞乱Python本身。本文提供了足够的实用细节,帮助您通过动手操作功能来深入掌握 Python。
Python工具链
学习一门新语言,首先要有一个开发环境和一个工具链。
Python 入门很简单。例如,我们可以用一行代码编写HelloWorld: python -c 'print("Hello World!")' 。
Python 非常强大。这种力量是基于其大量的应用程序包。如果没有方便的IDE开发环境,繁琐的包管理会让很多初学者望而却步。
笔者在学习Python的过程中,研究过很多IDE。这里有一些更有用的。
Anaconda
Anaconda是一个Python集成开发环境,功能非常强大且易于使用。
最重要的是,Anaconda 集成了数据科学和人工智能领域常用的 IDE。 Anaconda 基本上是一个 IDE 容器,其中包含许多以插件形式存在的开发工具。
Anaconda(官网)是一个可以轻松获取和管理包的发行版,同时可以统一管理环境。 Anaconda 包含 180 多个科学包及其依赖项,包括 conda 和 Python。
安装anaconda后的用户界面:
如何玩Anaconda,请参见本文的介绍:
参考:https://zhuanlan.zhihu.com/p/32925500
Spyder是信息技术领域知名的IDE。早年作者直接将其作为python编辑器来使用。
Vim
在Linux环境下,经常使用vim对文本文件进行一些简单的增删改查操作。它通常由经验丰富的驾驶员使用。建议初学者简单学习:
其他工具如git、vscode等,一般办公/开发机器上都有安装,这里就不介绍了。
Python包管理
虚拟环境
Python虚拟环境主要是为各个Python项目创建一个隔离的环境。每个项目都可以有独立的依赖包环境,项目之间的依赖包互不影响。 。
刚开始学习python时,我从未听说过virtualenv(python2中使用的第三方库),而且我负责的项目规模不大,所以很难使用虚拟环境。 。
随着AIGC的崛起,Python应用的规模不断增长和扩大。这样,当涉及到多人协同开发、容器大规模部署时,用于隔离执行环境的虚拟环境是一个必不可少的概念。因此,在python3.3中,默认自带了venv虚拟环境管理包。
包管理
最新版本的Python3目前默认自带venv。 venv 用于创建虚拟环境,pip 用于管理包。两者一起使用。
conda 是一个集成工具,可以管理虚拟环境和包管理。
问题来了:Python自带了一个虚拟环境管理工具venv,conda也可以管理虚拟环境。当这两个工具并行工作时会发生什么?
笔者在自己的办公机器上使用venv和conda创建了虚拟环境,总结了以下规则:
①Python解释器启动时会自动设置默认环境,sys.path包有一个默认值。小路。
② conda 和 venv 各自管理自己的虚拟环境。 conda和venv可以激活自己创建的虚拟环境,每个只能激活一个。
③ conda 和 venv 激活虚拟环境时,最终将虚拟环境的路径添加到 sys.path 文件中。
④ 可见,当两个虚拟环境混合在一起时,包管理非常复杂,尤其是同一个包在不同虚拟环境中有不同版本时,程序在执行过程中很容易抛出异常。
导入系统
在编写Python代码时,有关包和模块的基本知识点总结如下:
如果你每天简单写代码,以上知识点就足够了,但如果你想深入了解幕后更深层 根据技术原理,Python其实有一个复杂的“导入系统”。
整个导入Python的过程比较复杂。总结起来,主要有三点:
①首先在模块缓存sys.modules中查找。模块加载一次后,会被缓存
② Sys. meta_path 中有多个查找器。使用Finder查找路径
③当Finder找到模块时,会返回加载器。加载器负责加载模块
整个导入系统有三个关键概念:元路径搜索(metapath search)、ModuleSpec对象、加载器,深入理解将有助于你理解整个导入系统总体:
如果你想要详细介绍 imort 系统,以下两个文档值得一读,一个是 python 官方文档,另一个是技术点澄清:
python 官方文档
技术点澄清
动态加载
了解导入系统的技术原理并不是添加信息,而是希望能做点什么。
我们知道,在代码文件中,语句“import pkg”会导致程序在启动时导入pkg。有时我们想在程序运行时动态导入模块。比如我们要实现一套动态加载扩展机制。
怎么做,可以使用动态加载,这里有三种方式:
● 方法一:使用__import__()来实现
● 方法二:import hook,使用path_hook来实现 ● 方法三:导入 hook 是使用 meta_hook 实现的,即自定义 Finder 和 Loader
我们先看第一种方法。与 import 的区别在于 __import__ 是一个函数。因此,__import__的使用更加灵活,常用于与动态加载插件相关的框架中。
接下来的两个方法是 import hook,使用起来比 __import__() 更复杂,但效率更高。
Python 中有两种类型的导入钩子程序:
● 一种是元钩子(元钩子程序),
● 一种是路径钩子(导入路径钩子程序)。
以下是通过添加钩子(path_hook)来更改 sys.meta_path 或 sys.path 来挂钩路径的示例,这会改变导入机制的行为:
以下是 meta 的示例。自动路径 配置Finder和Loader实现远程模块导入:
下面是远程模块导入的性能效果。看看如何用很简单的方式启动http服务器,然后在命令行看看效果:
这里有一些常用的变量来检查当前的包和模块设置:
当下AI蓬勃发展。如果你不用 Python 谈论 AIGC,你看起来就很业余。
最近出现了一款非常流行的AIGC应用程序,名为Stable Diffusion WebUI(以下简称WebUI),它是用Python开发的,可以在本地运行。
我们可以尝试在自己的机器上运行这个程序,这样我们就可以利用上面提到的所有Python知识,通过动手实践来学习Python和AIGC。
Webui 是一个相对较大的应用程序,很多东西可能会混合在一起。来看看作者是怎么搞砸的吧。
WebUI源码分析
从开发的角度来看,如果你想做一个AIGC应用程序,Webui会是一个很好的起点,因为:
(1) 从源码中我们可以了解到: Webui主要由四个部分组成:Web界面、API网关、AI模型和AI功能模块。
(2) 源码提供的非常完整的部署脚本,可以快速部署在单独的 Windows/Linux 机器上
(3) 程序运行后,可以通过浏览器随意使用,甚至可以编辑源代码立即查看编辑效果
(4) 可以使用WebUI作为构建大规模分布式AIGC应用的基准。为此,笔者对其源码进行了分析。
WebUI源码:
https://github.com/AUTOMATIC1111/stable-diffusion-webui
接下来我们大体看一下webui源码,先看看它是如何实现的,所以可以减少部署过程中的摸索时间。
注:作者先实现,再审核源码。
代码结构
整个代码结构主要分为以下几个部分:
✧ 启动流程:这部分主要用脚本实现,主要是检查环境变量、检查系统设置、读取参数等。
✧ 包管理:webui 在启动时使用 venv 创建虚拟环境。启动过程中创建的所有包都放在这个虚拟环境中
✧ Web 界面:使用 Gradio 框架实现,web 实现为 python 框架
✧ API 网关:整个 webui 是一个典型的 Web 应用,使用 fastapi 框架来实现构建http服务
✧ AI 模板:模板目录专门用于存放各种模板文件
✧ AI 功能模块:模块目录 是txt2img、img2img 等各种功能的实现。
启动流程
启动时文件之间的关系如下:
程序设置
启动参数可以在两个地方设置:-主要使用web:设置环境变量
webui .sh:启动时在命令行设置参数
用户界面
使用Gradio直接在python中构建Web演示,您不需要了解js开发。下图中,几行Python代码就可以创建正确的Web界面:
Gradio官网:https://gradio.app/
API网关
Webui的API部分是 FastAPI Web框架已实现,这是一个强大的、现代的Web框架,支持类型提示:
fastap官网:https://fastapi.tiangolo.com/zh/deployment
部署步骤
sd-webui部署大致分为四个步骤:
①搭建python运行环境,最好按照集成开发环境搭建,这样更方便管理下载代码❡❡❙❡❡ sd-webui,然后使用源码安装代码中的安装脚本。第一次安装会下载很多依赖包
③下载模板文件。 sd-webui源码中默认没有模板文件。需要单独下载
④ 通过设置参数启动webui
进行扩展,安装运行过程如下(可以将123容器替换为Windows或linux,123容器本身也是一个linux环境):
Window部署
①下载安装Anaconda(官网)
②下载sd-webui
git地址源码
git地址:https://AUTOFusion.fi/ 1/1TOub。 -webui
将压缩包直接下载到Windows:
③下载模板文件并放置指定目录
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
从 sd-webui 源码中搜索以下路径,将下载的模型放在该目录下:
注意:模型文件有好几G,下载速度较慢
④ 通过指定启动webui参数
在 webui-user.bat 文件目录中找到 sd-webui 源代码,然后运行:
./webui.bat --skip-torch-cuda-test -- precision full - -no-half
成功启动后显示:
注意:整个运行过程比较慢。启动过程大约需要十分钟,会下载很多文件。
Linux部署
① 下载并安装Anaconda
mkdir aigc
c wget https://repo.anaconda.com/archive/Anaconda3 -2023.03-1-Linux-x86_64.sh
chmod +x *.sh
L。 ~~~开始安装,中间有几个手动确认步骤。 ,见以下命令表示安装成功:
② 下载 sd-webui
git 地址源码:https://github.com/AUTOMATIC11111/fusion-webu-i 执行命令:
git Clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
下载模板文件并放置到指定目录❙ https://huggingface.co/CompVis/stable - diffusion-v-1- 4-original
找到下载地址后,在linux上运行:
cd stable-diffusion-webui/models/Stable-diffusion/
wget https://huggingface.co/ CompVis/stable-diffusion-v- 1-4-original/resolve/main/sd-v1-4.ckpt
或
curl -O https://huggingface.co/CompVis/stable-diffusion-v -1-4-original/resolve /main/sd-v1-4.ckpt
注:模型大小为4G,下载需要5分钟左右
④通过设置参数启动webui
cd / root/aigc/stable-diffusion-webui
./webui.sh --listen --port 4567 --skip-torch-cuda-test -- precision full --no-half
123容器部署与源代码安装,整个过程在123容器中极其缓慢,而且由于公司的网络政策,一些依赖包无法下载,必须手动处理,非常不方便
快速部署的方法是:
把机器上的云编译器将运行的webui打包成文件stable-diffusion-webui.tgz并通过windows office机器传输到123容器中,然后解压并直接启动程序。 
使用此方法时,启动webui.sh后,画面如下:
操作过程如下:
查看效果

webui相关参数介绍,摘自互联网介绍如下:
在设置页面,您可以书写文字、选择型号以及设置其他参数。
✓ 需要文字,文字是图像创作的基础。
✓ 您可以选择预定义的模板或上传您自己的模板。
✓ 您还可以选择一些其他参数,如批量大小、生成图像大小等。
以下是一些参数的说明:
● 采样方法(Sampler):此参数允许您选择用于创建图像的采样方法。默认情况下,此参数设置为“Eulea”,但您也可以在“DPM++”之后选择一个新选项,这将创建比默认值更丰富的图像数据。
● 采样步数:此参数允许您指定生成图像的迭代次数。迭代次数越多可以带来更好的图像质量,但完成一代也需要更长的时间。默认值从 50 开始。
● 宽度和高度:此参数允许您设置生成图像的高度和宽度。更大的高度和宽度需要更多的显存计算资源。这里的默认值是512*512。如果我们需要放大图像,我们可以进入发送到高级功能模块并使用增强算法来放大图像。
● 批次数:此参数允许您指定模型对每个生成的图像执行的最大迭代次数。增加该值创建多个镜像也会花费更长的时间(如果需要多个镜像,建议减少镜像创建批次数,而增加一次创建镜像数量)。
● 批次大小:此参数允许您指定一次创建的最大图像数量。如果您的系统资源有限并且需要小批量创建图像,这会很有用。
● Word Correlation(CFG 比例):该参数可以改变图像与提示的一致程度(增大该值将使图像更接近提示,但颜色太高会使图像颜色饱和,值越小,AI绘图给出的空间越大,越有可能产生创意结果(默认为7)
● 种子:此参数允许您指定用于初始化图像生成过程的随机种子。相同的种子值将始终生成相同的图像集,这对于可重复性和一致性很有用。如果将种子值保留为 -1,则每次运行文本图像功能时都会生成随机种子。
● 人脸优化(恢复人脸):可以勾选人脸图像优化,当头像距离较近的角度时,似乎容易出现过拟合和模糊的情况,这个值得勾选,选项,当头像距离较远的角落时
● 平铺:用于创建可以平铺的图像。
● 高分辨率。修复:通过两步过程创建,以较低的分辨率创建图像,然后在不改变构图的情况下增强其细节。选择此部分有两个新参数“缩放潜在”以在潜在模式下缩放图像。另一种方法是创建潜在呈现的完整图像,刷新它,然后将其移回潜在状态。降噪 确定算法保留图像内容的程度。值为 0 时,没有任何变化,而值为 1 时,您会得到不相关的图像;
参考:
https://zhuanlan.zhihu.com/p/609068441
总结
本文介绍了Python源码控制方法、SFP源码控制和分发方法。 WebUI。
文章有足够的功能细节,使本文更易于阅读。学生们按照指示,一边不断地折腾和折磨蟒蛇,一边一步步磨练自己的蟒蛇技能。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。