通过EAS,您可以一键部署开源Kohya_ss服务并训练LoRA模型。在AI绘画场景中,您可以将经过训练的LoRA模型应用于Stable Diffusion(SD)服务,作为辅助模型,以提升SD绘画的效果。
前提条件
已开通EAS并创建默认工作空间,详情请参见开通PAI并创建默认工作空间。
如果使用RAM用户来部署模型,需要为RAM用户授予EAS的管理权限,详情请参见云产品依赖与授权:EAS。
已在同地域下创建OSS存储空间和目录,用来存放训练素材、输出的模型文件、日志等。如何上传文件请参见控制台上传文件。
准备工作
登录OSS管理控制台,进入某个同地域下的Bucket路径内。例如:
oss://kohya-demo/kohya/
。在当前Bucket路径下新建项目文件夹。例如:
KaraDetroit_loar
。同时,在此项目文件夹下新建Image
、Log
、Model
3个文件夹,如有JSON配置文件也可上传至此项目文件夹。Image:存放训练素材源文件。
Model:存放训练完成后的模型文件。
Log:存放日志。
SS_config.json:JSON文件,用于批量配置参数,非必需。使用时可在JSON配置中修改相关参数,如文件夹路径、输出模型命名等。具体配置详情可参考GitHub。文本示例请参考SS_config.json。
将准备好的图片打包成压缩文件上传至
Image
文件夹下。本文使用的图片及描述文件示例:100_pic.tgz。重要图片文件夹命名必须符合格式:数字+下划线+名称。例如:100_pic。
图片仅支持格式:
.png
,.jpg
,.jpeg
,.webp
,.bmp
。每张图片必须提供一个同名的描述文件,格式可为
.txt
,描述信息必须放在第一行,如有多个描述信息,可使用逗号分隔。
参数
描述
数字
每张图片重复训练次数,一般要求大于等于100。总训练次数一般要求大于1500。
若文件夹内包含10张图片,则每张图片训练
1500/10=150
次,图片文件夹名数字部分可为“150”。若文件夹内包含20张图片,则每张图片训练
1500/20=75(<100)
次,图片文件夹名数字部分可为“100”。
下划线
固定值,必填。
名称
符合OSS文件名称规则的任意字符串,本例中为“pic”。
部署Kohya_ss服务
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
单击部署服务,然后在自定义模型部署区域,单击自定义部署。
在自定义部署页面,可通过表单或JSON配置相关参数。
通过表单配置参数
参数
描述
基本信息
服务名称
自定义服务名称。本案例使用的示例值为:kohya_ss_demo。
环境信息
部署方式
选择镜像部署,并选中开启Web应用。
镜像配置
在官方镜像列表中选择kohya_ss>kohya_ss:2.2。
说明由于版本迭代迅速,部署时镜像版本选择最高版本即可。
模型配置
选择OSS类型的挂载方式,并配置以下参数:
OSS:选择同地域下的OSS路径。本文为
oss://kohya-demo/kohya/
。挂载路径:可自定义。本文为
/workspace
。重要是否只读必须将开关关闭。否则模型文件无法输出到OSS中。
运行命令
选择镜像后系统会自动配置运行命令。本文为:
python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headless
。--listen
:用于将本程序绑定到指定的本机IP地址上,接收外部请求并进行处理。--server_port
:监听端口号。
资源部署
资源类型
选择公共资源。
部署资源
资源规格推荐使用GPU>ml.gu7i.c16m60.1-gu30(性价比最高)。本文选择了当前最小规格ml.gu7i.c8m30.1-gu30。
通过JSON配置参数
在服务配置中单击编辑,并设置JSON格式数据。
JSON参考示例如下。
重要以下示例第4行"name",第18行"oss"等配置请按实际情况修改。
{ "metadata": { "name": "kohya_ss_demo", "instance": 1, "enable_webservice": true }, "cloud": { "computing": { "instance_type": "ecs.gn6e-c12g1.12xlarge", "instances": null } }, "storage": [ { "oss": { "path": "oss://kohya-demo/kohya/", "readOnly": false }, "properties": { "resource_type": "model" }, "mount_path": "/workspace" }], "containers": [ { "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:1.2", "script": "python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headless", "port": 8000 }] }
单击确定,然后检查表单配置,并单击部署,等待几分钟后即可完成模型部署。当服务状态为运行中时,服务部署成功。
训练LoRA模型
单击目标服务服务方式列下的查看Web应用,进入Kohya_ss服务。
选择Dreambooth LoRA。
设置Configuration file。可选,若无
SS_config.json
可跳过此步骤。说明配置文件路径为通过表单配置参数中的挂载路径+OSS中创建的文件夹路径+SS_config.json。在本文中为:
/workspace/KaraDetroit_loar/SS_config.json
。设置SourceModel。本文使用safetensors,相比较checkpoint来说更具有安全性。
设置Folders。填写前面步骤在OSS中所创建的
Image
、Log
、Model
路径和输出文件名。参数
描述
Image folder
需要训练的图片文件夹路径。设置为通过表单配置参数中的挂载路径拼接OSS中创建的
Image
路径。在本文中为:/workspace/KaraDetroit_loar/Image
。Logging folder
输出日志的文件夹路径。设置为通过表单配置参数中的挂载路径拼接OSS中创建的
Log
路径。在本文中为:/workspace/KaraDetroit_loar/Log
。Output folder
输出模型的文件夹路径。设置为通过表单配置参数中的挂载路径拼接OSS中创建的
Model
路径。在本文中为:/workspace/KaraDetroit_loar/Model
。Model output name
模型输出名称。例如:my_model。
设置Training parameters。示例值见准备工作步骤中的
SS_config.json
内容。参数
描述
LoRA Type
LoRA类型:
LoCON
:可以调整SD的每一层。如:Res
、Block
、Transformer
。LoHA
:同样大小处理更多信息。
LoRA network weights
LoRA网络权重,如果要接着训练则选用最后训练的LoRA。选填。
Train batch size
训练批量大小。该值越大,对显存的要求越高。
Epoch
训练轮数,将所有数据训练一次为一轮。需要自行计算。一般情况下:
Kohya中总训练次数 = 训练图片数量 x 重复次数 x 训练轮数 / 训练批量大小
。WebUI中总训练次数 = 训练图片数量 x 重复次数
。
使用类别图像时,在Kohya或在WebUI中总训练次数都会乘2,在Kohya中模型存储次数会减半。
Save every N epochs
每N个训练周期保存一次。如设为2,则每完成2轮训练保存一次训练结果。
Caption Extension
打标文件扩展名,例如:.txt。选填。
Mixed precision
混合精度。视显卡性能决定。默认可选no、fp16、bf16。30GB显存以上的显卡建议设置为bf16。
Save precision
保存精度,同上。
Number of CPU threads per core
CPU每核线程数。主要为显存,根据所购实例和需求调整。
Learning rate
学习率。默认0.0001。
LR Scheduler
学习率调度器。按需选择
cosine
或cosine with restart
等函数。LR Warmup(% of steps)
学习预热步数。按需调节,默认为10,无需预热则可选择0。
Optimizer
优化器。按需选择,默认
AdamW8bit
,DAdaptation
代表自动操作。Max Resolution
最大分辨率。根据图片情况进行设置。
Network Rank(Dimension)
模型复杂度。一般设置为128即可适应大部分场景。
Network Alpha
一般设置为比Network Rank(Dimension)小或者相同,常用的便是Network Rank设置为128,Network Alpha设置为64。
Convolution Rank(Dimension)
& Convolution Alpha
卷积度,LoRA对模型的微调涵盖范围。需根据不同的LoRA Type进行调整。
Kohya官方建议:
LoCon
:dim <= 64
,alpha = 1
(或更低)。LoHA
:dim <= 32
,alpha = 1
。
clip skip
使用的CLIP模型的次数,取值范围是1到12,值越小,生成的图像就越接近原始图像或输入图像。
写实模型:选择1。
二次元:选择2。
Sample every n epoch
每N轮样本。每几轮保存一次样本。
Sample Prompts
提示词样本。需要使用命令,参数如下:
--n
:提示词、反向提示词。--w
:图片宽度。--h
:图片高度。--d
:图像种子。--l
:提示词相关性(cfg)。--s
:迭代步数(steps)。
在页面下方,单击Train model开始进行训练。
在模型在线服务(EAS)页面的服务列表中单击对应的服务名称,进入服务详情。单击服务日志即可实时查看训练进度。
当出现
model saved
即表示训练完成。训练完成后,在配置的模型目录(
Model
)中获取训练得到的LoRA模型文件。例如:my_model.safetensors
。
使用训练的LoRA模型进行Stable Diffusion AIGC绘画
当您训练好自己的LoRA模型后,可将其上传到相应的SD WebUI的目录中进行挂载使用,从而实现利用自己训练的LoRA模型生成图片。如何部署Stable Diffusion服务,可参考:5分钟使用EAS一键部署Stable Diffusion实现文生图能力。
如何在Stable Diffusion WebUI中上传LoRA模型文件,详情设置如下:
Stable Diffusion WebUI的集群版(Cluster)
配置Stable Diffusion WebUI镜像,需选择-cluster版本(例如stable-diffusion-webui:4.2-cluster-webui)。服务启动成功后会在挂载的OSS路径下自动创建
/data-{当前登录用户ID}/models/Lora
路径。在运行命令中添加以下参数:
--lora-dir
,可选参数。--lora-dir
未指定时,所有用户的模型文件隔离,只加载{OSS路径}/data-{当前登录用户ID}/models/Lora
下的模型文件。--lora-dir
指定时,所有用户均会加载该目录以及{OSS路径}/data-{当前登录用户ID}/models/Lora
目录下的模型文件。例如:--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora
。
--data-dir {OSS挂载路径}
,例如:--data-dir /code/stable-diffusion-webui/data-oss
。
将LoRA模型文件上传到
{OSS路径}/data-{当前登录用户ID}/models/Lora
中。例如:oss://bucket-test/data-oss/data-1596******100/models/Lora
。说明OSS中的
/data-{当前登录用户ID}/models/Lora
路径会在当前服务启动成功后自动创建,因此需在服务启动成功后再上传LoRA模型文件。{当前登录用户ID}
可在页面右上角的个人头像处查看。
Stable Diffusion WebUI的单机版
配置Stable Diffusion WebUI镜像,需选择非
-cluster
版本(例如stable-diffusion-webui:4.2-standard)。服务启动成功后会在挂载的OSS路径下自动创建/models/Lora
路径。在运行命令中添加参数:
--data-dir {OSS挂载路径}
。例如:--data-dir /code/stable-diffusion-webui/data-oss
。将LoRA模型文件上传到
{OSS路径}/models/Lora
下。例如:oss://bucket-test/data-oss/models/Lora
。说明挂载的OSS中的
/models/Lora
路径会在当前服务启动成功后自动创建,无需自行创建。因此需要在服务启动成功后再上传LoRA模型文件。