【保姆级教程】Linux上部署Stable Diffusion WebUI和LoRA训练,拥有你的专属图片生成模型

news2024/10/5 13:35:47

0 写在前面

Stable Diffusion 是当前最火热的图像生成模型之一,目前已经广泛应用于艺术创
作、游戏开发、设计模拟等领域,因其开源生态和易于使用而受到创作者的广泛关注,相比 Midjourney 而言,其最大的优势是完全免费,且拥有庞大的社区资源。

如果需要本地部署 Stable Diffusion,首选 Stable Diffusion Webui。不过本地部署
对设备硬件要求还是比较高的,通常需要至少 4G 显存,有关如何在 Windows 上使用,社区已经有了非常不错的一键启动脚本。

如果需要一个稳定的服务,还是建议将其部署到云服务器上。
本文主要记录一下如何在 Linux 上部署 Stable Diffusion Webui,在把所有的坑都踩了一遍之后,希望对有类似需求的小伙伴有所帮助。

1 Stable Diffusion

1.1 什么是 Stable Diffusion

Stable Diffusion 是一种生成式模型,所谓生成式模型也就是能够生成和训练集分布非常相似的输出结果,主流的生成式模型包含如下几类:

Stable Diffusion 是 Diffusion Model 的改进版,完整的Stable Diffusion网络结构应该包含三个部分:

  • 自动编码器:
    • 将图像从像素空间(Pixel Space)压缩到潜在空间(Latent Space)
    • 将潜在表示转换成最终图像
  • 条件生成器:
    • 生成去噪过程中依赖的条件(Conditioning),条件包括文字和图像,对文字而言,最常见的是CLIP text encoder ,用于编码文字信息,控制生成对应文字描述的图像。
  • 噪声估计模型UNet:
    • 针对潜在空间的图片做扩散(Diffusion Process):添加噪声
    • 编码用户输入的 prompt
    • 预测噪声,然后依据「去噪条件」去噪,生成图片的潜在表示

1.2 什么是 LoRA

LoRA,即Low-Rank Adaptation,是一种轻量级的大模型微调方法,文本生成模型GPT 和 图像生成模型Stable-Diffusion,都可以采用LoRA 进行轻量级微调。它通过在模型的特定部分引入低秩结构来进行微调,从而减少了计算资源的需求。LoRA训练可以在保持模型原有性能的同时,对模型进行个性化调整,使其适应特定的应用场景。

LoRA的思想很简单,在原始模型旁边增加一个旁路,做一个降维再升维的操作。训练的时候固定原始模型的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与原始模型的参数叠加。

2 Stable Diffusion WebUI

Stable Diffusion WebUI 为 Stable Diffusion 模型定制了友好的网页界面,基于 Gradio 实现,它让用户可以轻松地访问和使用 Stable Diffusion 的图像生成能力。有关 Windows 下如何使用,建议直接使用 B 站 @秋葉aaaki 的免费启动器和安装包。
这里主要介绍下 Linux 下如何安装和部署。

2.1 WebUI 下载和安装

推荐直接从webui源码安装,打开终端,从 github 上下载:

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

一键启动脚本,会默认配置好项目环境,并安装好项目依赖包:

./webui.sh

不过通常会出现各种各种的问题,主要原因是国内网络问题,其中最频繁遇到的问题有:

  1. 依赖库安装失败

主要是因为访问 github 失败,在 launch_utils.py 中找到prepare_environment()函数,将其中涉及到 github 仓库的依赖,全部添加 https://ghproxy.com/ 镜像,如下图所示:

  1. 下载依赖的模型失败

主要是因为访问 HuggingFace 网站失败,Stable Diffusion 依赖的很多模型权重文件托管在 HuggingFace 网站上,默认会自动从 HuggingFace 网站上下载到本地,因此网络访问失败到导致模型加载不成功,这里推荐使用国内的镜像网站:https://hf-mirror.com,只需要在终端中临时添加环境变量,再重新启动webui.sh就可以了:

export HF_ENDPOINT=https://hf-mirror.com # 引入镜像地址,否则模型下载不成功
./webui.sh

终端出现如下提示,说明启动成功,这时你在本地浏览器打开http://127.0.0.1:7860,即可看到 WebUI 界面。


如果你是部署在云端,如果有公网 IP,需要将127.0.0.1修改为公网 IP 地址,如果是部署在内网或者 Linux 虚拟机上,则可以通过端口映射实现在本地浏览器访问,关于如何进行端口隐射,可以查看笔者之前的分享如何在 Windows 上实现和 Linux 子系统的端口映射。

浏览器打开 WebUI 界面成功后,此时是没有加载任何模型权重的,这里我们需要先搞清楚常见的模型类型。

2.2 模型类型介绍

Stable Diffusion 中用到的模型类型,可以粗略分为:大模型(基座模型,底模) 和 用于微调的小模型。

2.2.1 大模型(基座模型,底模)

大模型特指标准的 latent-diffusion 模型,拥有完整的 TextEncoder、U-Net 和 VAE。官方提供的大模型包括 sd1.5 sd2 sdxl等等,而社区提供的大模型都是在此基础上微调得到的。值得一提的是,如果发现输出的图片发灰,通常就是因为这里的 VAE 未成功使用,是由于部分合并模型导致的 VAE 不可用,需要手动添加 VAE 使用。

模型的格式,也就是后缀名,你会看到有很多种,其中 pt pth ckpt都是pytorch保存的模型格式,safetensors 是没有安全风险的文件格式,但权重内容和前面是完全一样的。

大模型的存放路径在:models/stable-diffusion,一般大小在 2G-7G 左右。目前比较常用的大模型有:

  • 官方模型:sd1.5 sd2 sdxl等
  • 二次元模型:anything等
  • 真实系模型:LOFI等
  • 2.5D 模型:国风3等

2.2.2 小模型

用于微调的小模型通常分为以下几种:

  • Lora:放在models/Lora。大小一般在 100MB 级别。点击一个模型以后会向提示词列表添加类似这么一个tag, lora:模型名:权重 ,也可以直接用这个tag调用lora模型。
  • Embedding (Textual inversion) :放在models/embedding。常见格式为 pt、png图片、webp图片。大小一般在 KB 级别。生成图片的时候需要带上 文件名 作为 tag。
  • VAE: 放在models/VAE。
  • Hypernetwork:一般没人用了

2.3 模型权重获取

模型权重的获取有多种方式,比较推荐的有如下几种:

2.3.1 开源社区下载

目前托管 SD 模型的开源社区有很多,这里主要推荐两个:

  • 一个是国外的:https://civitai.com/,国内访问需要借助梯子。点击导航栏中的Models可以查看所有模型,可以关键字搜索,也可以使用右侧的Filters只查找需要的模型:Checkpoint: 特指大模型,而 LoRA 则是社区开发者微调的小模型,下文笔者也将带领大家微调自己的 LORA 小模型。

找到感兴趣的模型进去以后,右侧可以看到模型类型等信息,图片下方的感叹号可以查看提示词,右上角可以直接点击 下载,或者右键选择复制链接,然后在终端 wget 下载。

  • 一个是国内的:https://www.liblib.art/,不需要梯子就可以访问,基本也可以满足绝大部分人的需求,和 civitai 的用法基本一致,就不再赘述了。

2.3.2 Model Scope(国内)

Model Scope 模型库由阿里提供,对标国外的 Hugging Face,托管了各类机器学习模型,比如我们需要下载 stable-diffusion-v1.5,可以直接在模型库搜索:

点击进去后,找到模型文件,选择v1-5-pruned-emaonly.ckpt


右上角有 下载,右键选择复制链接,然后在终端输入:

# -O 代表存放的模型名称
wget -O v1-5-pruned-emaonly.ckpt 'https://modelscope.cn/api/v1/models/AI-ModelScope/stable-diffusion-v
1.5-no-safetensor/repo?Revision=master&FilePath=v1-5-pruned-emaonly.ckpt'

注意:终端中一定要对复制的链接加双引号,否则不会成功下载。

2.3.3 Hugging Face(国外)

Hugging Face 国内访问需要梯子,如果能够访问的话,和 Model Scope 的用法基本一致,这里就不在赘述了。

2.4 WebUI 使用

2.4.1 模型权重准备

模型权重下载好后,需要将模型放到对应的文件夹中,这里最常用的是:大模型 和 微调的LoRA 模型,分别放在 models/stable-diffusionmodels/Lora下,启动后,WebUI 会自动从这几个文件夹中找到对应的模型。

2.4.2 前端界面使用

启动成功后,选择对应的大模型,开始愉快地画图吧!关于界面上这些功能以及更多插件,笔者再更一篇文章详细聊聊。

3 LoRA模型训练实战

大模型无法实现风格和人物的定制化,我们可以通过下载开源社区的 LoRA 模型实现想要的风格,那么开源社区的 LoRA 模型是怎么炼出来的?

这里笔者打算以一个简单的案例带领大家训练自己的 LoRA 模型。

3.1 下载 lora-scripts

打开终端,git 下载 lora-scripts 仓库:

git clone --recurse-submodules https://github.com/Akegarasu/lora-scripts

注意:要加上--recurse-submodules,因为该仓库还依赖了几个子模块仓库,如果忘记了加 --recurse-submodules, 可以继续使用如下命令重新下载子模块仓库:

git submodule update --init --recursive

接下来,一键执行环境准备:

install.bash

3.2 准备训练数据集

首先,需要搜集几张带有特定风格的图片数据,保存在同一个文件夹下。

其次,需要为每张图像生成对应的描述,这一步可以通过 WebUI 实现,找到 Extras 的 tab,选择 Batch from Directory ,将你的文件夹名称输入,同时指定输出文件夹,注意we文件夹名称遵循如下格式: xxx/10_xxx,子目录需要以数字开头。在最下方找到 Caption 选项,选择 BLIP 图片描述生成模型,右上方点击 Generate,即可自动生成对应的图片描述。

生成后的文件夹如下图所示,每张图片对应一个文本描述:

3.3 LoRA训练

首先需要修改训练脚本,打开 train.sh,主要修改以下几个地方:

  • pretrained_model # base model path | 底模路径
  • train_data_dir # 训练集路径,特别需要注意,如下图所示
  • max_train_epoches # 训练轮数

完成后,一键启动训练:

bash train.sh

生成的模型文件默认保存在outputs/文件夹下,把它 copy 到 stable-diffusion-webui的 models/Lora下,就可以直接使用这个你训好的 LoRA 模型了。

4 总结

至此,我们完成了在Linux系统上部署Stable Diffusion WebUI和进行LoRA模型训练的全过程。希望这篇文章能让你在部署Stable Diffusion WebUI的路上少踩一些坑。

感谢关注~

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

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

相关文章

笔记1--Llama 3 超级课堂 | Llama3概述与演进历程

1、Llama 3概述 https://github.com/SmartFlowAI/Llama3-Tutorial.git 【Llama 3 五一超级课堂 | Llama3概述与演进历程】 2、Llama 3 改进点 【最新【大模型微调】大模型llama3技术全面解析 大模型应用部署 据说llama3不满足scaling law?】…

使用node调用chrome(基于selenium-webdriver包)

下载测试版chrome和chromedriver https://googlechromelabs.github.io/chrome-for-testing/ 把chromedriver复制到chrome的文件里 设置环境变量 编写代码 const { Builder, Browser, By, Key, until } require(selenium-webdriver) const puppeteer require(puppeteer)//查…

Modelsim自动仿真平台的搭建

Modelsim自动仿真平台的搭建 如果要搭建自动仿真平台脚本那就需要更改下面3个文件。run_simulation.bat、complie.do和wave.do文件。注:前提是安装了modulsim并且配置好了环境变量,这里不过多介绍。 一、下面是run_simulation.bat文件的内容 : 注释的…

企业计算机服务器中了devicdata勒索病毒怎么处理,devicdata解密数据恢复

网络技术的不断应用与发展,加快了社会进步的步伐,越来越多的企业利用网络开展各项工作业务,网络为企业提供了极大便利,大大提高了生产效率,网络数据安全问题成为了众多企业关心的主要话题。近日,云天数据恢…

C# Web控件与数据感应之 CheckBoxList 类

目录 关于数据感应 CheckBoxList 类 范例运行环境 数据源表设计 角色字典表 用户角色表 AutoValueDBList 方法 原理 设计 实现 调用示例 初始化数据 启动查询模式 使用保存模式 小结 关于数据感应 数据感应也即数据捆绑,是一种动态的,We…

11个2024年热门的AI编码助手

大家好,人工智能(AI)领域的大型语言模型(LLMs)已经逐渐发展成熟,并且深入到了我们日常的工作当中。在众多AI应用中,编码助手尤为突出,是开发人员编写更高效、准确无误代码的必备辅助…

C#创建obj三维模型文件

介绍 使用开源库创建obj三维模型文件。 开源库地址:https://github.com/JeremyAnsel/JeremyAnsel.Media.WavefrontObj 相关API地址:https://jeremyansel.github.io/JeremyAnsel.Media.WavefrontObj/api/JeremyAnsel.Media.WavefrontObj.ObjFile.html …

【文献阅读】 The ITS Irregular Terrain Model(Longely-Rice模型)海上电波传播模型

前言 因为最近在做海上通信的一个项目,所以需要对海上的信道进行建模,所以才阅读到了这一篇文献,下面的内容大部分是我的个人理解,如有错误,请见谅。欢迎在评论区和我一起讨论。 Longely-Rice模型介绍 频率介于 20 …

Redis协议与异步方式

Rredis Pipeline redis pipeline 是一个客户端提供的机制,而不是服务端提供的; pipeline 不具备事务性; 目的:节约网络传输时间; 通过一次发送多次请求命令,从而减少网络传输的时间。 Redis发布订阅 为了支…

文件传送协议

壹、文件传输协议FTP 一、FTP简介 文件传送协议FTP曾是互联网上使用最广泛的协议; 在互联网发展的早期阶段,用FTP传送文件约占整个互联网的通信量的三分之一;知道1995年,www的通信量才首次超过FTP。 FTP实现的是通过网络实现异…

删除链表中等于给定值 val 的所有结点(三种方法深入解析)

又见面啦,接下来的链表相关Oj题目我会根据我自己的理解来给大家讲解,包括解析和代码,希望你可以对链表有更加深入的理解!! 题目: 先上链接: OJ题目 给你一个链表的头节点 head 和一个整数 va…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

欧拉回路(leetcode 重新安排行程)

先学习一下欧拉回路是怎么一回事。 对于图中这七个节点,从节点1出发,最终要到达节点1,并且每条路只能走一次,且每条路都得走过一次。 使用dfs,如果算法按照字典序的排列方式选择下一个节点。 第一部分:那…

VS Code 保存+格式化代码

在 VSCode 中,使用 Ctrl S 快捷键直接保存并格式化代码: 打开 VSCode 的设置界面:File -> Preferences -> Settings在设置界面搜索框中输入“format on save”,勾选“Editor: Format On Save”选项,表示在保存…

CUDA内存访问模式

大多数设备端数据访问都是从全局内存开始的,并且多数GPU应用程序容易受内存带宽的限制。因此,最大限度的利用全局内存带宽是调控核函数性能的基本。 对齐与合并访问 如图,所有的应用程序数据最初存在于DRAM上,也就是物理设备内存上…

【HTTP上】协议/域名/url/请求和响应/状态码/重定向

文章目录 0.应用层协议0.1HTTP协议 1.域名2.DNS3.访问浏览器4.URL搜索特殊字符如#&~ 5.万维网6.http请求和响应的格式6.1HTTP请求格式6.2HTTP响应格式6.3示例6.3模拟HTTP【框架】6.4查看请求或响应的工具FiddlerPostman 7.网页7.0对访问网页的认识7.1wget7.2新的认识7.3GET…

使用DataGrip连接DM达梦数据库

目录 前言一、添加数据库驱动1.1 配置达梦驱动包1.1.1 配置达梦驱动1.1.2 配置驱动jar包 1.2 配置JDBC URL模板1.3 保存驱动配置 二、新建数据源2.1 填写数据库连接信息2.2 测试是否配置成功2.3 保存配置并退出 前言 达梦数据库虽然提供了官方的数据库管理工具"DM管理工具…

数据挖掘实战-基于CNN深度学习算法构建英文文本分类模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

零基础学习数据库SQL语句之操作表中数据的DML语句

我们的数据库是根据页面原型和相关需求完成相关开发的 在表中添加数据 删除数据 修改数据 添加数据 页面模型 当点击保存的时候就能将表单数据提交到服务端 服务端将数据添加到数据库 我们要用insert语句 将数据添加到数据库中 代码演示 CREATE DATABASE Dduo; USE Dduo…

【资源分享】CAD Map 3D2024安装教程

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…