个人网站:https://tianfeng.space
一、前言
之前写过一篇SD1.5 LORA模型的炼制方法,有的人想要我详细点说说秋叶启动器的lora训练器,SDXL建议使用秋叶的训练器,SD1.5赛博丹炉,个人习惯仅供参考!这次基于sdxl_lora模型的训练,顺便给大家详细的讲讲训练过程。SD1.5_lora训练文章链接
最新版秋叶一键安装包:
链接:https://pan.quark.cn/s/024e082b37dc
二、安装使用
还是和以前一样,解压后先更新,后启动。(这是之前的图,不用在意)
启动后来到如下界面,点击专家模式开始
sd_lora则是和以前一样,所以模型种类选择sdxl_lora,底模文件路径可以选择base这种祖宗级的模型,也可以选择一个你喜欢的SDXL模型作为底模(最好与你的训练数据风格相近),推荐第二种。
数据集裁剪打标签和放在什么地方,底模放置路径,看上次的lora训练教程,很简单。教程
我补充一点,训练集复制到该目录下,20是repeat数,你的每张图片要重复训练多少次,把这个数字改成几。动漫人物推荐10,真人推荐20-30,实物建筑30往上。
来到数据集设置,训练集在train目录下,正则化默认为空。作用是防止过拟合,如果你要使用,新建一个目录放置你的正则化图像,然后把路径填上【正则化图像就是基于你的底膜生成的图片,假如你要训练一个女孩lora,那就在你的底模只使用1girl生成20张图像,放在正则化目录下】;训练分辨率通常为1024x1024,如果本地训练显存不够,可以适当减小为768x1024,必须是64的倍数。默认开启 ARB 桶,以允许使用非固定宽高比的图像来训练(简单来说就是不需要手动剪裁了)。ARB 桶在一定程度上会增加训练时间。 ARB桶分辨率必须大于训练分辨率,照抄就行。
模型名称自己命名,保存精度选bf16,bf16 可表示的整数范围更广泛,但是尾数精度较小;fp16 表示整数范围较小,但是尾数精度较高,其他默认。
最大训练轮数,建议10-15,基本能收敛基本也就在这区间,不能加大也没有;批量大小根据自己显卡来,12g往上可以加大,爆显存就往下调小,batch size越多大,模型的泛化性越好;梯度累加步数可以理解为变相加大batch size的一种方法,假如你的batch size为2,梯度累加步数为2,那么模型一次输入两张图片进行训练,训练完后并不更新参数,等到又输入1个batch2张图片训练完成后才更新参数,就变相等于训练4张图片进行更新一次参数,当然只是显存不够的无奈之举。
学习率默认即可,一般只训练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)。其他默认
网络结构(LoRA/LoCon/LoHa/DyLoRA),不同网络结构对应不同的矩阵低秩分解方法。LoRA 是老祖宗,只控制模型中的线性层和1x1卷积层,后续的不同网络结构都是在 LoRA 的基础上进行改进。理论上来说 LyCORIS 会比 LoRA 拥有更加强的微调效果,但是也更加容易过拟合。
需要注意的是,不同的网络结构一般需要对应不同的 dim 以及学习率。
如果想要接着上次训练,填入模型路径即可,网络维度建议64吧,文件大概330M,其他默认
差异炼丹:是要“图片”和“加工处理过的图片”,分别出两个lora。然后我们的目的是,提取两个lora的差异值获得一个新的lora。
预览图设置如下:宽高改成你训练图片的尺寸更好一点。
日志默认,下拉到这,随机打乱tokens关闭,因为不训练文本编码器,只训练unet。
其他默认,继续下拉,训练混合精度bf16,混合精度训练是在尽可能减少精度损失的情况下利用半精度浮点数加速训练。它使用FP16/bf16即半精度浮点数存储权重和梯度。在减少占用内存的同时起到了加速训练的效果。勾选缓存文本编码器的输入,照抄就行。
然后右下角点击开始训练吧!可以点击保存参数文件,下次使用读取参数进行
可以看到大概在4000步时loss达到最低,那就优先围绕附近保存的模型进行测试,或者你可以使用xyz脚本进行测试,基于不同的权重和lora,一次性生成图片进行对比,直观但是费时间。最优模型大概率在loss最低。
如果你的loss下不来怎么办,可以适当加大学习率对1e-4,如过loss下降的很快,可能适当减小学习率。一般最好你的loss得到0.8-0.9,1点多大概率不行,模型效果不理想。
三、autodl炼制(本地没有条件的小伙伴)
https://www.autodl.com/
注册完成充个10块钱就够用了,新人学生认证好像可以免费使用10小时。来到算力市场,选一个3090,要选CUDA12.0以上的,然后社区镜像搜lora,选择Akegarasu/lora-scripts/lora-train:v12
来到控制台,点击jupterlab,ssh和密码等下复制用
把lora-scripts文件夹拖动到autodl-tmp目录中(和Windows操作一样),外面空间比较小。
文件目录基本和本地一样,把训练集和底模文件放入到sd-model,train就行直接拖入就行,如果想要快可以使用公共网盘,例如autodl和百度网盘的一个公共空间,直接可以下载到autodl-tmp目录下
网盘文档:https://www.autodl.com/docs/netdisk/
上传文档:https://www.autodl.com/docs/scp/
下载文档:https://www.autodl.com/docs/down/
检查是否处于lora-scripts文件夹,然后打开终端,执行
bash run_gui.sh
重点来了:由于autodl只允许一个在外界访问一个端口(6006),所以这里我推荐使用ssh端口转发来将云端的界面转发到本地来访问。
下载我制作的端口转发器,然后使用记事本打开这个配置文件(config.toml)
链接:https://pan.quark.cn/s/4efa5c82b244
保存关闭,点击ssh-port-forward.exe
自动来到一些界面
操作和本地一样了。