5分钟使用EAS一键部署Kohya SD模型微调应用

通过EAS,您可以一键部署开源Kohya_ss服务并训练LoRA模型。在AI绘画场景中,您可以将经过训练的LoRA模型应用于Stable Diffusion(SD)服务,作为辅助模型,以提升SD绘画的效果。

前提条件

准备工作

  1. 登录OSS管理控制台,进入某个同地域下的Bucket路径内。例如:oss://kohya-demo/kohya/

  2. 在当前Bucket路径下新建项目文件夹。例如:KaraDetroit_loar。同时,在此项目文件夹下新建ImageLogModel3个文件夹,如有JSON配置文件也可上传至此项目文件夹。

    image.png

    • Image:存放训练素材源文件。

    • Model:存放训练完成后的模型文件。

    • Log:存放日志。

    • SS_config.json:JSON文件,用于批量配置参数,非必需。使用时可在JSON配置中修改相关参数,如文件夹路径、输出模型命名等。具体配置详情可参考GitHub。文本示例请参考SS_config.json

  3. 将准备好的图片打包成压缩文件上传至Image文件夹下。本文使用的图片及描述文件示例:100_pic.tgz

    image.png

    重要
    • 图片文件夹命名必须符合格式:数字+下划线+名称。例如: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服务

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 单击部署服务,然后在自定义模型部署区域,单击自定义部署

  3. 自定义部署页面,可通过表单或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
        }]
    }
  4. 单击确定,然后检查表单配置,并单击部署,等待几分钟后即可完成模型部署。当服务状态运行中时,服务部署成功。

训练LoRA模型

  1. 单击目标服务服务方式列下的查看Web应用,进入Kohya_ss服务。

  2. 选择Dreambooth LoRA

    image.png

  3. 设置Configuration file。可选,若无SS_config.json可跳过此步骤。

    image.png

    说明

    配置文件路径为通过表单配置参数中的挂载路径+OSS中创建的文件夹路径+SS_config.json。在本文中为:/workspace/KaraDetroit_loar/SS_config.json

  4. 设置SourceModel。本文使用safetensors,相比较checkpoint来说更具有安全性。

    image.png

  5. 设置Folders。填写前面步骤在OSS中所创建的ImageLogModel路径和输出文件名。

    image.png

    参数

    描述

    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。

  6. 设置Training parameters。示例值见准备工作步骤中的SS_config.json内容。

    参数

    描述

    LoRA Type

    LoRA类型:

    • LoCON:可以调整SD的每一层。如:ResBlockTransformer

    • 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

    学习率调度器。按需选择cosinecosine with restart等函数。

    LR Warmup(% of steps)

    学习预热步数。按需调节,默认为10,无需预热则可选择0。

    Optimizer

    优化器。按需选择,默认AdamW8bitDAdaptation代表自动操作。

    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官方建议:

    • LoCondim <= 64alpha = 1(或更低)。

    • LoHAdim <= 32alpha = 1

    clip skip

    使用的CLIP模型的次数,取值范围是112,值越小,生成的图像就越接近原始图像或输入图像。

    • 写实模型:选择1。

    • 二次元:选择2。

    Sample every n epoch

    N轮样本。每几轮保存一次样本。

    Sample Prompts

    提示词样本。需要使用命令,参数如下:

    • --n:提示词、反向提示词。

    • --w:图片宽度。

    • --h:图片高度。

    • --d:图像种子。

    • --l:提示词相关性(cfg)。

    • --s:迭代步数(steps)。

  7. 在页面下方,单击Train model开始进行训练。image.png

  8. 模型在线服务(EAS)页面的服务列表中单击对应的服务名称,进入服务详情。单击服务日志即可实时查看训练进度。

    image

    当出现model saved即表示训练完成。

    image.png

  9. 训练完成后,在配置的模型目录(Model)中获取训练得到的LoRA模型文件。例如:my_model.safetensors

    image.png

使用训练的LoRA模型进行Stable Diffusion AIGC绘画

当您训练好自己的LoRA模型后,可将其上传到相应的SD WebUI的目录中进行挂载使用,从而实现利用自己训练的LoRA模型生成图片。如何部署Stable Diffusion服务,可参考:5分钟使用EAS一键部署Stable Diffusion实现文生图能力

如何在Stable Diffusion WebUI中上传LoRA模型文件,详情设置如下:

Stable Diffusion WebUI的集群版(Cluster)

  1. 配置Stable Diffusion WebUI镜像,需选择-cluster版本(例如stable-diffusion-webui:4.2-cluster-webui)。服务启动成功后会在挂载的OSS路径下自动创建/data-{当前登录用户ID}/models/Lora路径。

  2. 运行命令中添加以下参数:

    • --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

  3. LoRA模型文件上传到 {OSS路径}/data-{当前登录用户ID}/models/Lora中。例如:oss://bucket-test/data-oss/data-1596******100/models/Lora

    image.png

    说明

    OSS中的/data-{当前登录用户ID}/models/Lora路径会在当前服务启动成功后自动创建,因此需在服务启动成功后再上传LoRA模型文件。

    {当前登录用户ID}可在页面右上角的个人头像处查看。

    image.png

Stable Diffusion WebUI的单机版

  1. 配置Stable Diffusion WebUI镜像,需选择非-cluster版本(例如stable-diffusion-webui:4.2-standard)。服务启动成功后会在挂载的OSS路径下自动创建/models/Lora路径。

  2. 运行命令中添加参数:--data-dir {OSS挂载路径}。例如:--data-dir /code/stable-diffusion-webui/data-oss

  3. LoRA模型文件上传到{OSS路径}/models/Lora下。例如:oss://bucket-test/data-oss/models/Lora

    image.png

    说明

    挂载的OSS中的/models/Lora路径会在当前服务启动成功后自动创建,无需自行创建。因此需要在服务启动成功后再上传LoRA模型文件。