【SDXL_LORA模型训练详细教程(含云端教程)】

news2024/10/6 2:31:41

img

个人网站:https://tianfeng.space

一、前言

之前写过一篇SD1.5 LORA模型的炼制方法,有的人想要我详细点说说秋叶启动器的lora训练器,SDXL建议使用秋叶的训练器,SD1.5赛博丹炉,个人习惯仅供参考!这次基于sdxl_lora模型的训练,顺便给大家详细的讲讲训练过程。SD1.5_lora训练文章链接

最新版秋叶一键安装包:

链接:https://pan.quark.cn/s/024e082b37dc

二、安装使用

还是和以前一样,解压后先更新,后启动。(这是之前的图,不用在意)

img

启动后来到如下界面,点击专家模式开始

img

sd_lora则是和以前一样,所以模型种类选择sdxl_lora,底模文件路径可以选择base这种祖宗级的模型,也可以选择一个你喜欢的SDXL模型作为底模(最好与你的训练数据风格相近),推荐第二种。

数据集裁剪打标签和放在什么地方,底模放置路径,看上次的lora训练教程,很简单。教程

我补充一点,训练集复制到该目录下,20是repeat数,你的每张图片要重复训练多少次,把这个数字改成几。动漫人物推荐10,真人推荐20-30,实物建筑30往上。img

来到数据集设置,训练集在train目录下,正则化默认为空。作用是防止过拟合,如果你要使用,新建一个目录放置你的正则化图像,然后把路径填上【正则化图像就是基于你的底膜生成的图片,假如你要训练一个女孩lora,那就在你的底模只使用1girl生成20张图像,放在正则化目录下】;训练分辨率通常为1024x1024,如果本地训练显存不够,可以适当减小为768x1024,必须是64的倍数。默认开启 ARB 桶,以允许使用非固定宽高比的图像来训练(简单来说就是不需要手动剪裁了)。ARB 桶在一定程度上会增加训练时间。 ARB桶分辨率必须大于训练分辨率,照抄就行。

img

模型名称自己命名,保存精度选bf16,bf16 可表示的整数范围更广泛,但是尾数精度较小;fp16 表示整数范围较小,但是尾数精度较高,其他默认。

img

最大训练轮数,建议10-15,基本能收敛基本也就在这区间,不能加大也没有;批量大小根据自己显卡来,12g往上可以加大,爆显存就往下调小,batch size越多大,模型的泛化性越好;梯度累加步数可以理解为变相加大batch size的一种方法,假如你的batch size为2,梯度累加步数为2,那么模型一次输入两张图片进行训练,训练完后并不更新参数,等到又输入1个batch2张图片训练完成后才更新参数,就变相等于训练4张图片进行更新一次参数,当然只是显存不够的无奈之举。

img

学习率默认即可,一般只训练Unet,12G完全够用,而且文本编码器训练效果提升不是很大;

学习率调整策略(lr_scheduler)推荐使用余弦退火cosine。如果开启预热,预热步数应该占总步数的5%-10%【预热就是先使用比较低的学习率来熟悉网络,慢慢的到1e-4】。如果使用带重启的余弦退火cosine_with_restarts,重启次数不应该超过4次。

总学习步数 = (图片数量 * 重复次数 * epoch)/ 批次大小

2500=502010/4

AdamW8bit:启用的int8优化的AdamW优化器,默认选项。

Lion:Google Brain发表的新优化器,各方面表现优于AdamW,同时占用显存更小,可能需要更大的batch size以保持梯度更新稳定。

D-Adaptation:FB发表的自适应学习率的优化器,调参简单,无需手动控制学习率,但是占用显存巨大(通常需要大于8G)。其他默认

img

网络结构(LoRA/LoCon/LoHa/DyLoRA),不同网络结构对应不同的矩阵低秩分解方法。LoRA 是老祖宗,只控制模型中的线性层和1x1卷积层,后续的不同网络结构都是在 LoRA 的基础上进行改进。理论上来说 LyCORIS 会比 LoRA 拥有更加强的微调效果,但是也更加容易过拟合。

需要注意的是,不同的网络结构一般需要对应不同的 dim 以及学习率。

如果想要接着上次训练,填入模型路径即可,网络维度建议64吧,文件大概330M,其他默认

差异炼丹:是要“图片”和“加工处理过的图片”,分别出两个lora。然后我们的目的是,提取两个lora的差异值获得一个新的lora。

img

预览图设置如下:宽高改成你训练图片的尺寸更好一点。

img

日志默认,下拉到这,随机打乱tokens关闭,因为不训练文本编码器,只训练unet。

img

其他默认,继续下拉,训练混合精度bf16,混合精度训练是在尽可能减少精度损失的情况下利用半精度浮点数加速训练。它使用FP16/bf16即半精度浮点数存储权重和梯度。在减少占用内存的同时起到了加速训练的效果。勾选缓存文本编码器的输入,照抄就行。

img

然后右下角点击开始训练吧!可以点击保存参数文件,下次使用读取参数进行

img

可以看到大概在4000步时loss达到最低,那就优先围绕附近保存的模型进行测试,或者你可以使用xyz脚本进行测试,基于不同的权重和lora,一次性生成图片进行对比,直观但是费时间。最优模型大概率在loss最低。

如果你的loss下不来怎么办,可以适当加大学习率对1e-4,如过loss下降的很快,可能适当减小学习率。一般最好你的loss得到0.8-0.9,1点多大概率不行,模型效果不理想。

img

三、autodl炼制(本地没有条件的小伙伴)

https://www.autodl.com/

注册完成充个10块钱就够用了,新人学生认证好像可以免费使用10小时。来到算力市场,选一个3090,要选CUDA12.0以上的,然后社区镜像搜lora,选择Akegarasu/lora-scripts/lora-train:v12

img

来到控制台,点击jupterlab,ssh和密码等下复制用

img

把lora-scripts文件夹拖动到autodl-tmp目录中(和Windows操作一样),外面空间比较小。

img

文件目录基本和本地一样,把训练集和底模文件放入到sd-model,train就行直接拖入就行,如果想要快可以使用公共网盘,例如autodl和百度网盘的一个公共空间,直接可以下载到autodl-tmp目录下

网盘文档:https://www.autodl.com/docs/netdisk/

上传文档:https://www.autodl.com/docs/scp/

下载文档:https://www.autodl.com/docs/down/

img

检查是否处于lora-scripts文件夹,然后打开终端,执行

bash run_gui.sh 

img

重点来了:由于autodl只允许一个在外界访问一个端口(6006),所以这里我推荐使用ssh端口转发来将云端的界面转发到本地来访问。

下载我制作的端口转发器,然后使用记事本打开这个配置文件(config.toml)

链接:https://pan.quark.cn/s/4efa5c82b244

img

保存关闭,点击ssh-port-forward.exe

img

自动来到一些界面

img

操作和本地一样了。

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

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

相关文章

TCP详解之滑动窗口

TCP详解之滑动窗口 引入窗口概念的原因 我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。 这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。 如果你…

红黑树的原理

文章目录 红黑树的原理红黑树的定义为什么会有红黑树红黑树构建 红黑树的原理 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在计算机科学中被广泛应用于实现有序集合和映射等数据结构。它通过引入颜色标记和一些特定的操作规则&#…

springboot+vue“智慧食堂”设计与实现springboot002

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

JAVA医药进销存管理系统(附源码+调试)

JAVA医药进销存管理系统 功能描述 (1)登录模块:登录信息等存储在数据库中 (2)基本信息模块:分为药品信息模块、客户情况模块、供应商情况模块; (3)业务管理模块&#x…

QStandardItem通过setCheckable添加复选框后无法再次通过setCheckable取消复选框的问题

前言 如题所示&#xff0c;通过setCheckable添加复选框后&#xff0c;想要通过setCheckable(false)取消复选框&#xff0c;你会发现根本没有作用的。 问题复现 #include "widget.h" #include "ui_widget.h" #include <QList>Widget::Widget(QWidg…

QT基础教学(QMainWindow)

文章目录 前言一、QMainWindow介绍二、代码示例三、QMainWindow高级用法总结 前言 之前我们都是在QWidget中来进行学习的&#xff0c;那么今天我将为大家讲解一下QMainWindow。 一、QMainWindow介绍 QMainWindow是Qt框架提供的一个重要的窗口类&#xff0c;用于创建具有标准…

结构体的简单介绍(4)——位段

目录 位段的概念&#xff1a; 位段的内存分配&#xff1a; 问题1&#xff1a;当开辟了内存后&#xff0c;内存中每个比特位从右向左使用?还是从左向右使用? 这个不确定。 问题2&#xff1a;当前面时候&#xff0c;剩余的空间不足下一个成员使用的时候&#xff0c;剩余的空…

1.使用turtle换一个五环2.设计这样一个程序:输入一个数字 判断它是不是一个质数

1.使用turtle换一个五环 import turtle turtle.pensize(15) turtle.penup() turtle.color(blue) turtle.goto(-150,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtle.color(black) turtle.goto(0,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtl…

ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …

LeetCode题解-让所有学生保持开心的分组方法数

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 亲爱的各位友友们&#xff0c;今天来给大家讲解一道力扣中等题&…

为什么要有override

多态一定会成功吗 因为逻辑是用户编写的&#xff0c;那么肯定会有遗漏的地方&#xff0c;那就要规则来限制。就比如多态&#xff0c;都知道条件之一是子类重写了父类的虚函数&#xff0c;但是如果子类没有严格遵守这个规则&#xff0c;就无法达到目的。就比如这个代码&#xf…

华清 c++ day7 9月14

#include <iostream> using namespace std;template<typename T> class myVector { private:T* arr;size_t size; //元素数量size_t max_size; //数组容量 public://构造函数myVector() :arr(nullptr), size(0), max_size(0) {}myVector(int size){if (size >…

ts 枚举类型原理及其应用详解

ts 枚举类型介绍 TypeScript的枚举类型是一种特殊的数据类型&#xff0c;它允许开发者为一组相关值定义一个共同的名称&#xff0c;使我们可以更清晰、更一致地使用这些值。 枚举类型在TypeScript中用enum关键字定义&#xff0c;每个枚举值默认都是数字类型&#xff0c;从0开…

Cannot access defaults field of Properties

今天打包maven项目时报错&#xff1a; 解决方案&#xff1a;在pom.xml中加入&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1…

C#---第22:Newtonsoft中json/array的解析、创建、SelectToken(获取指定values)方法

1.解析json & array (1)json解析 using Newtonsoft.Json.Linq;string json "{CPU: Intel,Drives: [DVD read/writer,500 gigabyte hard drive]}";JObject o JObject.Parse(json);Console.WriteLine(o.GetType()); Console.WriteLine(o.ToString()); Console.…

Windows配置python(anaconda+vscode方案)的主要步骤及注意事项

Windows配置python&#xff08;anacondavscode方案&#xff09;的主要步骤及注意事项 1、准备工作 anaconda&#xff0c;官网下载&#xff08;直接下载最新版&#xff09;vscode&#xff0c;官网下载 (官网直接下载有可能太慢&#xff0c;可以考虑在国内靠谱的网站上下载&…

GIS跟踪监管系统单元信息更新

GIS跟踪监管系统单元信息更新 单元信息更新。① 新增单元。② 编辑单元。③ 删除单元。物资查询&#xff08;1&#xff09;物资查询与展示。① 几何查询。• 单击查询&#xff1a;• 拉框查询&#xff1a;• 多边形查询&#xff1a;② 物资定位。• 多个物资定位&#xff1a; 单…

Python爬虫实战案例——第五例

文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff01;严禁将文中内容用于任何商业与非法用途&#xff0c;由此产生的一切后果与作者无关。若有侵权&#xff0c;请联系删除。 目标&#xff1a;采集三国杀官网的精美壁纸 地址&#xff1a;aHR0cHM6Ly93d3…

普中51-独立按键实验

独立按键实验 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时&#xff0c;电压信号 如下图所示&#xff1a; 由于机械点的弹性作用&#xff0c;按键开关在闭合时不会马上稳定的接通&#xff0c;在断开时 也不会一下子断开&#xff0c;因而在闭合和断开的瞬间均伴…

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明&#xff1a; 1. 博主电脑为Windows11操作系统&#xff0c;亲测有效&#xff0c;修改后无任何影响&#xff0c;软件都可以正常运行&#xff01; 2. Windows10系统还不知道可不可行&#xff0c;因为Windows11的计算机管理中没有本地用户和组&#xff0c;博主在csdn上看到很…