本指南基于实际操作场景优化,补充 GPU 配置、数据处理等关键细节,确保从环境搭建到模型训练全程可落地。适用于 SoVITS 4.0+ 版本,新手可按步骤逐步执行。
Miniconda 用于创建独立虚拟环境,避免 Python 版本/依赖冲突,推荐优先使用提供的安装包:
Plugin\Installation Package\Miniconda3-latest-Windows-x86_64.exe,或从 Miniconda 官网 下载(选择「Windows 64-bit」版本)。conda 命令)。C:\ProgramData\miniconda3),避免中文、空格或特殊字符路径(如“D:\我的软件”会导致命令执行失败)。C:\ProgramData\miniconda3 和 C:\ProgramData\miniconda3\Scripts),添加后需重启电脑生效。
Plugin\ 目录完整复制到 无中文、无空格 的路径下,例如 D:\python\Plugin\SoVITS\(路径越简单越不容易出错)。so-vits-svc 源码目录结构完整,核心文件需包含:
train.py(训练)、inference_main.py(推理)configs\config.jsonrequirements.txtresample.py、preprocess_hubert_f0.py选择以下任一方式启动,确保命令行前缀显示 (base)(表示默认环境已激活):
Win + R 输入 cmd 打开命令提示符,执行以下命令激活 Miniconda:
%WINDIR%\System32\cmd.exe "/K" C:\ProgramData\miniconda3\Scripts\activate.bat C:\ProgramData\miniconda3
在 Anaconda Prompt 中,先切换到 so-vits-svc 根目录(需替换为你的实际路径):
# 1. 切换到项目所在磁盘(例如 D 盘,若在 E 盘则输入 E:) D: # 2. 进入源码目录(替换为你的实际路径,注意路径分隔符为 \) cd D:\python\Plugin\SoVITS\so-vits-svc
执行后,命令行前缀应显示 (base) D:\python\Plugin\SoVITS\so-vits-svc>,表示已进入目标目录。
conda create -n so-vits-3.9 python=3.9 -y
参数说明:-n so-vits-3.9 为环境命名,-y 自动确认安装。创建完成后,环境文件会保存在 C:\Users\你的用户名\.conda\envs\so-vits-3.9。
conda activate so-vits-3.9
激活成功后,命令行前缀会从 (base) 变为 (so-vits-3.9),后续所有操作均在该环境中执行。
按顺序执行以下命令,全程使用清华源(-i https://pypi.tuna.tsinghua.edu.cn/simple)避免国外源下载超时,每个命令执行完成后确认无 ERROR 信息。
pip install fairseq==0.12.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install gradio==3.41.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ffmpeg-python librosa==0.10.0.post2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
PyTorch 是训练核心依赖,需根据电脑是否有 NVIDIA 显卡选择对应版本,优先安装 GPU 版本(训练速度提升 10-20 倍):
先确认 CUDA 版本(右键桌面 → NVIDIA 控制面板 → 帮助 → 系统信息 → 组件 → NVIDIA CUDA 版本,例如 11.7),执行对应命令:
# CUDA 11.7 版本(最常用,若你的 CUDA 是 11.8 也可使用) pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117 # CUDA 12.1 版本(新显卡如 RTX 40 系列) pip install torch==2.0.1+cu121 torchvision==0.15.2+cu121 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu121
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cpu
执行以下命令,若无报错则依赖安装成功:
# 验证 PyTorch 是否可用(GPU 环境应输出 True,CPU 输出 False)
python -c "import torch; print(torch.cuda.is_available())"
# 验证 fairseq 是否可用
python -c "import fairseq; print('fairseq installed')"
# 验证 librosa 是否可用
python -c "import librosa; print('librosa installed')"
configs\ 目录,复制 config.json 并重命名为 config_backup.json(后续修改出错可恢复)。config.json,修改以下两处关键配置:
{
"model": {
"n_speakers": 2 // 关键!说话人数量=目标声线数(如高育良+郑中基=2,1个声线设为1)
},
"spk": { // 关键!说话人名称与序号映射(名称需与数据文件夹名完全一致)
"gaoyuliang": 0, // 高育良(序号从 0 开始,不可重复)
"zhengzhongji": 1 // 郑中基
}
}
修改后保存,确保 JSON 格式正确(可通过 JSON 在线校验工具 检查语法)。
为避免旧数据干扰新训练,需清理以下目录:
dataset_raw/ 目录,删除默认的 taffy/ 和 nyaru/ 文件夹(这是示例数据,需替换为你的目标声线数据)。filelists/ 目录,删除所有文件(如 train.txt、val.txt),后续预处理会自动生成新文件。logs/ 目录下的所有文件(如旧模型文件夹 44k/),确保 logs/ 为空。dataset_raw/、filelists/ 目录不存在,无需手动创建,后续脚本会自动生成(仅清理已存在的目录即可)。
| 要求项 | 具体标准 | 工具推荐 |
|---|---|---|
| 格式 | 仅支持 WAV 单声道(立体声需转单声道) | Audacity、FFmpeg |
| 采样率 | 44100Hz(后续会自动重采样,但提前统一可减少错误) | Audacity(项目速率 → 44100Hz) |
| 时长 | 单个音频 3-5 秒,总时长 5-10 分钟(单个说话人至少 3 分钟) | Audacity(选择 → 剪辑) |
| 质量 | 无背景噪音、无伴奏、无混响、无气声(干净干声) | Audacity(效果 → 降噪) |
严格按以下结构存放,确保文件夹名与 config.json 中 spk 字段一致:
so-vits-svc/ # 源码根目录
└── dataset_raw/ # 原始数据目录(手动创建,若已存在则清空旧内容)
├── gaoyuliang/ # 说话人1:高育良(文件夹名=spk字段中的名称)
│ ├── gaoyuliang_01.wav
│ ├── gaoyuliang_02.wav
│ └── ...(至少10个音频,总时长≥3分钟)
└── zhengzhongji/ # 说话人2:郑中基(同上)
├── zhengzhongji_01.wav
└── ...
确保已激活虚拟环境(命令行前缀 (so-vits-3.9))且处于源码根目录,按以下步骤执行数据预处理和训练。
执行 resample.py 脚本,将 dataset_raw/ 中的音频统一重采样为 44100Hz,并生成 dataset/44k/ 目录:
python resample.py
执行成功后,检查 dataset/44k/ 是否包含与 dataset_raw/ 对应的说话人文件夹(如 gaoyuliang/)。
执行脚本生成 filelists/ 目录,包含 train.txt(训练集)和 val.txt(验证集):
python preprocess_flist_config.py
作用:记录每个音频文件的路径和对应说话人序号,训练时模型会通过这两个文件读取数据。
提取语音特征(决定克隆音色相似度的核心步骤),根据是否有 GPU 选择命令:
python preprocess_hubert_f0.py --num_processes 1 --device cuda
python preprocess_hubert_f0.py --num_processes 1 --device cpu
参数说明:--num_processes 1 为单进程处理(多进程易报错,新手推荐单进程),执行成功后 dataset/44k/ 会生成 .npy 特征文件。
执行训练命令,模型会自动保存到 logs/44k/ 目录:
python train.py -c configs/config.json -m logs/44k
参数说明:-c 指定配置文件路径,-m 指定模型保存路径。
reference_loss(整体损失),正常应逐步下降(如从 50 降至 1 以下):
INFO: Losses: [1.2, 3.5, 8.2, 29.7, 0.7], step: 3600, lr: 9.2e-05, reference_loss: 43.2
G_1000.pth、G_2000.pth),步数值越高,模型效果通常越好。Ctrl + C 可暂停训练,再次执行训练命令会自动从上次保存的模型继续。reference_loss 稳定在 1 以下且听感满意,即可停止训练;若损失持续下降但听感差,需优化训练数据(如增加干净音频)。
训练到足够步数后(如 G_5000.pth),可通过以下步骤测试克隆效果。
将需要克隆的“源音频”(如你的声音)处理为 WAV 单声道 44100Hz,放入 so-vits-svc\raw\ 目录(若 raw 不存在则手动创建)。
在虚拟环境中执行以下命令,替换参数为你的实际路径和说话人名称:
python inference_main.py -m logs/44k/G_5000.pth # 训练好的模型文件(选择最新高步模型) -c logs/44k/config.json # 训练时使用的配置文件(自动生成,与模型匹配) -n raw/your_test.wav # 测试音频路径(替换为你的音频文件名) -t 0 # 音色转换强度(0=纯目标声线,0.5=混合源声线) -s gaoyuliang # 目标说话人(与 config.json 中 spk 字段一致)
简化版命令(一行执行):
python inference_main.py -m logs/44k/G_5000.pth -c logs/44k/config.json -n raw/your_test.wav -t 0 -s gaoyuliang
克隆后的音频会自动保存到 so-vits-svc\results\ 目录,播放后对比效果:
-s 参数是否与 config.json 中的说话人名称一致,或训练数据是否为目标声线。| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
执行 conda 命令提示“不是内部命令” |
Miniconda 未添加到 PATH 环境变量 |
|
| 训练时提示“找不到说话人数据(如 gaoyuliang)” | 数据文件夹名与 config.json 中 spk 名称不一致 |
|
| 提取 Hubert 特征时提示“CUDA out of memory” | GPU 显存不足 |
|
| 推理时提示“模型文件不存在(如 G_5000.pth)” | 模型路径错误或未训练到对应步数 |
|
| 安装 librosa 时提示“numba 版本冲突” | librosa 0.10.0.post2 依赖特定版本 numba |
pip install numba==0.56.4 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install librosa==0.10.0.post2 -i https://pypi.tuna.tsinghua.edu.cn/simple |
本指南更新于 2025 年,适配 SoVITS 4.1+ 版本,若遇到新问题可参考官方文档或社区反馈。