原文:使用Linux训练LoRA模型 - 知乎

2022年十一之后一直在关注AI绘图的进展,包括waifu,novelai等模型层出不穷,一点点刷新着AI绘图的能力。

关于LoRA:

2022年12月份开始,在reddit网站上,一直有人在聊LoRA与Dreambooth的结合,我当时并没有特别注意到LoRA这个名词,以为只是Dreambooth的一种新的训练方法,随后LoRA更新到了Stable Diffusion webui的Dreambooth extension中,大大压缩了Dreambooth的训练时间和所需要的训练资源,使得Dreambooth训练只需要一个游戏本就可以承担的起。

2023年春节后,我发现Stable Diffusion webui更新了LoRA模块,突然间LoRA这个名词在AI绘图中火了起来,civita网站也突然间多了很多各式各样的模型,这时候LoRA彻底火出圈了~然后,特么尴尬的来了,Stable Diffusion webui中的Dreambooth extension训练所产生的LoRA小模型,无法在webui中的LoRA模块进行加载,这大大限制了原友们的创作热情。

长话短多,本文主要介绍的就是如何在linux环境下进行LoRA模型的训练,windows环境移步这里使用GUI训练更完美

首先需要git拉取代码:https://github.com/kohya-ss/sd-scripts

pip install -r requirements.txt

在安装好所需要的环境之后(其实装环境这一步挺麻烦的,python版本以及cuda版本的要求都比较苛刻)

lora模型的训练在原作者那里预留了两种训练方式,

一种是使用Dreambooth的训练方式,需要在训练时留有concept这个的概念,例如说,我预留了一个角色名klee,在输入文本klee时,正好可以生成我的女儿可莉~

罩子越大,模型越涩

另外一种是使用标签或者文本(captions)对模型进行一种风格化的画风训练,可以学到画风或者各种奇奇怪怪的信息,这样在准备数据的时候就需要图片文本对,我习惯使用webui中预设的danbooru或者BLIP方法生成文本对:

webui中的Train选项卡

下面主要以上述的两种方式分别讲述训练方法:

一.以Dreambooth的方式训练角色

1.数据准备

原作者写脚本时对数据的文件夹的命名方式做了规定:

训练数据文件夹的命名方式为

<数据重复次数>_<角色名> <类别名>

正则化数据文件夹的命名方式为

<数据重复次数>_<类别名>

数据的重复次数决定了两个事项,一个是训练中的每个epoch的图片大致有多少,另外一个是决定了训练图片(train)与正则化图片(reg)的比例是多少;举个可莉的例子,训练数据文件夹共有10张数据图片,正则化数据文件夹共有100张图片,那么可以把两个文件夹分别命名为:

20_klee girl
1_girl

通常来说,要保证正则化图片的数量少于训练图片的数量

2.直接开训

accelerate launch --num_cpu_threads_per_process 1 train_network.py --pretrained_model_name_or_path=..\models\model.ckpt --train_data_dir=..\data\klee --output_dir=..\lora_train1 --reg_data_dir=..\data\girl_reg --prior_loss_weight=1.0 --resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=400 --optimizer_type=AdamW8bit --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --color_aug --network_module=networks.lora

--pretrained_model_name_or_path是以ckpt为结尾的基础模型的路径,例如说sd_v1.5的基础模型
--train_data_dir是刚才设置的20_klee girl文件夹的上一级文件夹的路径
--output_dir是预设输出文件夹的路径;
--reg_data_dir是刚才设置的1_girl文件夹的上一级文件夹的路径;
--prior_loss_weight是dreambooth中提到的正则项损失的权重,可以设为1.0,也可以调的更小些,对于初级玩家来说,这项设为0或者reg_data_dir填“”,可以获得更好的第一眼效果;
--resolution=512,512这项填写的是你数据中所有图片的分辨率,我在数据预处理时,都将图片处理成了正方形,所以这里就写了最常见的512,512,这里的分辨率一定要与数据相匹配,否则会报错;
--train_batch_size=1 --learning_rate=1e-4这两项掠去不说,只是提醒下,这两项在调整时需要联动调整,size调大往往学习率也要调大;
--max_train_steps=400训练终止步数;
--optimizer_type=AdamW8bit --xformers这两项由于我的服务器是cuda10.2的,都启用不了,我就直接砍掉不要了,否则会报错;
--后面的就都照readme正常写就可以了,略;
--seed=42是随机种子,可以写一个自己幸运数。

然后我们将生成的safetensor模型移动到webui路径下的/webui/models/Lora/ 就可以在webui中加载了:

具体操作顺序如图

二.训练lora画风模型(使用caption进行训练)

训练lora画风模型需要预先准备打好标签的数据,数据的文件夹名称没有特殊要求,也可以用sd-scripts中的脚本生成标签数据

打标签的步骤可以使用webui中的方法,也可以使用sd-scripts中的脚本

首先cd到finetune文件夹下

python tag_images_by_wd14_tagger.py --batch_size 4 <训练数据路径>

我使用的是webui中的打标签工具,没有使用上面的代码,但是生成的都是.txt文件,然后接下来很重要的一步是将标签文件.txt转为.json

python merge_dd_tags_to_metadata.py <训练数据路径> meta_cap.json

然后会在当前文件夹得到一个meta_cap.json,然后返回上一级路径,将命令相对于Dreambooth的方式训练角色稍作修改

accelerate launch --num_cpu_threads_per_process 1 train_network.py --pretrained_model_name_or_path=../models/model.ckpt --train_data_dir=../data/lora_style --output_dir=../lora_train1 --reg_data_dir="" --resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=400 --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --color_aug --network_module=networks.lora--in_json=finetune/meta_cap.json

在这里我删除了会导致cuda10.2报错的加速配置,删去了正则化数据以及对应的prior_loss_weight,之后加了in_json项,然后就可以开启lora的画风训练,得到画风lora模型了~

使用Linux训练LoRA模型相关推荐

  1. 低显存(4g)训练LoRA模型的一些经验+自训练四季夏目LoRA模型分享

    一.Lora简介 LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题.目前超过数十亿以上参 ...

  2. 什么是LoRA模型,如何使用和训练LoRA模型?你想要的都在这!

    什么是LoRA模型 LoRA的全称是LoRA: Low-Rank Adaptation of Large Language Models,可以理解为stable diffusion(SD)模型的一种插 ...

  3. Lora模型训练-koya SS GUi

    前提 现在大部分 AI 产品采用的的大模型(dreamboth),但是在产品的训练中也发现了不仅仅需要较大的内存还需要好的 GPU 成本较高,而且模型较大修改只能重新训练不能修改,为了解决这个问题开始 ...

  4. TVM:在树莓派上部署预训练的模型

    TVM:在树莓派上部署预训练的模型 之前我们已经介绍如何通过Python接口(AutoTVM)来编译和优化模型.本文将介绍如何在远程(如本例中的树莓派)上部署预训练的模型. 在设备上构建 TVM Ru ...

  5. PocketSphinx语音识别系统语言模型的训练和声学模型的改进

    PocketSphinx语音识别系统语言模型的训练和声学模型的改进 zouxy09@qq.com http://blog.csdn.net/zouxy09 关于语音识别的基础知识和sphinx的知识, ...

  6. MMDeteceion之系列一(环境安装、模型测试、训练以及模型后处理工具)

    1.MMDeteceion初识 MMDetection是一款优秀的基于PyTorch的深度学习目标检测工具箱,由香港中文大学(CUHK)多媒体实验室(mmlab)开发.基本上支持所有当前SOTA二阶段 ...

  7. 我参加第七届NVIDIA Sky Hackathon——训练ASR模型

    如何从0开始训练自己的ASR模型 第一步 获取NGC密钥 第二步 配置Ubuntu22.04的运行环境 第三步 开始训练ASR模型 文章目录 如何从0开始训练自己的ASR模型 前言 一.获取NGC密钥 ...

  8. AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略

    AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介.安装.使用方法之详细攻略 目录 DeepSpeed Chat的简 ...

  9. 使用中文维基百科训练word2vec模型

    一.下载原始数据 数据下载地址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 ,或者在这 ...

最新文章

  1. 24点游戏c语言链表做法,C语言实现24点程序(示例代码)
  2. 因遭领导批评,90后女生上班当天便辞职还删了公司后台数据,结果……她被判刑了...
  3. 计算机网络职称考试试题,职称计算机考试网络综合试题
  4. 使用secure CRT的SFTP在LINUX与WINDOWS下交换文件
  5. 24/100. Linked List Cycle
  6. innodb 悲观锁 乐观锁_mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁
  7. dede定义全局变量(include/common.inc.php)及调用方式
  8. Corn Fields——POJ3254状态压缩Dp
  9. linux比较两个目录的差异
  10. 闭式系统蒸汽管径推荐速度_干货 | 蒸汽管路中,管径和阀门如何选型?
  11. JDK源码如何启动编译
  12. mysql源代码多少行_数据库是一个庞大的工程,本来想读读mysql的开源代码,可看到代码行数.doc...
  13. Scratch二次开发6:如何保存作品到自己的服务器
  14. 如何通过数据驱动业务发展
  15. 初探可视化新秀PyG2Plot
  16. 前端页面预览word_前端实现在线预览文档
  17. uni-app富文本图片太大溢出以及富文本显示问题
  18. Statement接口的基本介绍和使用
  19. 《数据结构》八大排序(详细图文分析讲解)
  20. 【路由篇】03. 远程设置并访问内网中二层路由的小米路由器

热门文章

  1. 数据库CAST()函数,格式(CAST AS decimal)
  2. Iperf使用参数详解
  3. vue 开发ui库_面向设计师的ui ux开发vue js
  4. Lake Shore350型低温温度控制器
  5. python 如何安装numpy库?
  6. php移除excel密码,excel2007密码怎么取消
  7. 完成您的第一个智能无人机
  8. php中的isset函数
  9. 【四二学堂】jquery方式ajax获取数据并渲染页面
  10. 打破FTTR布线标准瓶颈,让千兆光纤网络走进千家万户