快速结论:该报错发生在通过 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 通知)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


