report errors from training log (e.g., missing output directory)

Kohya SS 训练时如果输出目录(output dir)留空,GUI 会把 per-run TOML 配置写成根目录绝对路径并触发 PermissionError ,导致训练直接失败、日志里只有 Gradio traceback。优先排查输出目录是否填写且可写。

快速结论:Kohya SS 训练时如果输出目录(output dir)留空,GUI 会把 per-run TOML 配置写成根目录绝对路径并触发 PermissionError,导致训练直接失败、日志里只有 Gradio traceback。优先排查输出目录是否填写且可写。

适用环境:Issue 中确认的环境为 Kohya SS(kohya_gui),Python 3.10(venv 路径显示 python3.10),涉及 Textual Inversion 训练标签页;Linux 环境(路径为 Unix 风格,出现 Permission denied)。其余 CUDA、PyTorch、显卡信息 Issue 未提供。

最快修复方案:暂无确认的一步修复方案。Issue 描述的是增强需求,尚未包含已验证的修复提交;在输出目录为空时先手动填写一个存在且可写的目录,可绕过该报错。

注意事项:Issue 指出空白输出目录当前被“可选”校验放过,因此报错并非操作失误导致。其他训练标签页(LoRA、DreamBooth、finetune 等)也会写入同类型的 config_<mode>-{timestamp}.toml,存在同样风险。修复尚未合并,Issue 仅作为计划与验收标准。

问题场景

用户在 Kohya SS GUI 中启动 Textual Inversion 训练,但忘记(或未被告知需要)填写输出目录。训练入口在写出本次运行的 TOML 配置文件时,因为输出目录为空而失败,Gradio 队列中抛出的异常只以完整 traceback 形式写进日志,界面上没有明确提示,用户只能从日志里“扒”原因。

报错原文

22:03:47-718569 INFO     Start training TI...
...
22:03:47-726346 INFO     lr_warmup_steps = 40
Traceback (most recent call last):
  File ".../gradio/queueing.py", line 536, in process_events
    response = await route_utils.call_process_api(
...
  File ".../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'

原因分析

根据 Issue 讨论,原因为:共享的目录路径校验把空路径视为合法(因为该字段被当作可选)。训练标签页会把本次运行的 TOML 配置写到输出目录下,路径由字符串拼接得到:{output_dir}/config_<mode>-{timestamp}.toml。当输出目录为空时,拼接结果变成文件系统根目录下的绝对路径(Unix 上例如 /config_textual_inversion-….toml),普通用户对该路径没有写权限,于是 open() 抛出 PermissionError。该异常在训练准备阶段没有被捕获,因此直接冒泡到 Gradio,日志里只有 traceback,界面没有简短可操作的提示。

可能的扩展影响:同样的 TOML 写入模式存在于 LoRA、DreamBooth、finetune 等其他训练模式,因此这些入口也可能出现同样的问题。

环境排查

  • 确认 Python 版本与虚拟环境(Issue 中为 Python 3.10 的 venv)。
  • 确认操作系统为 Linux/Unix 系(路径拼接为根绝对路径的行为与平台相关)。
  • 确认当前运行用户在目标输出目录下是否具有写权限。
  • 检查使用的训练标签页(Textual Inversion、LoRA、DreamBooth、finetune 等)是否都使用同一套输出目录与 TOML 写入逻辑。
  • 确认是否处于 print-only / dry-run 模式:该模式下不应启动训练进程。

解决步骤

  1. 在 GUI 对应训练标签页中,确认“输出目录(output dir / output folder)”字段已填写,且指向一个存在、当前用户可写的目录,例如用户家目录下的某个子目录。
  2. 避免把输出目录留空;也不要填写根目录等无写权限路径。
  3. 若输出目录非空但仍报 PermissionError,检查该目录的属主与权限,确认运行 Kohya SS 的用户可在其中创建 config_<mode>-{timestamp}.toml。
  4. 提交训练前,先查看日志中是否已开始写 TOML,确认路径落在你填写的输出目录内,而不是根目录下。
  5. 如需从根上修复,可关注 Issue 中提到的增强:对空白输出目录做必填校验、改用 join 语义拼接路径、捕获写入异常并弹出用户可见提示;同时覆盖 Textual Inversion 之外的训练入口。该修复尚未在 Issue 中确认落地,可优先尝试跟踪对应 PR/提交。

验证方法

填好可写输出目录后重新启动训练,确认:1)日志中 TOML 路径为 <output_dir>/config_<mode>-{timestamp}.toml,不再出现根目录下的 /config_….toml;2)不再抛出 PermissionError;3)训练进程正常启动。若界面在训练失败后卡在运行状态,可参照 Issue 中“早期失败应恢复 Start/Stop 按钮状态”的验收标准进行核对。

参考来源

bmaltais/kohya_ss #3134

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26087

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注