Lora训练学习笔记

也总算是狠下心换了新电脑,主要原因就是之前跑涩图卡的太不爽动不动就爆显存…呃这个理由真的没问题吗

既然电脑也换了那也不能再摆烂天天拿着别人的lora和模型瞎玩了

代码学不明白,用脚本训练总能学一下吧…之前教程看了不少但是技术日新月异啊,之前看的现在也过时了不少,在这里感谢b站几个一直更新教程的up们,互联网分享精神永存

看教程看的头疼到现在也不知道能不能成功总之一步一步跟着来吧,学会多少记多少。感觉上了一年班自己的代码能力啊python啊计算机知识啥的都快还给老师了…还能不能捡的起来呢

配环境

python和git不多说了,教程推荐3.10.8或者3.10.9,看了下自己的3.10.7,也懒得更新了,估计差别不大吧,先用着,翻车了再来改

lora脚本用的秋叶佬的,虽然听说有lora gui了不过还是先从教程详细的玩起吧~

建个文件夹脚本git下来不多说

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

然后右键用powershell运行一下install.ps1,开始装环境

好大的pytorch…每个包都要创建一个新的虚拟环境,然后下一遍torch是这样的

不得不说世界上最大的东西除了node_modules还有python venv(笑

image-20230319215549361

最后显示install compete就装完了。不得不说真大啊

各种报错各种慢 然后我折腾完之后发现有个cn加速的安装脚本(

我真傻

整理训练集

torch没卡我结果一个numpy十几m开始卡下载了,可能是这个没换源吧,也懒得从头来了等一会吧,趁这个时间先整理下训练集。!!记得换源,我被折磨了半小时才想起来确认下我有没有换源我就是个纯纯的。。

1
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

看了各种教程训练集讲究就多了,从画风统一度,裁剪方法,角度服装等等包含的程度,大抵每个炼丹师都应该知道,丹的好坏,训练集是最重要的吧。

但是这里既然学习流程,就先不想那么多了,找个最简单的人物训练,自动裁切自动打标走一波也不折腾难的了。

dalao说推荐个人用50张图左右,分辨率就用512*768吧,先找图。

图片是用Moeloader从d站镜像站上拖下来的单人物tag的图片,随便挑选了看着比较好的70张,放个文件夹。不要用中文路径这个应该不用提了吧(

image-20230319220956075

然后开webui,先切图。设好输入输出目录

我这里用tagger去打tag,就不开训练里的自动tag了,但是把自动焦点开一下。预处理。

image-20230319221245570

切完初步扫了一下效果还ok,没有太离谱的。横向的切出来效果不太好不过也无伤大雅

image-20230319221504857

然后打tag,tag反推,批量操作,阈值按教程用0.3

tag有各种玩法,这里也复杂得很,没看多明白…还是先用最简单的全标吧,按dalao说法,全标效果倒是也不差

image-20230319221929092

又要下一堆模型emmm 然后反推倒是很快

image-20230319223112453

把反推完的tag扔到训练图的文件夹里去

image-20230319223137350

到这里训练集就处理完了。待用。

设置训练参数

在训练脚本文件夹下面建个train文件夹,再建个本次训练的文件夹,名字随便

然后下面再建一个X_训练名字 的文件夹,X就是说的那个repeat次数,一个图像重复多少次。我这里写个10。后面名字随便。

这里其实进阶会用来区分不同的参数来训练,我这里先不管了,就塞一个文件夹,把刚才目录下的训练图片和tag文件都丢进去

image-20230319224101940

然后改train.ps1训练脚本

这个就有点复杂了,秋叶佬的教程写的比较明白。还是先按简单的通用设置来吧,改的就只有红圈的部分

底模一般都推荐用full 7.2G原始大模型

分辨率改一下

batch按理说可以开大点不过也就是加快点速度所以还是算了

epoch可以开大点反正就算过拟合了每轮也有保存不影响什么

dim就不改了 学习率这种进阶的东西也不改了

优化器用了lion据说效果好一点

locon没学明白,先不开

好了保存然后开始训练

image-20230319231411483

训练!

训练没啥好说的,右键开始就好了(又要下一堆东西 等吧…emmm)

然后开始欣赏显卡的轰鸣…是真的很慢…

image-20230319235551770

image-20230319235536361

测试模型

因为设置了每2个epoch保存一次,所以其实不用等都训练完了,保存一次模型就可以测试一下了

而且其实也不需要训练40轮这么多

按照dalao的经验,数据集差不多够多,打标没问题的情况下,6-8轮10轮以内就很好了,太高了还会过拟合

我自己感觉2轮的甚至都很像模像样了,可能我的训练集比较多吧

我跑了40轮只是测试一下看看这样

不过感觉lora不好的一点还是每次训练完也没有个预览图,还得自己把模型copy出去然后在webui里测试…这属实是有点不方便

总之目前还没跑完,先试试10轮的,很满意!

image-20230320000201974

一些小tips

1.关于打标,打全标最简单,但是很愚蠢的一点就是用的时候必须也调用上一些tags标记,不然就会缺特征,因为打标在tags里的特征其实是不会被包含在lora本身里的,必须自己在调用时候写上去…

所以其实对于人物lora来说最优的方法是手动删除人物特性相关的打标,但是属实有点麻烦…

再摆烂点就是不打,但好像是容易过拟合吧…

等我再研究研究明白再来说

2.训练尺寸,我的图基本都是竖向的,512*512训练切图其实有点厉害,导致上面画出来的图头顶很多都没了…可能还是得参考原图比例来切图和训练比较好吧

3.40系卡要不要替换cudnn,我没看有人提过lora要不要换,不过我换了下正常用是没问题,有没有提升没有仔细对比,不知道有没有人清楚了

更新下,实测换一下好像还是有提升的,但是也没有很夸张那种。

4.训练batch数,我们不考虑显存的情况下,肯定越大越快,但是据说开大了会过拟合什么的,看dalao建议是说设成图片轮数(也就是图片数*文件夹名字前面那个repeat数,比如我这个70张图repeat 10就是700)的1/60左右。(这么看我这个数据量有点大了,好像一般推荐2,300这样,可能我应该减一点repeat数)

5.正则化 没看明白 待我以后再研究研究

打标那些事

1.直接打全标感觉拟合效果比较好的,但是用起来很麻烦,还得把那些tag文件里高频的tag都写进去才能正常出图

2.另一个方法是只打一个触发词,还有留下姿势动作这些tag,这种试了下感觉还可以,用起来方便,但是如果留了姿势的tag,那要开一个keep token 1 不然训练就乱了

这个方法可以参考dalao的文章,有一个一键处理脚本,很好很方便

https://www.bilibili.com/read/cv22050074?from=articleDetail

image-20230320013839698

3.手动改标…真的好麻烦

你让我用这种方法我是拒绝的www 懒癌发作了

感谢

b站:秋叶,星空佬,等等

参考资料:几个dalao的教程,特别是这个,很详细

https://www.bilibili.com/read/cv22274249?spm_id_from=333.999.list.card_opus.click