stable diffusion(1): webui的本地部署(windows)
一、前言
是的,现在是202308月份了,网上已经有很多打包好的工具,或者直接进一个web就能用SD的功能,但是我们作为程序员,就应该去躺坑,这样做也是为了能够有更多自主操作的空间。
像其他AI一样,先出结果才是王道,所以先不直接搞SD源码或者命令行,而是先用起来,后面再去进一步研究原理,目前最火热的莫不过是这个项目了:
GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI
这篇博客就是本地部署这个项目,搞一下中文插件,然后随便出一张图,当然是有很多坑才会去写博客。
有一个坑一直没过去,就是如果整体环境没完全装好,但是使用我自己提前创建的python虚拟环境来启动SD启动脚本stable-diffusion-webui/webui-user.bat,期间会因为某些原因(比如没梯子东西下载不下来)启动失败,但是第二次启动时就会报没有pip模块的错误,我就只能重新创建python虚拟环境,再装一遍包,这个过程很漫长很浪费时间,所以一定跟着我的脚步,一步不要落下的走,心急吃不了热豆腐(目前经过我大量的失败和探索,终于解决这个问题,见下面第五节)。
二、环境版本库的安装
这个还真挺重要的,最好和项目保持一样的环境,不然出错也不一定网上有支持,这里我首先声明我用的SD版本是目前最新的,git号为50973ec77c297edc3b3c581e871b970dde1af8ba,如果后面过段时间可能会变化,那我们也相应的变化;
我是在搭建环境过程中,发现一个有关于环境版本的一个文件:stable-diffusion-webui/modules/launch_utils.py里面的prepare_environment函数截图如下:
可以看出我们需要安装cuda版本为11.8,torch版本为2.0.1,torchvision版本为0.15.2;
从github的README.md可知,python版本为3.10;
从stable-diffusion-webui/requirements_versions.txt可知项目依赖的python包名和对应版本;
cuda的安装是没啥说的,python安装建议用anaconda,anaconda版本一定要够新保证支持py310,然后就是安装python包,我个人比较喜欢离线下一些包,百度搜pipy然后搜对应包名,下载对应版本即可,然后用bat脚本安装,脚本如下(有一个xformers在requirements_versions.txt没见到,但是在其他地方用到了,还是提前安装,毕竟这个包挺大):
@echo offcall activate sdcd /d G:\python310_win_whl
pip install llvmlite-0.40.1-cp310-cp310-win_amd64.whl
pip install numpy-1.23.5-cp310-cp310-win_amd64.whl
pip install numba-0.57.1-cp310-cp310-win_amd64.whl
pip install pandas-2.0.3-cp310-cp310-win_amd64.whl
pip install Pillow-9.5.0-cp310-cp310-win_amd64.whl
pip install safetensors-0.3.1-cp310-cp310-win_amd64.whl
pip install scipy-1.11.1-cp310-cp310-win_amd64.whl
pip install scikit_image-0.20.0-cp310-cp310-win_amd64.whl
pip install "torch-2.0.1+cu118-cp310-cp310-win_amd64.whl"
pip install "torchvision-0.15.2+cu118-cp310-cp310-win_amd64.whl"
pip install xformers-0.0.20-cp310-cp310-win_amd64.whlcd /d G:\python_whl
pip install GitPython-3.1.30-py3-none-any.whl
pip install accelerate-0.18.0-py3-none-any.whl
pip install basicsr-1.4.2.tar.gz
pip install blendmodes-2022-py3-none-any.whl
pip install clean_fid-0.1.35-py3-none-any.whl
pip install einops-0.4.1-py3-none-any.whl
pip install fastapi-0.94.0-py3-none-any.whl
pip install gfpgan-1.3.8-py3-none-any.whl
pip install gradio-3.32.0-py3-none-any.whl
pip install httpcore-0.15.0-py3-none-any.whl
pip install inflection-0.5.1-py2.py3-none-any.whl
pip install jsonmerge-1.8.0.tar.gz
pip install kornia-0.6.7-py2.py3-none-any.whl
pip install lark-1.1.2-py2.py3-none-any.whl
pip install omegaconf-2.2.3-py3-none-any.whl
pip install open_clip_torch-2.20.0-py3-none-any.whl
pip install piexif-1.1.3-py2.py3-none-any.whl
pip install psutil-5.9.5.tar.gz
pip install pytorch_lightning-1.9.4-py3-none-any.whl
pip install realesrgan-0.3.0-py3-none-any.whl
pip install resize_right-0.0.2-py3-none-any.whl
pip install timm-0.6.7-py3-none-any.whl
pip install tomesd-0.1.2-py3-none-any.whl
pip install torchdiffeq-0.2.3-py3-none-any.whl
pip install torchsde-0.2.5-py3-none-any.whl
pip install transformers-4.25.1-py3-none-any.whlpause
三、修改url地址(梯子强可不改)
还是stable-diffusion-webui/modules/launch_utils.py里面的prepare_environment函数,有很多如下类似的语句:
gfpgan_package = os.environ.get('GFPGAN_PACKAGE',
"https://github.com/TencentARC/GFPGAN/archive/8d2447a2d918f8eba5a4a01463fd48e45126a379.zip")
如果没有梯子,这里很慢或者根本过不去,所以参考 慢网救星!两步操作加快stable diffusion本地部署速度 - 哔哩哔哩 来做修改,首先把这些项目都搞到gitee上面去,最好设置成开源项目,然后launch_utils.py的内容修改如下(其中#注释的就是原始内容,放在这好对比着看):
#gfpgan_package = os.environ.get('GFPGAN_PACKAGE', "https://github.com/TencentARC/GFPGAN/archive/8d2447a2d918f8eba5a4a01463fd48e45126a379.zip")gfpgan_package = os.environ.get('GFPGAN_PACKAGE', "git+https://gitee.com/luo_zhi_cheng/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379")#clip_package = os.environ.get('CLIP_PACKAGE', "https://github.com/openai/CLIP/archive/d50d76daa670286dd6cacf3bcd80b5e4823fc8e1.zip")clip_package = os.environ.get('CLIP_PACKAGE', "git+https://gitee.com/luo_zhi_cheng/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1")#openclip_package = os.environ.get('OPENCLIP_PACKAGE', "https://github.com/mlfoundations/open_clip/archive/bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b.zip")openclip_package = os.environ.get('OPENCLIP_PACKAGE', "git+https://gitee.com/luo_zhi_cheng/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b")#stable_diffusion_repo = os.environ.get('STABLE_DIFFUSION_REPO', "https://github.com/Stability-AI/stablediffusion.git")stable_diffusion_repo = os.environ.get('STABLE_DIFFUSION_REPO', "https://gitee.com/luo_zhi_cheng/stablediffusion")#stable_diffusion_xl_repo = os.environ.get('STABLE_DIFFUSION_XL_REPO', "https://github.com/Stability-AI/generative-models.git")stable_diffusion_xl_repo = os.environ.get('STABLE_DIFFUSION_XL_REPO', "https://gitee.com/luo_zhi_cheng/generative-models")#k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://github.com/crowsonkb/k-diffusion.git')k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://gitee.com/luo_zhi_cheng/k-diffusion')#codeformer_repo = os.environ.get('CODEFORMER_REPO', 'https://github.com/sczhou/CodeFormer.git')codeformer_repo = os.environ.get('CODEFORMER_REPO', 'https://gitee.com/luo_zhi_cheng/CodeFormer')#blip_repo = os.environ.get('BLIP_REPO', 'https://github.com/salesforce/BLIP.git')blip_repo = os.environ.get('BLIP_REPO', 'https://gitee.com/luo_zhi_cheng/BLIP')
四、下载最基础模型
这是启动脚本就会让你下载的模型,因为如果下载过程中失败了,就很痛苦,很多事情需要重来,这里我们也选择手动下载,下载地址为(如果版本更新了,请找到modules\sd_models.py中的model_url = "https://xxx):https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
手动下载好之后,放在stable-diffusion-webui/models/Stable-diffusion目录下即可;
五、修改启动脚本
启动脚本为stable-diffusion-webui/webui-user.bat,参数如下:
set PYTHON=D:\Soft\Anaconda3\envs\sd\python.exe
::set PYTHON=D:\Soft\Anaconda3\envs\sd\Scripts\python.exe
set GIT=
set VENV_DIR=D:\Soft\Anaconda3\envs\sd
set COMMANDLINE_ARGS=--xformers:: --medvram 中等显存模式,牺牲一些速度,4G显存建议使用
:: --lowvram 低显存模式,牺牲大量速度,如果--medvram还是爆显存再用这个
:: --precision full --no-half 不使用半精度模式,GTX 16系显卡需要使用
:: --autolaunch 自动启动,服务启动成功后自动打开浏览器。
其中COMMANDLINE_ARGS可选参数在modules/cmd_args.py,具体参数怎么选可以多百度,这里不同显存的显卡参数都是有差异的,需要因人而异;
这里说一下我一直以来遇到的问题,但是网上我却找不到解决办法,还是我大量测试解决了,就是我每次第一次双击启动脚本stable-diffusion-webui/webui-user.bat能够正常启动,但是第二次启动就会报如下错误:
看到我webui-user.bat里面写了两个"set PYTHON"没,第一次启动时注释掉第二行的"set PYTHON",后面每一次启动都注释掉第一行的"set PYTHON"即可。
六、中文设置
上面全部搞定后,就双击启动脚本stable-diffusion-webui/webui-user.bat,命令行你等它一步步执行,只要没报错,几分钟就会出现一个类似的地址http://127.0.0.1:7860,复制该地址到网页中就打开了stable-diffusion-webui界面,大致界面如下图:
现在设置中文插件,点击Extensions->画面切换后点击Install from URL->填入https://gitee.com/luo_zhi_cheng/stable-diffusion-webui-localization-zh_Hans->点击橙色按钮Install->点击Settings->画面切换后点击Reload UI
重启webui后,点击Settings->画面切换后点击右边的"User interface"->选择Localization那里的"zh-Hans (Testing)"->然后点击橙色按钮"Apply settings"->最后点击Reload UI。
重启webui后,就应该是中文界面了,如下图:
七、第一幅画
第一次画简单一点,在prompt那里随便填一个动物,比如dragon,等待一会(进度条可以看命令行)就出图啦。
相关文章:

stable diffusion(1): webui的本地部署(windows)
一、前言 是的,现在是202308月份了,网上已经有很多打包好的工具,或者直接进一个web就能用SD的功能,但是我们作为程序员,就应该去躺坑,这样做也是为了能够有更多自主操作的空间。 像其他AI一样,…...

(树) 剑指 Offer 36. 二叉搜索树与双向链表 ——【Leetcode每日一题】
❓ 剑指 Offer 36. 二叉搜索树与双向链表 难度:中等 输入一棵二叉搜索树,将该二叉搜索树转换成一个 排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为…...

TypeScript初学
文章转载:https://blog.csdn.net/weixin_46185369/article/details/121512287 写的很详细,适合初学者看看。 一、TypeScript是什么? 1.TypeScript简称:TS,是JavaScript的超集。简单来说就是:JS有的TS都有…...

C/C++预定义宏
MSVC文档: https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?viewmsvc-170 GCC文档: https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html https://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html 参考:…...

原型链污染挖掘(存储XSS)
服务XSS响应 将JSON content-type更改为HTML 在Express应用中使用 JSON内容类型响应 并反映一个JSON: app.use(bodyParser.json({type: application/json})); app.post(/, function(req, res){_.merge({}, req.body);res.send(req.body); }); 在这些情况下&…...

Chrome开发者工具介绍
Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具,它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…...

利用MMPose进行姿态估计(训练、测试全流程)
前言 MMPose是一款基于PyTorch的姿态分析开源工具箱,是OpenMMLab项目成员之一,主要特性: 支持多种人体姿态分析相关任务:2D多人姿态估计、2D手部姿态估计、动物关键点检测等等更高的精度和更快的速度:包括“自顶向下”…...

ROS2 编译含有自定义消息项目报错:msg/detail/header__struct.h: 没有那个文件或目录
项目场景: 当迁移ROS 1 项目到 ROS 2 时,有时候会遇到消息类型的变化和更新,消息类型可能需要进行一些调整以适应新的ROS 2要求。本文将介绍如何处理自定义消息中的Header字段,以确保项目能够顺利地适应ROS 2的消息类型定义。 问…...

线段树思想拆解(下篇)
线段树思想拆解(下篇) 上篇回顾 到这里我们已经处理好了初始化以及添加方法,接下来实现范围的 query 方法 public int query(int queryL, int queryR) {return query(queryL, queryR, 1, orgLength - 1, 1);}到此为止通过借助 sum 数组&…...

Containerd容器镜像管理
1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 1、Containerd镜像管理 1.1 Containerd容器镜像管理命令 docker使用docker images命令管理镜像单机containerd使用ctr images命令管理镜像,con…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前数据吞吐量(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量(C#) Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取…...

Ubuntu服务器版配置wifi
最近把曾经不用的上网本安装了一个Ubuntu-Server版,当成服务器来用,因为家庭网络布线问题,只好用自带的WIFI来连接网络,Server版也没有什么图形化的管理工具,之后手动编辑配置文件了。 Server下面配置起来还是很方便的…...

Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务
Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务 0. 背景1. 设置2. 删除 0. 背景 需要从Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务。 1. 设置 Windows 主机的IP:192.168.31.20 wsl-ubuntu Ubuntu-22.04 的IP:172.29.211.52 &…...

【Spring】(一)Spring设计核心思想
文章目录 一、初识 Spring1.1 什么是 Spring1.2 什么是 容器1.3 什么是 IoC 二、对 IoC 的深入理解2.1 传统程序开发方式存在的问题2.2 控制反转式程序的开发2.3 对比总结 三、对 Spring IoC 的理解四、DI 的概念4.1 什么是 DI4.2 DI 与 IoC的关系 一、初识 Spring 1.1 什么是…...

chrome插件开发实例04-智能收藏夹
目录 功能说明 演示 源码下载 源代码 manifest.json popup.html popup.js background.js 功能说明 基于chrome插件...

iOS技术之 手机系统15.0之后 的 UITableView section header多22像素问题
iOS 15 的 UITableView又新增了一个新属性:sectionHeaderTopPadding 会给每一个section header 增加一个默认高度,当我们 使用 UITableViewStylePlain 初始化 UITableView的时候,就会发现,系统给section header增高了22像素。 解…...

Windows下安装Kafka(图文记录详细步骤)
Windows下安装Kafka Kafka简介一、Kafka安装前提安装Kafka之前,需要安装JDK、Zookeeper、Scala。1.1、JDK安装(version:1.8)1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Zookeeper安装1.2.1、Zookeeper官网下载1.2.…...

linuxARM裸机学习笔记(3)----主频和时钟配置实验
引言:本文主要学习当前linux该如何去配置时钟频率,这也是重中之重。 系统时钟来源: 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源, 24MHz 晶振是 I.MX6U 内核 和其它外设的时钟源 1. 7路PLL时钟源【都是从24MHZ的晶振PLL而来…...

防勒索病毒
随着勒索软件攻击在2023年的激增,网络安全已成为当今最重要的议题之一。根据区块链分析公司Chainaanalysis的最新报告,勒索软件攻击已成为唯一呈增长趋势的基于加密货币的犯罪行为,勒索金额更是比一年前增加了近1.758亿美元,达到4…...

剑指 Offer 53 - II. 0~n-1 中缺失的数字
力扣 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例 2: 输入: [0,1,2,3,4,5…...

vue2和vue3区别
vue2和vue3的区别有以下8点: 1、双向数据绑定原理不同; 2、是否支持碎片; 3、API类型不同; 4、定义数据变量和方法不同; 5、生命周期钩子函数不同; 6、父子传参不同; 7、指令与插槽不同&#x…...

IMV3.0
经历了两个版本,基础内容在前面,可以使用之前的基础环境: v1: https://blog.csdn.net/wtt234/article/details/132139454 v2: https://blog.csdn.net/wtt234/article/details/132144907 一、代码组织结构 二、代码 2.…...

怎么在树莓派环境上搭建web网站,并发布到外网可访问,今天教给大家
怎么在树莓派上搭建web网站,并发布到外网可访问? 文章目录 怎么在树莓派上搭建web网站,并发布到外网可访问?概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpo…...

大文件传输软件| 生命科学中的关键因素
在2023年,生命科学领域以及其先进的科学技术吸引了人们的目光。这些研究背后,很少有人知道的是,其中涉及了大量的研究数据需要实时进行文件传输,以便于研究,合作,分享,分析,临床试验…...

varint编码实现原理
简言 1. varint即 variable int,也就是变长整型,在mysql,levelDB,protobuf中都有使用 2. varint编码的优点是对数值较小的数进行编码后占用字节较少,比如[0-127]只占用1个字节,[128~16383]只占用2个字节。…...

如果新电脑是刚安装的mysql,但是旧电脑迁移过来的文件里面有相关的rails文件,运行rake db:migrate一直报错
$ bundle exec rake db:migrate#运行完命令报错 rake aborted! LoadError: libmysqlclient.so.21: cannot open shared object file: No such file or directory - /home/meiyi/.asdf/installs/ruby/2.6.9/lib/ruby/gems/2.6.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so /home/m…...

ChatGPT已闯入学术界,Elsevier推出AI工具
2022年11月,OpenAI公司发布了ChatGPT,这是迄今为止人工智能在现实世界中最重要的应用之一。 当前,互联网搜索引擎中出现了越来越多的人工智能(AI)聊天机器人,例如谷歌的Bard和微软的Bing,看起来…...

深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现
深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现 RepViT: Revisiting Mobile CNN From ViT Perspective PDF: https://arxiv.org/pdf/2307.09283.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://gith…...

R语言3_安装SeurateData
环境Ubuntu22/20, R4.1 在命令行中键入, apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev # libcairo2-dev :: systemfonts # libgtk :: textshaping进入r语言交互环境,键入, instal…...

详解Gillespie算法:使用Python构建分子化学模拟及其在随机多智能体动力学中的应用
第一部分:Gillespie算法简介 Gillespie算法是一种利用蒙特卡洛抽样模拟化学体系随机动力学行为的方法[3]。它是由Joseph L. Doob提出的,用于生成具有已知反应速率的随机方程组的统计上正确的轨迹(可能的解)[5]。在本文中,我们将详细介绍Gillespie算法的原理,并使用Pytho…...