GPT-SoVITS 报 NameError: name 'hps' is not defined?核对三处就能恢复语音合成
【免费下载链接】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 的 WebUI 里加载模型、点击生成时,如果你看到NameError: name 'hps' is not defined(解释器找不到 hps 这个变量),先别慌。这类报错绝大多数是代码版本和模型版本没对齐造成的。这篇给你讲清报错含义、修复顺序和环境自查项,照着做通常就能合成语音。
这个报错到底在说什么
先翻译一下报错本身:
NameError: name 'hps' is not defined(hps 这个变量在被使用的那一行之前,还没有被赋值)
hps 是 hparams 的缩写,意思是「超参数」。在 GPT-SoVITS 里它不是随便起的名字,而是从模型文件里读出来的一份配置:采样率、滤波器长度、音高范围这些数值都放在里面。WebUI 加载 SoVITS 模型时,会先把模型文件里的 config 部分赋给 hps,之后计算音频时长、构建合成模型、提取参考音色特征,每一步都要用到它。
所以在int(hps.data.sampling_rate * 0.3)这类计算行上抛错,本质是「赋值 hps 的那一步没走到」。最常见的原因是:你手里的 GPT_SoVITS/inference_webui.py(WebUI 推理主脚本)是旧版本,旧版里赋值时机缺失或位置不对,后面一调用就报错。
判断依据可以记一句:只要报错发生在「点生成、模型刚开始加载」的瞬间,先怀疑代码与模型版本脱节,而不是自己填的参数填错了。
修复 GPT-SoVITS NameError 报错:按顺序做这三步
第一步:同步推理脚本到最新版本
需要把 GPT_SoVITS/inference_webui.py 更新到最新版。新版在模型加载流程里会先读取模型文件,再把其中的 config 赋值给 hps,这一步补齐后,hps 在合成开始前就已定义好。
备注:如果你只想局部更新,可以单独替换这一个文件,但建议同批用到的文件保持同一版本,否则容易引出新的连带报错。
第二步:核对 PyTorch 版本
PyTorch 是本项目运行模型的核心深度学习框架。建议版本为 2.6.0 左右。可以先运行pip show torch查看当前版本,低于推荐值时建议升级。也可以直接用仓库自带的 install.sh 安装依赖,它会根据你的硬件(CUDA 版本、是否 Apple 芯片)自动挑选对应的 wheel 包,装完预期结果是torch.load能正常读取模型文件。
第三步:给加载调用补上 weights_only 参数
weights_only是torch.load()的一个参数,控制加载时是否做严格类型校验。新版 PyTorch 默认weights_only=True,会把模型文件里的配置字典拒掉。补上weights_only=False后,模型文件就能完整读出来。
这一步在新版代码里已经做过了:GPT_SoVITS/inference_webui.py 和 GPT_SoVITS/TTS_infer_pack/TTS.py 中的torch.load调用都带了该参数,所以完成第一步后通常顺带解决。只有你还在维护旧代码分支时,才需要手动给加载调用补上。
修复没生效?对一遍这份 GPT-SoVITS 环境自查清单
三步做完仍报错时,逐项核对:
- Python 解释器版本:建议 3.9.x。某些环境下过新的解释器会让依赖库装不上或行为不一致,可以先确认再排查。
- PyTorch 版本:
pip show torch查看,与官方安装脚本给出的版本对应,不建议手工混搭来源。 - 依赖完整性:以仓库的 requirements.txt 为准完整安装。注意 ARM 平台装的是
onnxruntime,x86 平台装的是onnxruntime-gpu,两者不同。 - 模型与代码匹配:v1 / v2 / v3 模型文件结构不同,代码会从权重形状自动推断版本。如果你刚换了模型,先确认 WebUI 里的 model_version 选项和模型实际版本一致。
- 代码文件同版本:手动替换过个别文件时,检查整个仓库没有新旧两个版本的文件混用。
GPT-SoVITS 加载模型时的几个连带报错
ModuleNotFoundError: No module named 'text.LangSegmenter'
现象:WebUI 一启动就崩,提示找不到text.LangSegmenter模块。原因:这个模块在 GPT_SoVITS/text/LangSegmenter/ 下,负责按语言切分混合文本,个别旧版目录结构里没有它。处理:把整个 GPT_SoVITS/ 目录同步到最新版,不要逐个文件补。
加载模型时提示 weights_only 相关错误
现象:报错信息里带weights_only=True字样,发生在读取模型文件那一刻。原因:较新的 PyTorch 默认严格加载,模型文件里的 config 字典被拦截。处理:确认加载调用的代码已是带weights_only=False的新版,或升级 PyTorch 后重新跑一遍安装脚本。
切换 v1 / v2 / v3 模型时报形状不匹配
现象:加载时报enc_p.text_embedding.weight之类的张量形状错误。原因:模型文件和 WebUI 里手动选择的版本不一致,代码按错误版本去解析权重。处理:把 model_version 交还给自动推断,让代码根据模型文件里的权重形状自己判定版本,手动指定仅用于特殊场景。
写在最后
这类 NameError 的根子基本都在「版本脱节」上:推理脚本要最新,PyTorch 要匹配,加载参数要跟上。修复之后建议留意一下官方更新日志(docs/cn/Changelog_CN.md),新版本发布时同步整份文件,往往比单独追某一个 bug 更省事。
【免费下载链接】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),仅供参考