
report errors from training log (e.g., missing output directory)
快速结论:此报错通常发生在用户未填写或填错“输出目录”(Output Directory)时,导致系统尝试在根目录下写入配置文件(如 /config_xxx.toml)而引发权限错误。优先排查是否遗漏了输出目录,或该路径是否不可写。
问题场景
用户在 Kohya SS 的 Textual Inversion、LoRA、DreamBooth、finetune 等训练标签页中启动训练时,因未指定输出目录(或指定了不可写目录),系统在生成训练配置文件时报错。错误以 Gradio 跟踪栈形式出现在日志中,UI 未显示明确提示。
报错原文
22:03:47-718569 INFO Start training TI...
...
22:03:47-726346 INFO lr_warmup_steps = 40
Traceback (most recent call last):
File "/home/tomohara/programs/python/kohya_ss/venv/lib/python3.10/site-packages/gradio/queueing.py", line 536, in process_events
response = await route_utils.call_process_api(
...
File "/tpo/misc/programs/python/kohya_ss/kohya_gui/textual_inversion_gui.py", line 890, in train_model
with open(tmpfilename, "w", encoding="utf-8") as toml_file:
PermissionError: [Errno 13] Permission denied: '/config_textual_inversion-20250326-220347.toml'
原因分析
UI 的目录选择框允许空字符串(认为可选),但训练流程会根据输出目录拼接配置文件名,例如:{output_dir}/config_TextualInversion-{timestamp}.toml。当输出目录为空时,在 Unix 系统上拼接结果成为根目录下的绝对路径(如 /config_xxx.toml),普通用户无权写入,触发 PermissionError。该异常未被训练入口捕获,因而未向用户呈现可操作的错误消息。
环境排查
- Kohya SS 版本(重点检查是否包含 #3134 的修复)
- 操作系统(Windows/Linux/macOS)——路径拼接行为在 Unix 上影响更严重
- 输出目录是否为空白或不可写
解决步骤
- 确保输出目录非空且可写:在训练标签页中,明确指定一个有写入权限的目录(如
./output或绝对路径)。 - 升级软件或手动修补:本项目已针对该问题设计修复方案,需将对应修改添加到
kohya_gui/textual_inversion_gui.py及其它类似标签页的学习入口(如 LoRA、DreamBooth、finetune)。如果你使用自定义分支,请确保包含以下改动:- 在写入配置 TOML 文件前,检查输出目录是否为空;若为空则拒绝训练并返回用户可读消息。
- 使用安全路径拼接(如
os.path.join,确保空输出目录不会导致根目录写法)。 - 捕获
PermissionError等文件写入异常,将简要提示送到 UI,完整细节留给日志。 - 按钮状态在失败后恢复正常(Start 可点击、Stop 隐藏)。
- 优先尝试手动校验:如果还没有对应修复补丁,可在启动训练前先手动检查输出目录是否为空且可写,这是最快速的临时方案。
验证方法
启动训练,观察:
- 如果输出目录为空,UI 应直接弹出明确错误消息(如 “Output directory is required”),训练不启动,Start 按钮保持可用。
- 如果输出目录非空但不可写,UI 应显示权限失败提示,日志保留完整异常栈。
- 如果输出目录正常且可写,训练应照常进行,不产生根目录下的 TOML 文件。



