GPT-SoVITS 实战:1 分钟语料完成语音合成模型训练
【免费下载链接】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 是一个少样本语音克隆的语音合成工具,用 1 分钟左右的干净语料,就能训练出效果可用的 TTS 模型。典型场景:
- 为角色、主播克隆专属音色
- 免费 GPU 上低成本微调语音模型
- 批量合成多语言配音音频
下面从环境搭建开始,带你完整跑通全流程。
环境准备与一键启动
克隆项目仓库
把源码拉到本地。
git clone https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS cd GPT-SoVITS目录里出现webui.py、install.sh 即表示克隆完成。
创建独立的 Python 环境
项目依赖 Python 3.10,用 conda 隔离,避免污染系统环境。
conda create -n GPTSoVITS python=3.10 -y conda activate GPTSoVITS终端提示符前出现(GPTSoVITS)即表示环境已激活。
安装依赖并下载预训练模型
运行 install.sh 一次性装好 PyTorch 并拉取预训练权重。--device按你的 CUDA 版本选,--source按网络情况选。
bash install.sh --device CU126 --source HF --download-uvr5脚本结束且没有红色[ERROR]输出,即表示安装成功。
模型与数据准备
对比三个模型权重下载源
| 来源 | 适用场景 | 命令前缀 |
|---|---|---|
| HF | 海外服务器、直连 Hugging Face 正常 | bash install.sh --source HF |
| HF-Mirror | 国内访问 HF 慢,走镜像加速 | bash install.sh --source HF-Mirror |
| ModelScope | 国内服务器首选,无需代理 | bash install.sh --source ModelScope |
三个源只是下载通道,落到本地的文件完全一致。
校验下载的模型文件
预训练权重统一放在GPT_SoVITS/pretrained_models/,确认关键文件存在且非零体积。
ls -lh GPT_SoVITS/pretrained_models/chinese-hubert-base GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large两条目录都有几百 MB 到数 GB 的条目,说明权重完整。
放置待训练的音色数据
原始音频和对应文本清单放到同一目录,例如logs/slicer_opt存切片音频,同级放一份文本文件。切片、降噪、人声分离都可在 webui.py 的主界面里点按钮完成,对应 tools/slice_audio.py、tools/cmd-denoise.py、tools/uvr5/webui.py。
核心训练与推理流程
数据预处理:三步特征提取
在 WebUI 的"0-数据集获取"页依次执行,背后对应三个脚本:
python GPT_SoVITS/prepare_datasets/1-get-text.py python GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py python GPT_SoVITS/prepare_datasets/3-get-semantic.py第一步做文本分词,输出2-name2text.txt;第二步提取自监督语音特征;第三步提取语义 Token,输出6-name2semantic.tsv。三个文件都在实验目录下,是后面训练的输入。
配置训练超参数
S1(GPT)阶段读 GPT_SoVITS/configs/s1longer-v2.yaml,S2(SoVITS)阶段读 GPT_SoVITS/configs/s2.json。在 WebUI 的"1A/1B"页填好实验名后,参数会写入临时配置,无需手改仓库文件。
| 参数 | 默认值 | 调大/调小的影响 |
|---|---|---|
| batch_size | S1 为 8,S2 为 32 | 调大显存占用更高、单步更稳;调小可救显存,但收敛变慢 |
| epochs | S1 为 20,S2 为 100 | 调大音色更像但易过拟合;调小则学习不充分 |
| learning_rate | S1 为 0.01,S2 为 0.0001 | 调大收敛快但易震荡;调小更稳但耗时 |
| save_every_n_epoch | 1 | 调大减少磁盘占用;调小留更多历史权重可回退 |
| text_low_lr_rate | 0.4 | S2 专用,控制文本嵌入的学习速率,一般不动 |
执行训练:先 S1 后 S2
S1 训练语义模型,S2 训练声学模型,顺序不能反。
python GPT_SoVITS/s1_train.py --config_file /tmp/tmp_s1.yaml python GPT_SoVITS/s2_train.py --config /tmp/tmp_s2.json直接命令行跑的话,先用 WebUI 生成一次临时配置,把里面的路径抄出来即可;更省事的办法是全程用 WebUI 按钮,它会替你拼好命令。
效果验证:跑一次最小合成
训练完成后,用 GPT_SoVITS/inference_cli.py 合成一句试听:
python GPT_SoVITS/inference_cli.py --gpt_model GPT_weights/我的实验-e10.ckpt --sovits_model SoVITS_weights/我的实验_e10_s500.pth --ref_audio logs/slicer_opt/0001.wav --ref_text logs/ref_text.txt --output_path out_wavout_wav目录生成若干.wav文件,人声与参考音色接近、无明显电流音,即验证通过。
部署与模型导出
启动 WebUI:
export is_share=True && python webui.py本地访问http://localhost:9874,TTS 推理页在 9872 端口;is_share=True时会额外给出一条公共链接,适合 Colab 免费 GPU 部署。
批量合成用一行命令:
python GPT_SoVITS/inference_cli.py --gpt_model 权重.ckpt --sovits_model 权重.pth --ref_audio 参考.wav --ref_text 参考文本.txt --output_path 输出目录模型导出为 ONNX 用 GPT_SoVITS/export_torch_script.py,参数与上面推理命令相同,产物输出到指定目录。
踩坑速查
显存 OOM
现象:训练中途报 CUDA out of memory。
原因:batch_size 超过当前显存上限。
解法:
# 在 WebUI 的 1B 页把 batch size 减半,S2 页可勾选开启梯度检查点训练中断后丢失进度
现象:Colab 掉线,任务重跑后从零开始。
原因:换了实验名或输出目录,找不到旧断点。
解法:保持实验名不变。S1 会自动加载logs_s1/*/ckpt下最新断点,S2 自动加载G_*.pth,重跑同一目录即断点续训。
预训练模型文件缺失
现象:启动时报"以下模型不存在"警告。
原因:安装时跳过了模型下载或选错源。
解法:
bash install.sh --device CU126 --source ModelScope文本文件与音频对不上
现象:第一步特征提取后得到空文本文件,训练失败。
原因:文本文件里的文件名和音频文件名不一致。
解法:
# 用 WebUI 的语音切分功能重新生成,它会同步产出音频和对应文本文件【免费下载链接】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),仅供参考