Stable Diffusion是一种基于扩散过程的生成模型,由Ge et al.在2021年提出。该模型利用了随机变量的稳定分布,通过递归地应用扩散过程来生成高质量的图像。与其他生成模型相比,Stable Diffusion在生成高质量的图像方面具有显着优势。具体而言,该模型所生成的图像具有更好的细节保留能力和更自然的外观。通过对不同扩散时间的研究,Stable Diffusion还可以实现通过调整时间精度来生成图像的分辨率。
在实践中,Stable Diffusion被广泛应用于图像生成、压缩、修复和增强等应用中。此外,该模型还可以与其他深度学习技术结合使用,例如GAN和VAE,以提高生成图像的质量和多样性。总之,Stable Diffusion是一种非常实用且具有潜力的图像生成模型,在未来的研究和应用中将发挥重要作用。
本文主要介绍Stable Diffusion webui环境搭建,后续将陆续介绍参数设置、API搭建、模型基本原理、训练、部署等内容。具体更新可关注文章下方公众号,也可关注本专栏。所有相关文章会在《Python从零开始进行AIGC大模型训练与推理》中进行更新,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。
1 环境搭建
显卡驱动、CUDA、CUDNN、Docker、Python等环境搭建请参考本专栏另一篇博文《Docker AIGC等大模型深度学习环境搭建(完整详细版)》,地址为“https://blog.csdn.net/suiyingy/article/details/130285920”。
1.1 创建Python环境
这里使用conda创建一个Python 3.10环境,命令如下所示。
conda create -n stdf python=3.10 -yconda activate stdf
1.2 stable-diffusion-webui环境安装
stable-diffusion-webui提供了网页前端页面用于Stable Diffusion模型生成图片,其Github官方工程地址为“https://github.com/AUTOMATIC1111/stable-diffusion-webui”。官方工程页面提供了安装步骤,包括一些自动安装脚本。这里主要是手动进行安装,并在Ubuntu 18.04与Ubuntu 20.04上进行验证,其环境安装命令如下所示。手动进行安装的好处在于及时了解报错信息并进行修复。
conda activate stdfgit clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.gitcd stable-diffusion-webuipip install -r requirements_versions.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2 启动stable-diffusion-webui
stable-diffusion-webui的启动命令为“python launch.py”,启动后程序会自动安装和下载所依赖的其它环境。安装过程中出现的问题及解决方式如下所示。运行成功后,我们可通过网页浏览器访问,默认端口号为7860,访问地址为“IP:7860”或“0.0.0.0:7860”或“127.0.0.1:7860”或“localhost:7860”。如果需要通过其它主机进行访问,需要让防火墙允许该端口,命令为“sudo ufw allow 7860”。
运行成功后页面如下。安装过程中出现的问题及解决方式如下所示。
2.1 openclip安装不上
Openclip无法安装原因可能是网络问题导致无法获取到github上相应资源,因而可通过将其替换为gitee上对应资源加以解决。具体修改方式为将launch.py文件中的openclip_package所在行替换为如下内容,位于第234行左右。
openclip_package = os.environ.get('OPENCLIP_PACKAGE', "git+https://gitee.com/ufhy/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b")
2.2 libGL.so
缺乏libGL.so库的报错信息为“ImportError: libGL.so.1: cannot open shared object file: No such file or directory”。该错误在安装opencv是经常会遇到,是系统本身缺乏相应库所导致的。解决方案如下。
apt updateapt install libgl1-mesa-glx -y
2.3 NaN
由于精度问题导致模型出现NaN错误,以致于无法正常生成图片。这个问题在切换到Stable Diffusion v2.1版本模型时可能会出现。具体问题如下所示:
NansException: A tensor with all NaNs was produced in VAE. This could be because there’s not enough precision to represent the picture. Try adding –no-half-vae commandline argument to fix this. Use –disable-nan-check commandline argument to disable this check.
解决方法是将launch.py文件中的commandline_args = os.environ.get(‘COMMANDLINE_ARGS’, “”)替换为如下内容,位于第13行左右。
commandline_args = os.environ.get('COMMANDLINE_ARGS', "--no-half")
3 模型替换
Stable Diffusion模型有多个版本,当前运行launch.py程序时会自动下载v1.5版本模型。Stable Diffusion模型存储在models/Stable-diffusion/下,如下图所示。我们可以去huggingface网站“https://huggingface.co/”上搜索并下载对应模型,然后将模型放到该文件夹下即可。下载时仅需要下载.safetensors后缀的模型文件即可。
例如,stable-diffusion-2-1的下载地址为“https://huggingface.co/stabilityai/stable-diffusion-2-1”,点击页面中的“Files and versions”即可看到对应的模型文件。我们可以只下载其中.safetensors后缀的模型文件,也可以通过Git LFS下载全部内容。Git LFS安装与模型下载请参考《ChatGPT平替-ChatGLM环境搭建与部署运行》,地址为“https://blog.csdn.net/suiyingy/article/details/130370190”。
4 启动端口修改
如上所述,程序默认启动端口为7860,我们可通过命令“python launch.py –port 5800”来指定端口号。修改webui.py文件的第260行也可以改变端口号,如下所示。这里将share直接设置成True后可以允许公网访问。Server_name最好设置成“0.0.0.0”,如果设置成“127.0.0.1”,那么也可能会导致公网无法访问。
app, local_url, share_url = shared.demo.launch(share=True,server_name='0.0.0.0',server_port=5900,
5 后台运行
默认情况下,关闭启动launch.py的终端窗口后,程序会退出。如果希望程序在后台运行,那么可以通过nohup命令实现。
(1)保存日志到nohup.out
“nohup python launch.py &”可使程序保持在后台运行,并且日志信息会保存到nohup.out文件。
(2)不保存日志
不保存日志的后台运行命令为“: nohup python launch.py > /dev/null 2>&1 &”。
(3)关闭进程
如果需要关闭后台进程,可通过“ps -aux | grep launch.py”查询到进程ID,并通过“kill -9 进程ID”来关闭进程。
本文主要介绍Stable Diffusion webui环境搭建,后续将陆续详细介绍Stable Diffusion的参数设置、API搭建、模型基本原理、训练、部署等内容。具体更新可关注文章下方公众号,也可关注本专栏。所有相关文章会在《Python从零开始进行AIGC大模型训练与推理》中进行更新,地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。
GitHub前缀:https://ghproxy.com/launch.py:commandline_args = os.environ.get('COMMANDLINE_ARGS', "--xformers")modules/launch_utils.py:os.environ['COMMANDLINE_ARGS'] = "xformers"python launch.py--server-name 0.0.0.0 --port 8888 --xformers --gradio-queue --enable-insecure-extension-accesshttps://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111.githttps://github.com/Mikubill/sd-webui-controlnet.githttps://github.com/Mikubill/sd-webui-controlnet