Kohya_SS学习率自动填充异常?3步快速定位并修复的完整指南
【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
用 Kohya_SS 训练 LoRA 时,点「加载预设」后学习率输入框要么空着、要么还是旧值,是不是让你怀疑人生?不解决它,要么只能盲填数值、训练效果打折,要么每次开新任务都要手工抄一遍参数。这篇文章带你从界面现象一路追到配置文件,把 Kohya_SS 学习率自动填充的问题彻底搞清楚。
先看你卡在哪:学习率自动填充的三类典型现象
Kohya_SS 的学习率输入框(Learning rate / Learning rate TE)初值来自两个地方:启动时读取的config.toml,以及你手动加载的预设 JSON。GUI 控件初始化逻辑在 kohya_gui/class_basic_training.py,预设加载逻辑在 kohya_gui/class_configuration_file.py。按「现象 → 指向 → 检查位置」对号入座:
| 现象 | 指向原因 | 检查位置 |
|---|---|---|
| 所有输入框都是同一默认值(如 1e-6),不随预设变化 | config.toml未创建或[basic]段缺learning_rate项 | 根目录 config example.toml 复制为config.toml并检查 |
| 选了预设、学习率却不更新 | 只改了下拉框没点加载按钮;或config_dir指向了空目录 | GUI 顶部「Load/Save Config file」下拉框旁的↩️按钮;config.toml的[configuration] config_dir |
| 预设列表下拉是空的 | 预设目录里没有.json文件,或路径含空格被截断 | presets/ 下的lora/、finetune/子目录 |
| 勾选/取消 SDXL 后 TE 学习率框消失或错位 | 这是正常行为,见下文说明 | kohya_gui/class_basic_training.py 中的update_learning_rate_te |
| 保存配置后重开界面,学习率丢失 | 保存按钮没点,或保存到了别的目录 | config.toml的[configuration] config_dir |
其中第 4 行新手最容易误判:LoRA 模式只有一个 Learning rate 框;FineTune / DreamBooth 模式会多出 TE(文本编码器)学习率框;而 SDXL 模型的文本编码器是 TE1/TE2 两个,勾选 SDXL 后原来的 TE 框会被隐藏、换成 TE1/TE2。所以「切换模型类型后学习率框变了」本身不是 bug——框换了、值没跟上才是问题。
修复路径:按依赖顺序三步走
第一步:先把 config.toml 落地(一切默认值的来源)
做什么:把根目录的 config example.toml 复制一份,改名为config.toml(文件名必须精确,GUI 默认只读这个路径),确认里面[basic]段有这几行:
learning_rate = 0.0001(Unet 学习率)learning_rate_te = 0.0001(TE 学习率)learning_rate_te1/learning_rate_te2(SDXL 的 TE1/TE2)[configuration] config_dir = "./presets"(预设的加载/保存目录)
为什么:GUI 启动时每个学习率框的初值都是config.get("basic.learning_rate", 默认值)——配置里没有这一项,框里就是你看到的写死默认值,加载预设前它不会变。
做完后应该看到:重新打开 GUI,学习率框显示config.toml里的数值,而不是千篇一律的 1e-6。
第二步:确认预设文件在位,并真正触发加载
做什么:
- 进入 presets/,确认
lora/、finetune/、dreambooth/子目录里.json文件齐全(比如presets/lora/SDXL - LoRA AI_characters standard v1.0.json里就有learning_rate、text_encoder_lr、unet_lr三个字段)。 - 如果目录缺失或文件不全,重新获取完整仓库:
git clone https://gitcode.com/GitHub_Trending/ko/kohya_ss,把presets/下缺失的子目录补回去。 - 回到 GUI:在下拉框选预设后,务必点右侧
↩️按钮(加载),旁边还有 📂(打开目录)和 💾(保存)。选完下拉框不点按钮,界面不会刷新任何数值。
为什么:下拉框的选项列表由list_files扫描config_dir下的.json生成;扫描到文件 ≠ 文件被加载。
做完后应该看到:点↩️后,Learning rate、TE 等输入框数值立即变成预设里的值,LR warmup、optimizer 等字段也会联动变化。
第三步:兜底——手动设置学习率
前两步做完仍然异常时,直接手工填值也能立刻开训。参考值(LoRA 训练):
| 模型 | Unet 学习率 | TE 学习率 |
|---|---|---|
| SDXL | 2e-5 左右 | 2e-5 左右 |
| SD 1.5 | 1e-4 左右 | 1e-4 左右 |
官方文档 docs/LoRA/top_level.md 给出的 SDXL + Adafactor 示例是learning_rate = 4e-7;docs/LoRA/options.md 和各预设 JSON 可作为不同优化器下的对照。填好后点 💾 保存成自己的预设,下次就不用再手敲了。
进阶调优:学习率配对了才算调到位
- 学习率与优化器强绑定:AdamW8bit 对 LoRA 友好,数值可以给高一点;Adafactor 自适应,配 4e-7 这种小值更稳;Lion / Prodigy 又是另一套量级。换预设时学习率、优化器、调度器要一起换,只抄学习率是最常见的翻车点。
- 调度器决定学习率的「曲线」:
cosine先高后低,适合大多数 LoRA;constant配 warmup 适合短训练。注意 GUI 里选了constant后 warmup 会被自动清零——这不是失效,是设计如此。 - 常见误区:
- 以为「学习率越大收敛越快」——过大直接炸图、出糊图,LoRA 尤其敏感;
- 批次翻倍时把学习率也翻倍——梯度累积(gradient_accumulation_steps)等效放大的是批次,不一定需要动学习率;
- FineTune 模式把 TE 学习率设得和 Unet 一样高——文本编码器通常要更保守,很多社区做法是训练后期用「Stop TE」滑杆直接停掉 TE 训练。
高频疑问
Q:下拉框里能看到预设,为什么点 ↩️ 后数值没变?A:检查config.toml的[configuration] config_dir是否和实际预设所在目录一致(默认./presets)。路径指向空目录时,下拉能留旧选项但加载读不到文件。
Q:LoRA 界面怎么只有 Learning rate 一个框,没有 TE?A:正常。单框模式是 LoRA 训练;FineTune / DreamBooth 才会出现 TE / TE1 / TE2 框,SDXL 勾选后还会切换成 TE1+TE2。
Q:我改了学习率,为什么下次开 GUI 又变回 0.0001?A:你改的是界面值,没点 💾 保存。保存后数值会写进预设 JSON;想改的是「启动默认值」,则应改config.toml的[basic]段。
Q:预设文件里 learning_rate 是 2e-05,GUI 显示 2e-05 算正常吗?A:正常。科学计数法等价于 0.00002,GUI 直接按文件里的数值显示。
写在最后
配置落地、预设在位、加载触发,三步走完,学习率自动填充基本不会再出问题。如果还有异常,对照 docs/train_db_README.md 和相关 README,或在 Kohya_SS 社区论坛发一下你的config.toml和截图,通常很快有人帮你定位。
【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考