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

2023-09-17 22:07:59

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

操作和本地一样了。

更多推荐

企业直播如何实现多画面多场景切换?

企业直播如何实现多画面多场景切换?应用场景主要应用于:企业的会议直播、小型会务直播、异地讲师培训授课,实现较低成本的导播台场景切换效果(阿酷TONY注,比不上硬件导播台,但整体还可以,能达到场景画面切换效果)。轻导播客户端(版本:1.2.0)官方介绍是:轻量级导播软件,10分钟速成导播能手直播画面自由布局、多人连麦自由

路由和node环境搭建

路由和node环境搭建1.1什么是路由1.2案例实操1.2.3效果展示二、配置Node.js2.1新建两个文件夹2.2配置环境变量1.1什么是路由在计算机网络中,路由(Routing)是指根据某种算法将数据包从源节点传输到目标节点的过程。在Web开发中,路由则指的是根据URL地址的不同,将用户请求导向对应的处理程序或页

解锁前端Vue3宝藏级资料 第五章 Vue 组件应用 3( Slots )

5.4Slots我们已经了解到组件能够接收任意类型的JavaScript值作为props,但组件要如何接收模板内容呢?在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。Slots可用于将Html内容从父组件传递到子组件进行显示。例如,你创建一个名为Button的组件,并且只想更改按

2个比较经典的PHP加密解密函数分享

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,

JavaScript 基础 - 第1天笔记

JavaScript基础-第1天了解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变量存储数据的“容器”掌握常见运算符的使用,了解优先级关系知道JavaScript数据类型隐式转换的特征介绍掌握JavaScript

头歌平台相关verilog练习

以下题目不具有难易程度的连续性文章目录1、三人表决电路2、多路选择器3、电路功能描述—门级原始结构4、电路功能描述—行为定义—连续赋值5、电路功能描述—行为定义—过程语句1、三人表决电路本关需要你根据所学的组合逻辑及数字电路的知识完成三人表决电路的设计,实现少数服从多数的表决规则,根据逻辑真值表和逻辑表达式完成表决功能

netty之数据读写源码阅读

数据读写write从client端的写开始看client与服务端建立完connect后可以从future里拿到连接的channel对象。这里的channel是io.netty.channel.Channel对象。调用其channel.writeAndFlush(msg);方法可以进行数据发送。writeAndFlush

Android 应用上线注意事项

将Android应用上线到GooglePlay商店需要仔细注意一系列问题,以确保应用的质量、安全性和用户体验。以下是一些在Android应用上线过程中需要注意的关键问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发者账号:确保你拥有有效的GooglePlay开发者账号,可

【ASP.NET Core】应用脱机文件 (app_offline.htm)

文章目录概述锁定的部署文件来源jenkins进行CI失败是可能app_offline.htm不会被自动删除导致ASP.NETCore应用异常,发布成功后则需手动删除该文件概述在很多情况下,需要在对相关组件(如数据库或Web服务)进行更改时使Web应用程序脱机。通常,在IIS和ASP.NET中,可以通过将名为App_of

【深度学习实验】前馈神经网络(四):自定义逻辑回归模型:前向传播、反向传播算法

目录一、实验介绍二、实验环境1.配置虚拟环境2.库版本介绍三、实验内容0.导入必要的工具包1.逻辑回归Logistic类a.构造函数__init__b.__call__(self,x)方法c.前向传播forwardd.反向传播backward2.模型训练3.代码整合一、实验介绍实现逻辑回归模型(Logistic类)实现

动态规划:子序列问题(C++)

动态规划:子序列问题前言子序列问题1.最长递增子序列(中等)2.摆动序列(中等)3.最长递增子序列的个数(中等)4.最长数对链(中等)5.最长定差子序列(中等)6.最长的斐波那契子序列的长度(中等)7.最长等差序列(中等)8.等差数列划分II-子序列(困难)前言动态规划往期文章:动态规划入门:斐波那契数列模型以及多状态

热文推荐