![[BUG] Overwrite confirmation blocks SSH training when no --headless flag is provided](https://www.chat-gpts.plus/wp-content/uploads/2026/07/3570-a4251cd4.jpg)
[BUG] Overwrite confirmation blocks SSH training when no –headless flag is provided
快速结论:该报错发生在通过 SSH 远程运行 Kohya SS 但未使用 --headless 参数时。优先排查是否在 SSH 会话中使用了 --headless 参数启动 GUI,这是官方推荐的远程运行方式。
问题场景
用户在远程机器上通过 SSH 运行 Kohya SS GUI(使用命令 python kohya_gui.py 未加 --headless 参数),当训练 LoRA、Dreambooth 等模型时,如果 --output_name 指定的输出名称已经存在,easygui.ynbox() 会弹出一个阻塞的 GUI 确认对话框,该对话框在 SSH 会话中无法交互,导致训练进程永久挂起。
报错原文
# 不会产生 Python 错误栈,表现为进程阻塞卡死
# 关键代码路径:kohya_gui/common_gui.py -> check_if_model_exist() -> easygui.ynbox()
# 错误本质:GUI 模态对话框在无显示服务器的 SSH 环境中阻塞等待用户输入
原因分析
可能原因:用户通过 SSH 启动 Kohya SS GUI 时未传递 --headless 参数。当输出文件已存在时,check_if_model_exist() 函数会调用 easygui.ynbox() 弹出覆盖确认弹窗。该弹窗是服务器端的原生 GUI 对话框,在纯 SSH 终端环境中无法显示和交互,导致进程永久阻塞。注意:commit 60d99ec 恢复使用了 easygui,但 headless 模式下的跳过逻辑(直接返回 False)仍然是正确的。
环境排查
- 确认是否通过 SSH 或其他无图形显示器的远程方式运行
- 确认启动命令中是否包含
--headless参数 - 确认 Kohya SS 版本是否为包含 commit
60d99ec的版本(2025-07-13 之后) - 确认
output_name对应的文件是否已存在于输出目录中
解决步骤
- (可优先尝试)使用
--headless参数启动:将启动命令改为python kohya_gui.py --listen 0.0.0.0 --server_port <端口号> --headless。headless 模式下check_if_model_exist()会跳过easygui.ynbox()弹窗,自动覆盖已存在的模型文件。 - 通过浏览器访问:使用
--headless启动后,通过浏览器访问http://你的服务器IP:指定端口来操作 GUI。 - 更改输出名称:如果不想覆盖已有模型,可以在 GUI 的训练参数中修改
output_name为一个不存在的名称。 - 删除已有文件:手动删除输出目录中对应
output_name的模型文件(如 .safetensors),然后重新运行训练。
验证方法
确认使用 --headless 参数启动后,训练可以正常开始,不会出现进程挂起的情况。如果不使用 --headless,当需要覆盖已存在模型时,进程应能立即出现覆盖警告并通过浏览器进行操作(如果浏览器可用且 easygui 被替换为 Gradio 通知)。



