跳到主要内容 云环境训练 Stable Diffusion LoRA 模型教程 | 极客日志
Python AI 算法
云环境训练 Stable Diffusion LoRA 模型教程 本文介绍在云环境下使用 AutoDL 和 kohya_ss 训练 Stable Diffusion LoRA 模型的完整流程。涵盖服务器配置、数据集准备(图片裁切与打标)、训练参数设置、模型测试及优化建议。通过云端算力解决本地硬件限制,帮助用户快速掌握专属风格模型的微调技术。
佛系玩家 发布于 2025/2/7 更新于 2026/4/19 1 浏览很多同学都想要自己的专属 AI 模型,但是大模型的训练比较费时费力,不太适合普通用户玩。AI 开发者们也意识到了这个问题,所以就产生了微调模型,LoRA 就是其中的一种。在 AI 绘画领域,只需要少量的一些图片,就可以训练出一个专属风格的 LoRA 模型,比如某人的脸、某个姿势、某种画风、某种物体,等等。
训练模型经常被大家戏称为'炼丹',这个词既给我们带来了美好的期待,也体现了模型创作过程的不易。如同炼丹需要精心呵护,AI 模型的训练也需要耐心和细致。然而,即使付出了辛勤的努力,最终的结果也未必能如人意。这是大家需要做好的心理准备。
LoRA 的原理网上已经有很多介绍,我就不说了。本文专门介绍在云环境怎么训练 LoRA 模型,所谓云环境就是放在机房中的远程服务器,而不是在本地电脑上,这特别适合想一展身手但是手里又没有一块好显卡的同学。
这里的云环境选择 AutoDL:
本文将使用 kohya_ss 这个开源项目来训练 LoRA 模型,下面正式开始。
云环境
AutoDL 上需要先配置计费方式然后才能使用服务器。
服务器
简单说下,计费方式选择'按量',地区选择'内蒙 A 区',GPU 型号选择'RTX A5000',GPU 数量选择'1',然后选择 1 个有空闲 GPU 的主机。
镜像这里选择'社区镜像',输入'yinghuoai-kohya',在弹出的菜单中选择预置镜像。
然后点击'立即创建'就可以了。
在 AutoDL 控制台等待服务器实例开机,开机成功后,在快捷工具这里可以看到一些操作项,点击其中的'JupyterLab'。
在 JupyterLab 中点击笔记本上方的双箭头按钮,它会进行一些初始化操作,并启动 kohya_ss,待看到'Running on local URL'的提示后,就说明启动成功了。
然后回到 AutoDL 控制台,点击快捷工具中的'自定义服务',即可启动 kohya_ss 的 Web 界面。
训练目录
为了有效的管理模型训练,我在镜像中创建了几个目录,可以通过'JupyterLab'查看,它们都在 /root/autodl-tmp 下边,autodl-tmp 挂载的是 AutoDL 的数据盘,可以节省宝贵的系统盘空间。
/root/autodl-tmp/models:SD 大模型目录,训练 Lora 模型时需要基于某个大模型。
/root/autodl-tmp/train:训练数据的目录,包括输入的图片、训练的参数、输出的 Lora 模型等,我们将在这个目录下创建不同的训练项目目录。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
快速体验 我在镜像中内置了一份训练数据和训练配置,可以让大家快速体验 Lora 炼丹。
通过 AutoDL 的自定义服务启动页面后,依次点击'LoRA'->'Training'。
在'Configuration file'这里输入我提前预置好的训练配置文件地址:/root/autodl-tmp/train/dudu/config.json;
然后点击'Load'加载训练参数;
最后点击'Start training'开始训练。
训练的进度需要去 JupterLab 中查看,大约需要 8 分钟,当看到 steps 显示 100% 的时候就说明训练完成了,模型已经保存到目录:/root/autodl-tmp/train/dudu/model
训练过程中会生成几张采样图片,保存在 /root/autodl-tmp/train/dudu/model/sample,可以打开看看训练的效果:
为了实际体验,需要把模型文件先下载到本地,然后再上传到 Stable Diffusion WebUI,使用文生图生成图片,参考参数:
大模型:realisticVisionV51_v51VAE,其它真实模型也可以试试。
提示词:masterpiece, best quality, 1dog, solo, sitting, looking at viewer, outdoor, the background is egyptian pyramids,tall pyramids <lora:dudu_log:0.8>
反向提示词:low quality, worst quality, harness, tree, bad anatomy,bad composition, poor, low effort
图片尺寸:768*768
注意 :如果你要重新训练这个项目,需要先删除 model 目录下的内容,然后再重新开始训练。
快速体验只能让大家简要领略炼丹的魅力。然而,要炼就一颗完美的丹药,还需备足图片素材、洞悉工具参数设置,以及不断测试优化模型。接下来,我将为大家详细解析如何步步为营,精心打造你的 Lora 模型。
准备 主要就是准备好要训练的图片,以及为图片生成提示词。然后才能把它们送进丹炉进行炼制。
挑选图片 训练 Lora 模型到底需要几张图片?我没找到具体要求,建议至少 10 张以上,并且要求图片清晰有质感 ,如果是针对某种个体的,拍摄目标的角度要多样 ,这样才可能训练出比较好的模型。
如果你手头没有合适的图片,可以自己拍摄,也可以去百度图片等图片网站找高清大图。
网上的教程大多是训练美女脸的,估计大家也都看烦了,所以我选择了一个狗子的图片进行训练,它的名字叫 dudu,样子大概是下图这样的。我准备的图片数量有 20 张,已经内置到我发布的 AutoDL 镜像中。
裁切图片 图片需要处理成一样的尺寸,尺寸可以是 512_512、512_768,512*640,都是 64 的倍数。显存低的可以用 512,显存高的可以用 768。这里给大家分享一个裁切图片的网站,操作方式如下图所示:
左边选择本地要裁切的图片。
右边是裁切设置,可以设置裁切的尺寸等。
注意 RENAME 可以让输出的图片名称更加有序,方便训练程序使用,xxx 代表三位数字,下边的 starting number 代表从哪个数字开始排序。
部署图片 我们先在 /root/autodl-tmp/train 下创建一个项目目录,我这里就用狗子的名字:dudu,然后在这个目录下再创建一个 img 目录,用于放置处理好的图片,不过图片还不能直接放到 img 下,还需要创建一个子目录:100_dudu,这个目录的名字是有讲究的,前边的 100 代表每张图片需要学习 100 次,后边的 dudu 就是图片的主题名字。
这里的学习次数没有固定的标准,真实图片建议 50-100,二次元 15-30。如果最终训练出的模型出现过拟合的问题,比如生图提示词写了蓝眼睛但是生成的都是黑眼睛,可以降低下学习次数试试。
把裁切好的图片上传到 /root/autodl-tmp/train/dudu/img/100_dudu 这个目录,如下图所示:
图片打标 所谓打标就是给图片编写提示词,一般先使用提示词反推工具生成提示词,然后再根据实际情况修改生成的提示词。
启动 kohya_ss 后,进入打开的 Web 页面,依次进入'Utilities'->'Captioning'->'BLIP Captioning'。
'Image folder to caption'中输入待打标的图片目录,我这里就是:/root/autodl-tmp/train/dudu/img/100_dudu。
'Caption file extension'是生成的提示词文件的后缀名。
'Prefix to add to BLIP caption'是添加到生成提示词中的固定前缀,训练中如果使用了这些前缀,生成图片时就可以使用这些前缀比较方便的触发 Lora 模型,但是根据经验也不能保证一定触发。后边还有一个参数'Postfix to add BLIP caption',这个是固定后缀。前缀在处理图片时的优先级更高一些。
其它参数都用默认就好了,有兴趣的可以研究下,我这里就不展开了。
注意这个工具的页面中都没有进度跟踪,需要到 shell 或者控制台界面查看,看到 100% 的进度条,以及'captioning done'的提示就说明打标完成了。
此时我们进入待训练的图片目录,就可以看到这些打标文件了。可以看到,每张图片都生成了对应的打标文件。
我们可以双击打开这些 txt 文件,查看其中的内容;如果感觉写的不好,可以修改它。
对于画风类型的 Lora,可以保留全部生成的标签,但是在训练时要多训练几轮,训练时间可能比较长。
对于特定角色的 Lora,如果我们想保留某个特征作为角色的自带特征,就把对应的标签删除,比如长头发,这样 Lora 中就会保存长头发作为角色的特征。不过这也是有缺点的,可能导致生成图片时过拟合:提示词不生效,比如输入短发生成的还是长发,严重的还可能导致画面崩坏、模糊不清。
修改提示词是个大工程,这里为了尽快演示,就不修改提示词了。
另外在这个工具中,我们可以看到,除了 BLIP,还有三个给图片打标的方法,不过我都没有跑成功,有兴趣的可以一起研究下。
如果你不使用 kohya_ss 自带的打标工具,也是完全可以的,比如 SD WebUI 的'训练'功能中也可以裁切图片并反推提示词,只是需要手动上传打标文件到这里的训练目录中。这里再推荐一个提示词编辑工具,有兴趣的可以去试试。
训练
参数设置 训练模型的参数很多,还会涉及到深度学习的一些概念,之前没接触过的同学可能会感觉头疼,不过没关系,我会尽量把主要的参数说清楚。
kohya_ss 启动后,依次进入'LoRA'->'Training'。
Source Model 设置训练使用的 Stable Diffusion 大模型,'Model Quic Pick'这里可以选择一些 SD 的基础大模型,训练的时候会先去 HuggingFace 下载,不过我实际测试跑不同,所以这里选择 custom,然后自己上传一个模型,因为训练图片是真实世界的狗子,所以这里使用了 realisticVisionV51(使用 AutoDL 镜像的同学不用再上传,已经内置了),这是一个真实视觉模型。
Folders
Image folder 是训练数据集的目录,也就是原图片的目录,注意只到 img 这一级,不是直接存放图片的目录,这里的完整路径是:/root/autodl-tmp/train/dudu/img。
Output folder 是训练出的 Lora 模型保存的目录,训练过程中的采样图片也保存在这个目录下,和 Image folder 使用同一个上级目录就行了,这里的完整路径是:/root/autodl-tmp/train/dudu/model。
Logging folder 顾名思义,就是训练的日志目录,和 Image folder 使用同一个上级目录就行了,这里的完整路径是:/root/autodl-tmp/train/dudu/log。
Model output name 是训练出的 Lora 模型的文件名前缀。
Parameters
Train batch size:同时训练的样本图片数,默认为 1,显存 12G 以上可以设置为 2-6,请根据实际显存使用情况设置,数值越大训练速度越快。
Epoch:训练的轮数,一轮就是把所有的样本图片完成一次训练。一般需要训练多轮,然后根据实际生图情况选择合适的轮次模型。轮数越大,训练需要的时间越多。
Save every N epochs:每隔几轮保存一次训练出的模型,我们想要测试每一轮输出的模型,所以这里填写 1。
Caption Extension:样本图片对应的打标文件的后缀名,之前打标用的是 .txt,这里填上就行了。
Mixed precision 和 Save precision:计算使用的浮点数精度控制,都选择 fp16 就好了,可以节省内存使用。bf16 精度略低,但是表示的整数范围更大,数据类型转换也更容易,不过要看显卡能不能支持。
Number of CPU threads per core:单个 CPU 核心的线程数,可以理解为一个 CPU 核心可以同时干两件事。一般都是 2,可以用 lscpu 等命令查看。不确定的设置为 1。
Seed:训练使用的随机数,随便填一个就行。如果需要提升之前构建过的模型(在 LoRA network weights 中填写之前构建过的模型),使用相同的随机数。
Cache latents:勾选上,可以让训练速度更快。
Learning rate:学习率,可以理解为每次学习走过的长度,值越小,训练的越慢,值越大,步子越大,就不容易找到规律,模型难以收敛。所谓收敛就是通过训练让模型不断得到优化的过程,难以收敛就是无法优化模型,模型生成的图片和样本图片偏差过大。
这一行都是有关学习率的参数设置,也就是怎么让模型收敛的又快又好,都是一些算法,先用我这里默认的吧,不好使再换。
LR Scheduler:学习率调度器,它会自动调整学习率,我一般使用 constant。
LR warmup (% of steps):升温步数,仅在'LR Scheduler'为'constant_with_warmup'时设置,用来控制模型在训练前逐渐增加学习率的步数。
Optimizer: 主要用来更新模型中的权重和偏差等参数,以便更好的拟合数据。有的优化器也可以直接影响学习率。先试试 AdamW8bit 吧。
Max resolution:训练的最大分辨率,设置为样本图片的分辨率即可。
Enable buckets:启动后支持多种分辨率的样本图片,程序会自动裁切,这里我已经都裁切成 768 了,勾不勾选无所谓了。
Text Encoder learning rate:文本编码器的学习率,建议从 0.00005 开始,后面的 Unet learning rate 要比前面的大,设置成 0.0001,设置这个值会导致忽略上面的 Learing rate,保持一致吧。
Network Rank:模型的神经网络参数维度,默认是 8,建议 32、64、128,值越大模型越精细,生成的模型文件也越大。Network Alpha 保持相同的值就好。
Clip skip:默认为 1。设置为大于 1 的数时,在训练时可以跳过一些处理,进而可以避免过拟合,增强模型的泛化能力,但也不易过大,会丢失特征。最好与对应大模型在训练时设置的参数相同。
Memory efficient attention:可以优化显卡内存的使用,但会导致学习速度变慢。
CrossAttention:用于关联图像和提示词的加速算法,一般就选择 xformers,加速图片生成并降低显存占用,xformers 只适用于 N 卡,未来可能应用于其它显卡。
最后还有个采样参数(Samples),使用它可以跟踪训练效果:
Sample every n steps:每学习 N 步,生成一张图片。
Sample every n epochs:每学习 N 轮,生成一张图片,实测开启这个会覆盖 Sample every n steps。
Sample sampler:采样器,和 SD WebUI 中默认的采样器相同。
Sample prompts:采样提示词,这里包括了提示词、反向提示词、图片尺寸、采样步数等。
完成训练 点击'Start Training'之后,还是到控制台中查看处理进度。
因为每张图片学习 100 步,同时训练的数量是 1,所以 25 张图片训练一次就要学习 2500 步,同时指定了轮次是 3,所以总计是 7500 步。
训练完成后,可以看到 100% 的提示,模型已经保存到相应的目录。
测试 模型训练好了,怎么知道好不好使呢?那当然要做测试时,实际抽抽卡。
笨点的办法就是挨个测试,测试不同权重、提示词、大模型等情况下的表现。
这里分享一个快速对比测试的方法,使用 X/Y/Z 图表。
在提示词 中增加变量,如下图所示的样子引用 Lora 模型:
注意这里的:<lora:dudu_log-NUM:WEIGHT>,NUM 和 WEIGHT 是两个变量。
NUM:因为我使用了多轮次的训练,获得了多个 Lora 模型,所以需要测试不同训练轮次的模型表现,这些模型的名字是有规律的:dudu_log-000001、dudu_log-000002、…,每增加一轮训练,生成的模型名字序号就会加 1。NUM 就是代表 000001、000002 的变量。
WEIGHT 是使用当前 Lora 模型的权重变量,这里要测试不同权重下模型的表现。
X 轴类型选择:Prompt S/R,X 轴值填写:NUM,000001,000002
Y 轴类型选择:Prompt S/R,Y 轴值填写:WEIGHT,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1
然后我们就可以对比不同模型、权重下的出图效果,我这里模型 000002 更接近真实图片,权重 0.5-0.9 效果会比较好,1.0 就有点过拟合了。
X/Y/Z 图表中还有很多的维度可以测试,比如大模型、迭代步数、采样器、提示词引导系统等等,有兴趣的可以多去尝试下。
优化 仅分享我的一点经验和体会。上面也提到了一些,这里做个总结。
训练用的图片一定要高清,不要模糊,角色尽量多角度,原图对训练结果的差异特别大。如果没有高清的图,可以去 SD WebUI 的图生图中重绘模糊的图片,或者使用其它的软件高清化图片。
训练用的提示词:在提示词中去掉你想在生成图片时保留的角色特征,增加你允许生成图片时替换的角色特征。比如你想保留角色的长头发,那就在提示词中去掉长头发,这样生成图片时就有很大的概率都是长头发;如果你想要角色的眼睛颜色可以替换,就在训练提示词中写上黑色眼睛,这样生成图片时就可以使用蓝色眼睛的提示来更换角色的眼睛颜色。
多轮次训练:训练一轮的效果可能不好,成本允许的话,建议多训练几轮,然后对比不同轮次下的模型出图效果,选择最适合的那个。
训练步数:每张图片训练多少次才合适?训练的少了提取的特征不够,训练多了容易过拟合。二次元建议 15-30 次,其它图片 50-100 次。训练的图片少,每张图就可以多训练几次,训练的图片多,每张图就可以少训练几次。