GPT-SoVITS 报错别慌:5 类高频故障的 3 分钟排查修复指南
【免费下载链接】GPT-SoVITS1 min voice data can also be used to train a good TTS model! (few shot voice cloning)项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS
如果你在用 GPT-SoVITS 做零样本声音克隆、微调训练或者调它的 TTS 接口时终端突然甩出一串红字,先别急着删库重装。这份错误排查指南按"装环境 → 起服务 → 调接口 → 跑训练 → 嫌太慢"的顺序,把每一类最常见的报错和对应命令都整理好了。照着下面这张表找到你卡住的那一步,点过去,一般三分钟就能解决。
你现在卡在哪一步?
| 你卡在哪一步 | 直接看这里 |
|---|---|
| 装环境时依赖装不上 | 依赖冲突怎么修 |
| 模型文件找不到 | 预训练模型缺失 |
| 服务起不来、端口被占 | 释放被占端口 |
| 显存爆掉、CUDA OOM | 显存不足与 batch_size |
| 接口返回 400 | 必填字段核对 |
| 训练中途崩溃 | 数据与参数 |
| 合成太慢想提速 | 推理提速三板斧 |
装环境:先搞定依赖和预训练模型 🐍
ModuleNotFoundError 和依赖冲突
终端里蹦出ModuleNotFoundError: No module named ...之类的提示,多半不是代码问题,而是环境里混进了别的项目的 Python 包,或者上次安装中途中断了。install.sh 把 PyTorch、requirements.txt和extra-req.txt、预训练模型、G2PW 多音字模型、NLTK 数据这些活全包了,所以最省事的做法是回 conda 环境里重跑一遍:
bash install.sh --device CU128 --source ModelScope--device选CU126/CU128/MPS/CPU,--source选HF/HF-Mirror/ModelScope,按你机器和网络情况挑。跑完再执行下面这条,能正常打印版本号就说明依赖齐了:
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"预训练模型缺失(路径不存在警告)
WebUI 刚启动时终端打印出一串warning: 以下模型不存在:,后面跟着几个GPT_SoVITS/pretrained_models/开头的路径——这是 webui.py 里check_pretrained_is_exist在点名,比如chinese-hubert-base、chinese-roberta-wwm-ext-large和对应版本的s2G/s2D权重。原因是 git 仓库本身不带这几个模型,要单独下载。注意GPT_SoVITS/download.py其实是多音字模型相关脚本,不要指望它来补预训练模型;模型下载统一由 install.sh 完成。所以回到上一步,用 install.sh 重跑一遍,它会解压出完整的 pretrained_models 目录。警告消失即修好。
起服务:端口和显存 🔌
端口被占了,服务起不来
终端提示Address already in use,说明端口已经有进程蹲着了。主 WebUI 默认端口是 config.py 里的webui_port_main = 9874(旁边还有 9871~9873 给切片、推理、UVR5 用,API 是 9880),改哪个就改对应那行。不想改配置的话,先查出占着端口的进程再结束它:
lsof -i:9874 kill -9 <PID>把<PID>换成上一条查到的进程号。端口腾出来之后重新启动 webui.py,终端能正常刷出日志就是成功了。
显存不足(CUDA OOM)
torch.cuda.OutOfMemoryError出现时不用慌,webui.py 启动时其实已经按显存算好了default_batch_size和default_max_batch_size(上限是默认值的 3 倍),而且一旦走 FP32 精度还会自动把 batch_size 折半。所以修法是:把训练面板里的batch_size往默认值靠拢、别再往上加;4GB 显存的卡从 1 开始试;实在还爆,就在 WebUI 训练选项里打开if_grad_ckpt(梯度检查点,用多算一遍换显存占用)。另外 config.py 里is_half是启动时自动探测的,老卡上会自动落到 FP32,不用手动折腾。
调接口:参数和合成 ⚙️
接口返回 400:必填字段没给全
接口返回了{"message": "text_lang is required"}这类 JSON 时,说明请求体里缺字段。api_v2.py 会依次校验:text不能为空、ref_audio_path必须指向一份真实存在的 WAV 参考音频、text_lang要在当前模型版本支持的语言列表内,语言不支持时会直接告诉你哪个版本不认这个语言。对着 api_v2.py 文件头部的请求示例把参数补齐,再发一次,拿到 200 和音频流就通了。
"tts failed":合成环节挂了
如果状态码还是 400 但 message 是"tts failed",响应里的Exception字段写着具体异常,先看它。排查按这个顺序来:确认参考音频是格式正常的 WAV 且时长足够短、文本没异常长;把text_split_method换个策略试试(可选值见 GPT_SoVITS/TTS_infer_pack/text_segmentation_method.py,cut0~cut5是常用的几档);显存吃紧的话把batch_size降到 1。
跑训练:数据与参数 🏋️
ZeroDivisionError 与 NaN:多半是数据的事
训练中途崩出ZeroDivisionError,或者 loss 一路变成 NaN,最常见的根源是训练集不干净:有太短甚至没有声音的音频、标注文本和音频对不上。先把这类样本从数据集里剔掉重新跑;还不行的话,打开if_grad_ckpt(webui.py 的 s2 训练流程会读取这个开关)压低峰值显存,同时把batch_size压到 1 观察 loss 曲线是否恢复。
GPT 权重加载失败
切换模型时终端提示权重加载失败,先确认.ckpt文件大小是否正常(几 KB 的文件多半是下载不完整);再确认选的底模版本和 GPT/SoVITS 权重配套,v3 与 v4 的 GPT 权重本来就共用s1v3.ckpt,别自己乱拷文件。文件确认没问题仍报损坏的话,可以跑 GPT_SoVITS/process_ckpt.py 把 checkpoint 重新规整保存一遍(它还能顺带处理中文路径下保存失败的老问题)。
推理提速三板斧 🚀
- 第一斧:api_v2.py 里
parallel_infer默认就是True,如果你手动关掉过,把它改回来。 - 第二斧:日常合成走 WebUI 的"fast 推理"入口,底层就是 GPT_SoVITS/inference_webui_fast.py,比标准推理快不少。
- 第三斧:追求极致吞吐就用 TorchScript/ONNX 导出路线,跑 GPT_SoVITS/export_torch_script.py(带版本号参数,v3/v4 用对应的 v3v4 脚本),导出后加载速度会有提升,具体用法以脚本头部注释为准。
版本与显存速查
- v1 / v2:Python 3.8+,CUDA 11.7,最低 4GB 显存
- v2Pro:Python 3.9+,CUDA 12.1,最低 6GB 显存
- v3 / v4:Python 3.10+,CUDA 12.6(install.sh 直接支持 CU126/CU128),最低 8GB 显存
版本之间权重不通用,混着选会报加载错误。
自检命令清单 ✅
贴到终端里跑一遍,把输出截图存好:
python -c 'import torch; print("cuda:", torch.cuda.is_available()); print([torch.cuda.get_device_properties(i).total_memory // 1024 // 1024 // 1024 for i in range(torch.cuda.device_count())])'python -c 'import config; print(config.is_half, config.infer_device, config.webui_port_main, config.api_port)'python -c 'from GPT_SoVITS.TTS_infer_pack.TTS import TTS; print(TTS("GPT_SoVITS/configs/tts_infer.yaml").version)'三条都能正常输出,基本可以判定环境、配置和模型都就绪了。
高频坑位提醒
- 端口别记错:主 WebUI 默认是 9874、API 是 9880,网上一些旧教程写的 9870 是过时信息,改端口前先看 config.py 里的实际值。
- 16 系显卡强制 FP32:GTX 16 系因为半精度支持有限,config.py 里的
get_device_dtype_sm会自动把精度降到 float32,并联动把训练 batch_size 折半,这不是 bug。 - 训练目录别带中文路径:尤其训日语数据时,路径里含中文字符容易触发 ASR 和保存环节的异常,把项目挪到纯英文路径下再跑最稳。
到这里,90% 的报错应该都找到归宿了。如果没对上号,去 GitHub Issues 提单时记得附上完整日志和复现步骤,能帮维护者更快定位问题。
【免费下载链接】GPT-SoVITS1 min voice data can also be used to train a good TTS model! (few shot voice cloning)项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考