CivArchive
    ← All articles
    Published August 30, 2023by Junze

    如何微调SDXL LoRA模型(使用Koyha和Runpod)

    1.5K views0 reactions1 comments on CivitAI6 collected
    training guidesdxl lora

    如何微调SDXL LoRA模型(使用Koyha和Runpod)

    本指南将介绍如何微调SDXL LoRA模型。

    它的目标是尽快为您提供一个高质量的LoRA模型,以便您可以尽快在SDXL模型中使用它。

    当然,"快速"是相对的。

    收集高质量的训练数据集需要相当长的时间。

    实际的模型训练也需要时间,但您可以在后台运行它。

    本指南使用Runpod。非常类似的过程也适用于Google Colab(您必须手动将SDXL模型上传到Google Drive)。

    如果您想在自己的计算机上进行训练,强烈建议您至少具备12GB VRAM。本指南中的大部分过程也适用于本地训练(确保您已安装Kohya SS和AUTOMATIC1111)。

    Runpod是一个云GPU租赁服务。它附带了用户创建的便捷模板,让我们能够一键部署训练工具Kohya SS + 图像生成器AUTOMATIC1111。

    您可以用至少2美元进行训练(虽然这只是最低限度,不太实际。我建议您充值更多,这样您就可以进行更多实验,而不感到匆忙)。

    许多人忽视的重要事项已用粉色突出显示。

    让我们开始吧!

    方法概述与结果 讨论LoRA训练的问题在于,对于大多数问题的答案是:“取决于情况”。

    不同的设置对不同的数据集和硬件效果更好。

    本指南涉及以下特定于面部训练的方法:

    由于我们使用Runpod,我们可以自由选择使用什么GPU。我推荐使用带有24GB VRAM的RTX 3090/4090,或者像A100这样的数据中心GPU,其VRAM为80GB。性能更高的GPU将训练更快,但更昂贵。 我们将使用50-100张面部训练图像。 我们将使用标签样式来为图像加上标题,例如:“lisaxl,女性,棕色衬衫”。 自然语言的标题样式,例如“lisaxl,一个穿着棕色衬衫的女性”,也可以使用,但对于这种方法来说并不是最佳选择。 不需要正则化图像。 以下是我们示例中使用的一些训练图像,来自K-pop艺术家Lisa:【图片略】 以下是使用LoRA生成的一些示例图像:【图片略】

    准备训练数据 对于这种方法,您需要大约50-100张主题的训练图像。

    我建议所有图像都是完美的1:1正方形(您不必拥有1:1正方形图像来训练LoRA,但这会减少我们的误差)。

    您可以使用bulkimagecrop.com批量裁剪图像为正方形。

    图像应满足以下条件:

    尺寸大于1024 x 1024。由于较大的图像较难找到,大于512 x 512也可以接受。使用太多低于此尺寸的图像将破坏SDXL LORA模型。 图像应以肖像风格放大到脸部,因为我们正在创建脸部LoRA。 以各种角度和光线展示您的主题(不要太过离奇)。 JPEG/PNG/WEBP格式 避免以下类型的图像:

    人物部分被其他物体遮挡 风格或姿势奇怪 图像中有其他人(甚至不要让其他人的脸部或手部靠近图像边缘,因为这会使模型倾向于将物体放在图像边缘上) 图像模糊(低分辨率截图或照片) 以下是我们数据集中的一些图像示例:【图片略】

    以下是我考虑但最终未包含的一些照片,以及原因:【图片略】

    手部遮盖了大部分面部

    角度和视角过于动态

    实际上看起来并不像主题,分辨率较低

    将图像放入同一个文件夹中。

    设置Runpod 注册 访问Runpod并创建一个帐户。

    替代选择?

    您还可以使用Google Colab跟随本教程,这样您将支付每月10美元的专业会员费。

    Vast.ai是另一个云GPU提供商。然而,它没有我们将要使用的模板,该模板允许我们一键启动Kohya SS(用于训练)和AUTOMATIC1111(用于测试)。

    前往结算选项卡购买小时。您将使用花费0.40美元至0.80美元/小时的GPU。5美元至15美元足以开始并完成本教程。

    启动Pod 在模板选项卡中,在社区部分寻找“Stable Diffusion Kohya_ss ComfyUI Ultimate”(以前称为“Stable Diffusion and Kohya_ss Ultimate”):【图片略】

    选择您的GPU,然后点击部署。

    RTX 3090 / RTX 4090将为您提供速度和价格的合理平衡。

    如果成本不是问题,可以选择其中一个A100。

    点击继续,然后点击部署。

    部署需要一些时间:【图片略】

    Pod正在运行 当Pod正在运行时,您将在角落看到绿色的运行徽章。

    点击连接按钮。

    这些端口将允许您访问不同的工具和服务。这些是模板中这些端口的映射:

    [端口3000] AUTOMATIC1111的Stable Diffusion Web UI(用于生成图像) [端口3010] Kohya SS(用于训练) [端口3010] ComfyUI(可选,用于生成图像。查看ComfyUI指南。) [端口6006] Tensorboard(可视化工具,超出本教程范围) [端口8888] Jupyter Lab(用于访问文件系统和终端) 点击连接到HTTP服务[端口8888]以打开JupyterLab。

    使用默认密码登录:Jup1t3R!

    您将看到以下内容。点击终端。

    通过导航到左侧面板的文件夹stable-diffusion-webui/models/Stable-diffusion,找到已下载的SDXL模型:【图片略】

    上传训练图像 您将直接将训练图像上传到JupyterLab工作区。

    您只能上传文件,而不能上传文件夹,因此您需要在JupyterLab中创建文件夹结构。

    创建以下文件夹(右键单击 -> 新建文件夹):

    名为img的文件夹 在其中,一个名为1_<CLASS>的子文件夹

    <CLASS>是您的主题所属的类别。从以下选项中选择一个:男/女/男孩/女孩

    -> 我的示例文件夹将是1_woman 在这个1_<CLASS>文件夹中,将所有训练图像拖放到其中。

    上传配置文件 下载此配置文件:

    kohya_facePreset_AdamW-fullbf16Download 将其上传到您的JupyterLab工作区。

    打印Kohya日志 我们需要一个地方来查看我们的进度更新。

    在JupyterLab中,打开一个新的终端。输入以下命令:

    tail -f /workspace/logs/kohya_ss.log 复制 现在,此终端将输出Koyha SS日志,为您提供进度更新。

    为训练图像加上标题 下一步:您需要为所有的训练图像添加标题。

    我们的标题样式将如下所示:

    TRIGGER,CLASS,<任何不在所有图像中的内容>

    TRIGGER是您将用于触发生成中的主题的单词 CLASS是其所属类别。从man/woman/boy/girl中选择一个。 然后写一些不在所有图像中的内容,如“坐着,红色衬衫,微笑”等。 因此,对于这个图像:【图片略】

    我的标题将是:

    lisaxl, girl, looking at viewer, sleeveless, black shirt, head tilt, jewelry, parted lips, gray background

    您可以手动完成这些标题,但我们将使用Kohya SS生成标题,然后删除不必要的部分以节省时间。

    前往Runpod,点击连接,然后点击连接到HTTP Serve [端口3010]。

    Kohya SS将会打开。

    在Kohya界面中,转到实用工具选项卡,然后进入Captioning子选项卡,然后点击WD14 Captioning子选项卡。

    在要为其加标题的图像文件夹中,输入/workspace/img。 在要添加到WD14标题的前缀中,写入您的TRIGGER,后跟逗号,然后是您的CLASS,如下所示: "lisaxl, girl,"

    点击Caption images。

    这将为您提供第一个结果 - 您可以检查JupyterLab中的Kohya终端,以查看您在主题中获得的标签。在我的示例中,我删除了所有这些标签:“nose”、“lips”、“1girl”。

    将这些项目放入逗号分隔的列表中,放入“不需要的标签”字段中,例如:"nose, lips, 1girl"。

    然后再次点击Caption images,您将获得经过修剪的标题集合。

    Kohya SS训练 在Kohya SS界面中,点击LoRA选项卡。

    确保您在LoRA选项卡中,而不是Dreambooth选项卡。这使得许多人困惑,因为选项卡看起来完全相同。【图片略】

    进行以下更改:

    点击配置文件部分以打开它。

    从JupyterLab工作区复制配置文件的路径(确保在前面添加斜杠“/”)。如果您使用了上面的配置文件,则为:

    /workspace/kohya_facePreset_AdamW-fullbf16.json

    点击加载。

    然后,进行以下更改。

    在源模型选项卡中:

    在预训练模型模型名称或路径中,写入: /workspace/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensors (这应该是您的SDXL模型下载到的位置,请检查您的JupyterLab工作区) 确保选中标记为SDXL模型的复选框

    然后,转到文件夹选项卡:

    将图像文件夹更改为您之前在JupyterLab工作区中创建的img文件夹的路径。如果您遵循本指南,它应该是: /workspace/img 将输出文件夹更改为: /workspace/stable-diffusion-webui/models/Lora 将您的模型输出名称更改为您想要的任何内容。为了保持组织,您可以在模型名称后面加上版本号,例如:“lisaxl_v1”

    现在,转到参数选项卡。

    配置文件已设置推荐的设置。下面我将对这些设置进行评论,以及为什么您可能想要更改它们。

    Train batch size: 5 -> 您拥有的训练图像数量应该可以被批次大小整除。

    Epoch: 100 -> 使用该方法在大约50-60个时期左右应该可以获得良好的结果。此配置文件每5个时期输出一次模型,这将使您可以在不同的时期测试模型。我注意到过煮(过度训练)一个SDXL模型要困难得多,因此这个值设置得稍高一些。如果您不想进行如此多的训练,可以将其降低到60。

    在这里详细解释了Kohya LoRA训练设置。

    点击大的开始训练按钮。

    检查训练日志 您可以在JupyterLab工作区终端中检查训练进度:【图片略】

    进度条将告诉您当前时期和步骤,经过的时间,估计剩余时间,每次迭代的秒数(s/it)和损失。

    测试您的LoRA 返回到Runpod,并点击连接到HTTP服务[端口3000]以打开AUTOMATIC1111。

    确保在提示之前调整以下设置:

    分辨率:1024宽 x 1024高 采样步数:30或更多 采样方法:DPM++ 2M Karras(或任何使用Karras的DPM++采样器) 在上一步中,您将LoRA的输出目标位置设置为AUTOMATIC1111 LoRA文件夹stable-diffusion-webui/models/lora。这意味着您将能够立即使用LoRA来进行AUTOMATIC1111。

    要使用它们:

    在提示中编写LoRA关键词短语。它的格式如下: lora:LORA-FILENAME:WEIGHT

    LORA-FILENAME是LoRA模型的文件名,不带文件扩展名(例如没有.safetensor)。

    WEIGHT是您希望LoRA的强度。范围为0-1。

    然后,在提示中包括您之前在为图像添加标题时指定的TRIGGER。

    作为示例:

    lora:lisaxl_v1:0.9 lisaxl portrait, masterpiece, breathtaking photograph, golden hour, outside 复制

    这是结果:【图片略】

    如果您对LoRA感到满意,从JupyterLab工作区下载LoRA文件。它将位于stable-diffusion-webui/models/lora中。