stable diffusion(1): webui的本地部署(windows)

news2024/11/15 17:43:08

一、前言

是的,现在是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 off

call activate sd

cd /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.whl

cd /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.whl

pause

三、修改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

其中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,等待一会(进度条可以看命令行)就出图啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】锁(十三)

🚗MySQL学习第十三站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.引入 锁是计算机协调多个进程或线程并发访问某一共享资源的机制。在数据库中,除传统的计算资源(CPU、 RAM、I/O)的争用以外,数据也是一种供许多用户共享的资…

监控数据的采集方式及原理

1、读取 /proc 目录 /proc 是一个位于内存中的伪文件系统,该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,Linux 操作系统层面的很多监控数据,比如内存数据、网卡流量、机器负载等,都是从 /proc 中获取的…

Mac系统如何修改默认的Java版本

1. 确定Java版本 # 查看当前系统都有哪些Java版本 /usr/libexec/java_home -V | grep jdk# 运行以下命令来查看当前默认的 Java 版本 java -version# 运行以下命令来查找当前默认的 Java 安装路径 /usr/libexec/java_home/usr/libexec/java_home -V | grep jdk java -versio…

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。 具体问题包括: ac仿真和stb仿真的原理、区别,仿真得到的幅频响应是否一致,开关电容放大器只能使用stb仿真吗;放大器稳定性…

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展,AR增强现实技术逐渐走进了我们的生活。加上商贸国际化,远程协同纵深到制造生产的更多环节,研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡,在汽车行业&#…

C# 回文链表

234 回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2: 输入&…

刷题笔记 day6

力扣 57 和为s的两个整数 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;int i 0 , j nums.size()-1;while(i < j){if(nums[i] nums[j] > target){--j;}else if(nums[i] nums[j] < target){i…

MMDeploy安装、python API测试及C++推理

服务器配置如下&#xff1a; Cuda版本&#xff1a;11.1 Cudnn版本&#xff1a;8.2.0 显卡版本&#xff1a;RTX3090 使用转换脚本将.pth模型转换为ONNX格式 python mmdeploy/tools/deploy.py \mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py \mmdetect…

解决Win11右键菜单问题

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 程序日常 ✨特色专栏&…

【企业方案】如何在海量数据中找到热点Key(附JdHotKey解决方案)

文章目录 1. 概述2. 热点Key问题分析3. 解决方案3.2 滑动窗口3.2 京东毫秒级热Key探测框架3.2.1 JdHotKey使用教程3.2.2 JdHotKey常用API 1. 概述 如何在海量数据找到热点Key&#xff1f;&#xff1f;&#xff1f;这时候难免有人回答“这不简单&#xff0c;在同一秒内访问达到…

使用IDEA操作Mysql数据库

idea中自带了关于数据库的连接 首先要确保你的MySQL正在运行中 打开idea找到database&#xff08; view —> Tool Windows —> database&#xff09;&#xff0c;大家也可以定个快捷键&#xff0c;方便以后日常操作 就是这个样子&#xff0c;然后点加号 然后就可以编写执…

Mac提示文件:已损坏,无法打开。你应该把它移到废纸篓

文章目录 一、电脑信息二、打开任何来源设置三、更改应用程序拓展属性 一、电脑信息 我的是新版的Venture 13的系统。UI改的比较多。与之前的配置还是有很大的区别的。 打开下载的软件&#xff0c;显示已经损坏&#xff0c;打不开。抛开软件本身的问题外&#xff0c;一般是Ma…

【C语言学习】C语言的基础数据类型

一、数据类型 1.整型 short(短整型) int&#xff08;整型 long&#xff08;长整型&#xff09; long long&#xff08;长整型&#xff09;2.浮点型 float&#xff08;单精度型&#xff09; double&#xff08;双精度型&#xff09; long double3.字符类型 char…

【MMCV】mmpretrain/mmclassification概览、环境安装与验证

概览 MMPretrain 是一个全新升级的预训练开源算法框架,旨在提供各种强大的预训练主干网络, 并支持了不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和 MMSelfSup,并开发了许多令人兴奋的新功能。 目前,预训练阶段对于视觉识别至关重要,凭借丰富而强…

Android 性能调优之bitmap的优化

背景 Android开发中&#xff0c;加载图片过多、过大很容易引起OutOfMemoryError异常&#xff0c;即我们常见的内存溢出。因为Android对单个应用施加内存限制&#xff0c;默认分配的内存只有几M&#xff08;具体视不同系统而定&#xff09;。而载入的图片如果是JPG之类的压缩格…

Java POI 百万规模数据的导入和导出

目录 1、百万数据导入1.1 需求分析1.2 思路分析1.3 代码实现1.3.1 步骤分析1.3.2 自定义处理器1.3.3 自定义解析1.3.4 测试 2、百万数据导出2.1、概述2.2、解决方案分析2.3、原理分析2.4、百万数据的导出2.4.1、模拟数据2.4.2、思路分析2.4.3、代码实现2.4.4、测试结果 1、百万…

面试题:请说下什么是重绘和重排(回流)?他们的区别是什么?

答&#xff1a; ● 第一次渲染 ○ html结构 解析为 dom树 ○ css样式 解析为 样式规则 ○ dom树 和 样式规则 匹配下&#xff0c;生成渲染树&#xff01; ○ 接下来就是重排&#xff1a;根据渲染树&#xff0c;得到每个盒子的几何信息&#xff08;大小位置&#xff09; ○ 最后…

html纯前端压缩图片神器,js压缩图片保持原有像素,html图片压缩自定义大小,html/js实现图片压缩

前言 纯前端实现&#xff0c;关键使用image和canvas容器 使用jquery和layui方便简写 可自定义压缩质量、缩放大小、图片类型 打开index.html即可使用 效果 实现&#xff1a;https://download.csdn.net/download/weixin_43992507/88158384

springboot访问请求404的原因

是记录&#xff0c;可能出现错误 可能出现的原因 1.你请求的URL路径不对,比如说你请求的路径是/usr/list,GET方法,但是你UserController上面的RequestMapping是这个样子:RequestMapping(“user”)&#xff0c;有可能哈 2.前端的请求时GET方法&#xff0c;后端对应的处理函数的方…

中国篆刻艺术孙溟㠭作品《活着》

人人为生活挣扎着&#xff0c;做着不想做的事&#xff0c;说着不想说的话&#xff0c;为生活低头弯腰委屈求全人生苦多甜少&#xff0c;何时了&#xff01;何时了&#xff01;甜来人生到头了…… 孙溟㠭篆刻作品《活着》 孙溟㠭篆刻作品《活着》 孙溟㠭篆刻作品《活着》 文/…