so-vits-svc 全称 SoftVC VITS Singing Voice Conversion,做的是歌声音色转换(SVC),不是 TTS——你喂它一段干声,它换掉音色、保留旋律和咬字。主线仓库 svc-develop-team/so-vits-svc 停在 4.1-Stable 分支,AGPL-3.0 授权,作者在 README 里留下 “This round of limited time update is coming to an end” 之后就把仓库设成了只读归档。归档不等于不能跑:中文社区绝大部分整合包、底模、教程至今仍然围着 4.1-Stable 转,它依然是“我想让某个音色唱这首歌”这件事上最好复现的一条路。
门槛比传闻里低。官方 config_template.json 的默认值是 batch_size 6、fp16_run false、sampling_rate 44100、hop_length 512、epochs 10000、keep_ckpts 3;中文部署文档给出的最低配置是一张 6GB 显存以上的 N 卡、30GB 以上虚拟内存、以及至少 30 分钟干净干声。so-vits-svc-fork 的 README 说得更直接:训练 4GB 显存起,GPU 推理 4GB 起。真正把显存拉高的不是模型本身,而是你往上调 batch_size,以及预处理时选了哪个 F0 预测器——那份部署文档给出的开销排序是 pm >= harvest >= rmvpe ≈ fcpe >> crepe,crepe 是最容易在预处理阶段就把卡撑爆的那个。
真正难缠的从来不是显卡,是环境。requirements.txt 里钉死了 fairseq==0.12.2、numpy==1.23.5、librosa==0.9.1、scipy==1.10.0,官方只保证 Python 3.8.9 上稳定;在 3.11 上装 fairseq 基本必翻车,这也正是 so-vits-svc-fork 索性把 fairseq 整个拿掉的原因。这类“装一次很痛、装好之后跑完就不想再管”的项目,最适合放在按秒计费的云卡上:开一台带 PyTorch 镜像的实例,装完、跑完、把 G_*.pth 拉走,实例一停算力就不再计费。顺带一提法务侧的事实——上游使用条款写明本项目仅供学术用途、不得用于生产环境,发布转换结果时必须标注原始干声出处,数据集授权问题由使用者自行承担,这不是我们加的免责声明,是仓库原文。
01 —
版本与分支:哪一个才是你要装的那个
so-vits-svc 这个名字下面挂着四套互不兼容的代码,checkpoint 也不通用
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| so-vits-svc 4.1-Stable(svc-develop-team,AGPL-3.0) | vec768l12 编码器 · ssl_dim 768 · gin_channels 768 · inter/hidden 192 · n_speakers 200 | 训练 ≥6GB(默认 batch_size 6、fp16_run false);GPU 推理 4GB 级别即可 | 44100Hz 单声道,训练切片建议 5–15s;hop_length 512,upsample_rates [8,8,2,2,2] | 事实上的主线。浅扩散、聚类、特征检索、响度嵌入(--vol_aug)都在这一支上,中文整合包和底模默认对着它。仓库已归档为只读,但代码本身跑得动。 |
| so-vits-svc 4.0 系列(历史版本) | vec256l9 编码器 · ssl_dim 256,无浅扩散 / 特征检索 | 与 4.1 同量级,因为编码器维度更小反而略省 | 44100Hz 单声道 | 唯一需要关心它的理由:手里有 4.0 时代的 G_*.pth。4.0 与 4.1 的 checkpoint 不通用,老模型必须留在老代码上跑,别指望换个仓库直接加载。 |
| so-vits-svc-fork v1.3.2(voicepaw / 34j,MIT + Apache-2.0) | 沿用 4.0 架构,打成 pip 包 so-vits-svc-fork,无 fairseq 依赖 | README 明示:训练至少 4GB 显存,GPU 推理至少 4GB 显存 | 44100Hz;实时转换按 block / crossfade 分块推理 | 装得最省心的一支:pip install -U so-vits-svc-fork,能跑在 Python 3.11,自带 GUI(svcg)和实时麦克风转换(svc vc),底模自动下载。README 顶部已标 “No Longer Maintained”,并建议转投 RVC 家族 / VCClient / DDSP-SVC。 |
| so-vits-svc 5.0 = PlayVoice/whisper-vits-svc(MIT) | Whisper-PPG 内容编码 + HuBERT-soft + Google speaker encoder + BigVGAN 声码器 | 官方写明训练最低 6GB;6GB 用 batch_size 6,开到 8 也能跑但每步明显变慢 | 预处理走 16k / 32k 双采样率,crepe 提取音高 | 名字里带 5.0,但和 4.x 不是同一套代码、模型完全不互通,音质较好的是 bigvgan-mix-v2 分支。主打抗噪与音色泄漏抑制(数据扰动 + MIX 编码器 + USP 推理)。 |
| 4.1 + 浅扩散(shallow diffusion,可选加装) | 扩散头 n_layers 20 / n_chans 512 / n_hidden 256,timesteps 1000,k_step_max 0 | diffusion_template 默认 batch_size 48、amp_dtype fp32、cache_all_data 缓存在 CPU 内存 | block_size 512,训练切片 duration 2s(必须短于你最短的那段训练音频) | 推理时用 -shd 打开、-ks 控制步数(默认 100)。这是把 4.1 的齿音和高频救回来的常规手段,需要额外的 NSF-HiFiGAN 声码器(nsf_hifigan_20221211.zip)。 |
02 —
NexGPU 选卡:按你实际要干的事挑
so-vits-svc 默认 fp32 训练(fp16_run false),所以老架构的大显存卡在这里性价比反常地高
只做推理:把一首歌转成目标音色,顺便开 -shd 浅扩散和 -eh 增强器
RTX 3090 24GB$0.193/卡·时
4GB 就够的活给 24GB,crepe 做 F0、浅扩散、NSF-HiFiGAN 增强器同时开也不会碰到 torch.cuda.OutOfMemoryError。
单说话人训练:30 分钟到 1 小时干声,batch_size 从 6 往上调
RTX 4090 24GB$0.540/卡·时
默认 fp32 训练下瓶颈是每步耗时而不是显存,4090 的 fp32 吞吐能把“几百个 epoch”从过夜压回半天。
长时间挂机训练,只想把每小时成本压到最低
Tesla V100 32GB$0.188/卡·时
fp16_run 默认关闭,Volta 在纯 fp32 训练上不吃亏,而 32GB 比主流 24GB 卡多出一截 batch_size 余量,还是全平台最便宜的一张。
多说话人数据集,或改用 whisper-ppg-large / cnhubertlarge 编码器
RTX A6000 48GB$0.817/卡·时
大编码器在 preprocess_hubert_f0.py 阶段本身就吃显存,n_speakers 上去之后 batch 也压不下来,48GB 能让你一次预处理完不用分批重来。
03 —
从空实例到出声,四步
以 4.1-Stable 为准,命令都是仓库里真实存在的脚本和参数
- 01
开实例,锁死 Python 版本
选 PyTorch 预置镜像开机,然后务必把环境降到 Python 3.8–3.10。requirements.txt 钉着 fairseq==0.12.2 与 numpy==1.23.5,Python 3.11 上 fairseq 没有可用 wheel、源码编译几乎必失败——这是 so-vits-svc 最常见的第一道坎。预处理和 all_in_mem 也会吃宿主机内存,部署文档要求 30GB 以上虚拟内存,租实例时顺手看一眼 RAM。
conda create -n sovits python=3.10 -y && conda activate sovits && pip install -r requirements.txt - 02
放底模,摆数据集,跑预处理
把 ContentVec 的 checkpoint_best_legacy_500.pt(或 hubert_base.pt,约 181MB)放进 pretrain/,需要浅扩散就再加 nsf_hifigan_20221211.zip,用 RMVPE 就再放 rmvpe.pt(约 173MB)。干声按 dataset_raw/说话人名/xxx.wav 摆好,每段切成 5–15 秒,总量至少 30 分钟;用 whisper-ppg 编码器时单段不得超过 30 秒。三条命令依次跑完:重采样到 44.1kHz 单声道、生成 config.json 与训练列表、抽取 HuBERT 特征和 F0。
python resample.py && python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug && python preprocess_hubert_f0.py --f0_predictor rmvpe --use_diff --num_processes 8 - 03
开训,按显存调 batch_size
config.json 里唯一确定会改变显存占用的旋钮就是 batch_size,默认 6;爆显存就往下调,卡空着就往上加。磁盘 I/O 成为瓶颈时把 all_in_mem 打开,把数据整个塞进内存。默认 epochs 是 10000,但社区经验是几百个 epoch 就能出可用结果,盯 TensorBoard 自己叫停即可,keep_ckpts 默认只保留最近 3 个存档。要浅扩散就再单独训一个扩散头。
python train.py -c configs/config.json -m 44k #(可选)python train_diff.py -c configs/diffusion.yaml - 04
推理,把该关的开关关掉
最关键的一条:转歌声时千万别加 -a(auto_predict_f0),它是给语音转换用的,开了就跑调。-t 是半音移调,-f0p 换 rmvpe 或 fcpe 通常比默认 pm 稳,-sd 默认 -40、素材嘈杂改 -30,-ns 影响咬字清晰度,-shd 打开浅扩散、-ks 给步数。有音色泄漏就带上聚类或特征检索模型:-cm 指路径,-cr 给 0–1 之间的混合比例。
python inference_main.py -m logs/44k/G_30400.pth -c configs/config.json -n input.wav -t 0 -s speaker_name -f0p rmvpe -shd -ks 100
跑完一个音色,到底花多少钱
按一个真实节奏算:45 分钟干声、单说话人、走 4.1-Stable + 浅扩散。预处理(重采样 + flist + rmvpe 抽特征,8 进程)约 0.5 小时,训练挂 12 小时,推理调参试听 1 小时,合计 13.5 小时。选 RTX 4090 24GB:13.5 × $0.540 = $7.29。换成 RTX 3090 24GB:13.5 × $0.193 = $2.61。挂 Tesla V100 32GB 慢慢磨:13.5 × $0.188 = $2.54。存储另算:50GB 放原始干声、切片和 checkpoint,$0.414/GB·月 折合每天约 $0.69,占两天就是 $1.38;把训练好的模型拉回本地,0.3GB 出网 × $0.0081 ≈ $0.002。4090 方案总计约 $8.67,3090 方案约 $4.00。全程按秒计量、按小时定价,实例一停算力就停止计费,存储则要等你把它销毁才停——训练结束记得把不要的数据卷删掉。
04 —
