跳到主要内容

歌声音色转换 / 声音克隆

so-vits-svc 本地部署,6GB 显存就能开训

4.1-Stable 的官方 config 默认 batch_size 6、fp16_run 关闭。租一张卡把切片、预处理、训练、浅扩散推理一次跑完,停机即停算力计费。

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 0diffusion_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 为准,命令都是仓库里真实存在的脚本和参数

  1. 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
  2. 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
  3. 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
  4. 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 —

常见问题

so-vits-svc 到底需要多大显存?4GB 的卡能训吗?

so-vits-svc-fork 的 README 明确写训练和 GPU 推理都是 4GB 显存起;主线 4.1 的中文部署文档要求 6GB 以上,因为官方 config 默认 batch_size 是 6。所以 4GB 能训,但你几乎没有调参余地,而且预处理阶段选 crepe 做 F0 时最容易先爆。真正的建议是:别在显存上省这一点。NexGPU 的 RTX 3090 24GB 只要 $0.193/卡·时,Tesla V100 32GB 更是 $0.188/卡·时,把 batch_size 开到舒服的位置,比反复重跑一遍预处理便宜得多。

so-vits-svc 现在还有人维护吗?还值得用吗?

上游 svc-develop-team/so-vits-svc 已在 2023 年 11 月归档为只读,停在 4.1-Stable;so-vits-svc-fork 的 README 顶部也写着 “No Longer Maintained”,并建议转投 RVC 家族(含 IAHispano/Applio)、VCClient 或 yxlllc/DDSP-SVC。但代码没坏:底模、整合包、中文教程的生态仍然完整,很多人依旧觉得 4.1 在歌声上的表现值得那份麻烦。判断方法很简单——租一张按秒计费的卡,把 4.1 和 RVC 各跑一遍同一份干声,用耳朵而不是 star 数决定。NexGPU 2,000+ 预置镜像里 PyTorch 环境现成,开机就能开始装。

so-vits-svc 训练需要多少数据?要跑多少个 epoch?

中文部署文档给的下限是至少 30 分钟干净干声,越多越好,切成 5–15 秒的片段(用 whisper-ppg 编码器时单段不超过 30 秒)。config 默认 epochs 是 10000,但那是个跑不完的上限值,社区实践是几百个 epoch 就能听到可用结果,盯着 TensorBoard 手动停。数据质量比数量重要得多:伴奏没分干净、呼吸声和混响没处理,训多久都是白搭。按 12 小时训练算,NexGPU RTX 4090 24GB 一轮 $6.48,试错成本低到可以多试两版数据集。

为什么 pip install 装不上 fairseq?numpy 一直报错怎么办?

这是 so-vits-svc 最出名的坑。requirements.txt 钉死 fairseq==0.12.2 和 numpy==1.23.5,fairseq 0.12.2 在 Python 3.11 上没有预编译 wheel,源码编译对工具链很挑;官方只保证 Python 3.8.9 稳定。解法二选一:把环境退回 Python 3.8–3.10 再装主线,或者直接用 so-vits-svc-fork——它把 fairseq 依赖整个去掉了,pip install -U so-vits-svc-fork 一条命令搞定,能跑在 3.11。在 NexGPU 上这道题更好办:环境装崩了销毁实例重开一台,几十秒的事,不用赌本机的 conda。

转出来的歌声跑调、有电音、音色泄漏,怎么调?

按顺序排查:第一,转歌声时不要加 -a(auto_predict_f0),那个开关是给语音转换用的,开着必跑调;第二,-f0p 从默认的 pm 换成 rmvpe 或 fcpe,crepe 效果好但吃显存;第三,素材嘈杂时把 -sd 从 -40 改到 -30,再用 -ns 微调咬字;第四,音色泄漏用聚类模型或特征检索,-cm 给路径、-cr 给 0–1 的混合比例,特征检索咬字更好但推理更慢;第五,高频和齿音发闷就上浅扩散,-shd 打开、-ks 调步数。这些都是推理侧参数,改一次跑一次很快——在 NexGPU 上开一台 RTX 3090,$0.193/卡·时 挂着慢慢试,比在本地占着自己的卡合算。

so-vits-svc 和 RVC、DDSP-SVC 该选哪个?

定位不同。so-vits-svc 4.1 是歌声转换里生态最厚的一支,可调项最多(聚类、特征检索、浅扩散、多种编码器),代价是环境难装、训练重。RVC 主打小数据量,官方说法是 10 分钟左右的语音就能训出可用模型,靠 Top1 检索抑制音色泄漏,仍在活跃更新。DDSP-SVC 6.3(MIT)明确把自己定位成轻量替代,声称硬件消耗显著低于 so-vits-svc、训练速度接近 RVC。要做实时变声则看 w-okada/voice-changer,它同时支持 RVC、so-vits-svc、DDSP-SVC 和 Beatrice。最理智的做法是同一份干声在三个方案上各跑一遍——NexGPU 覆盖 51 个国家和地区、1,175 个已验证节点、75 种 GPU 型号,按秒计费无最低消费,三个方案并行开三台的成本,未必比你纠结一周更贵。

同类模型 · 声音克隆 / 声音转换

全部模型部署指南

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。