Seed-VC 出自 Songting Liu 的论文《Zero-shot Voice Conversion with Diffusion Transformers》(arXiv:2411.09943),用扩散 Transformer 做零样本语音转换,训练时引入一个外部音色扰动器(external timbre shifter)来压制音色泄漏,推理时把整段参考语音作为上下文喂进去做 in-context learning。给它 1~30 秒的参考音频,不训练也能克隆音色。官方 EVAL 在 LibriTTS-test-clean 上跑了 100 条:Seed-VC 的说话人相似度 SECS 0.8676、WER 11.99、CER 2.92,同题对比 OpenVoice 是 0.7547 / 15.46 / 4.73,CosyVoice 是 0.8440 / 18.98 / 7.29。
项目主页是 GitHub 上的 Plachtaa/seed-vc,协议 GPL-3.0,接近 4k star。代码最后一次更新停在 2025 年 4 月 20 日,仓库已于 2025 年 11 月 21 日归档转为只读;作者随后把精力放到了 StreamVoiceAnon(ICASSP'26,Apache-2.0,实时流式语音匿名化与转换)。归档不代表不能用 —— 权重仍然挂在 Hugging Face 的 Plachta/Seed-VC 下,而且 requirements.txt 把 torch==2.4.0、transformers==4.46.3、numpy==1.26.4 全部 pin 死了,环境反而比一堆还在动的项目更好复现。CHANGELOG 里 V2 那一条写成「2024-04-16」是笔误,实际发布在 2025 年 4 月。
部署 Seed-VC 前必须搞清楚一件事:模型表里的 25M、98M、200M 只是 DiT 主干的参数量,不是显存占用。实际跑起来还要常驻内容编码器(tiny 档是 facebook/wav2vec2-xls-r-300m 取第 12 层,离线档和歌声档是 openai/whisper-small,v2 是 facebook/hubert-large-ll60k 取第 18 层)、声码器(HIFT 或 nvidia/bigvgan_v2_22khz_80band_256x)、CAMPPlus 说话人编码器,以及训练期音色扰动用的 OpenVoice se_db.pt(102MB)。把这些加总,一档模型的全栈权重在 1.5~2.5GB 之间。这就是为什么「25M 的模型」不等于「25M 的显存」。
01 —
四个官方模型,各管一件事
参数量、隐藏层维度、层数取自官方模型表;权重体积取自 Hugging Face Plachta/Seed-VC 的文件清单。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| seed-uvit-tat-xlsr-tiny(v1.0) | 25M(hidden 384 / 9 层) | DiT_uvit_tat_xlsr_ema.pth 142MB + XLSR-large 编码器 ~1.2GB + hift.pt 82MB ≈ 1.5GB 权重;FP16 推理 6GB 卡就有余量 | 22050 Hz,参考音频 1~30 秒 | 唯一为实时变声调优的一档。内容编码器是 wav2vec2-xls-r-300m,声码器换成轻量的 HIFT,real-time-gui.py 默认拉的就是它。 |
| seed-uvit-whisper-small-wavenet(v1.0) | 98M(hidden 512 / 13 层) | DiT_seed_v2_uvit_whisper_small_wavenet_bigvgan_pruned.pth 440MB + Whisper-small 编码器 + BigVGAN ≈ 1.5GB 权重;建议 ≥ 8GB 显存 | 22050 Hz,参考音频 1~30 秒 | 离线转换的默认档,质量比 tiny 好、推理稍慢。inference.py 在 --f0-condition False 时会自动下载这一个。 |
| seed-uvit-whisper-base(v1.0,f0-44k) | 200M(hidden 768 / 17 层) | DiT_..._whisper_base_f0_44k_bigvgan_pruned_ft_ema.pth 821MB + Whisper-small + 44.1kHz BigVGAN ≈ 2.5GB 权重;长音频分块推理建议 ≥ 16GB | 44100 Hz,参考音频 1~30 秒 | 歌声转换(SVC)专用,带 f0 条件。必须 --f0-condition True,扩散步数官方建议提到 30~50,男女互换时配合 --semi-tone-shift ±12。 |
| hubert-bsqvae-small(v2.0) | 67M(CFM)+ 90M(AR) | cfm_small.pth 353MB + ar_base.pth 359MB + hubert-large-ll60k ~1.2GB + BigVGAN ≈ 2.3GB 权重;开 --compile 后建议 ≥ 12GB | 22050 Hz,参考音频 1~30 秒 | 内容侧换成 ASTRAL-Quantization 的球面二值量化器(窄码本 32 / 宽码本 2048),官方评价是「最能压制源说话人特征」。多了口音与情感转换,也支持 --anonymization-only 把声音匿名成一把平均嗓。 |
| StreamVoiceAnon(作者后继项目) | 官方未公布参数量 | 权重需从 Hugging Face Plachta/StreamVoiceAnon 下载;官方只给了 RTF < 1.0 的指标,未公布显存数字 | 实时流式,延迟按帧可配 | seed-vc 归档后作者的接棒项目,ICASSP'26 论文,协议放宽到 Apache-2.0。做实时语音匿名化与转换,Windows 下同样需要 triton-windows 才能压到 RTF < 1.0。 |
02 —
选哪张卡:按你的实际场景对号入座
Seed-VC 不是显存怪兽,所以选卡的依据是延迟、并发和采样率,而不是「装不装得下」。
零样本效果验证 / 批量离线转换(whisper-small-wavenet)
RTX 3090 24GB$0.193/卡·时
全栈权重才 1.5GB 左右,24GB 显存留给长音频分块和多进程并发,这是能租到的最便宜的 24GB 卡。
实时变声:直播、会议、游戏语音(xlsr-tiny)
RTX 4090 24GB$0.540/卡·时
官方在 RTX 3060 Laptop 上就跑到每块 150ms、总延迟 430ms,4090 的余量足够把扩散步数从 10 提到 25,或者同机开多路而不越过 0.18s 的 block time。
单说话人 / 多说话人微调(train.py,batch-size 2)
Tesla T4 16GB$0.298/卡·时
README 给的基准就是这张卡 ——「最少 100 步,在 T4 上 2 分钟」,照着官方数字算成本不用猜。
44.1kHz 歌声转换批量出片 / v2 开 --compile 加速 AR
RTX A6000 48GB$0.817/卡·时
44k BigVGAN 解码长曲目最吃激活显存,48GB 可以同时跑四五路歌声转换,还能顺手把 v2 的 AR 编译缓存留在同一张卡上。
03 —
四步把 Seed-VC 跑起来
官方推荐 Python 3.10。requirements.txt 有个坑,第一步就得处理掉。
- 01
开实例,先修 requirements.txt 再装依赖
requirements.txt 前三行指向 PyTorch cu126 nightly 源,但第 5~7 行又把 torch/torchvision/torchaudio 死死 pin 在 2.4.0/0.19.0/2.4.0。直接 pip install 会让 pip 在 nightly 轮子和固定版本之间来回折腾,装完还可能拿到一个对不上的 CUDA 版本。删掉那三行再装,环境干净得多。NexGPU 的 PyTorch 预置镜像已经带好驱动和 CUDA,SSH 进去就能开工。
git clone https://github.com/Plachtaa/seed-vc && cd seed-vc && sed -i '1,3d' requirements.txt && pip install -r requirements.txt - 02
跑第一条零样本转换,权重自动下载
首次推理时检查点会自动从 Hugging Face 拉取,不指定 --checkpoint 就默认用 seed-uvit-whisper-small-wavenet。国内节点走 hf-mirror 镜像更稳。--fp16 默认为 True;--diffusion-steps 25 是质量与速度的平衡点,想快就压到 4~10,想好就提到 30~50。
HF_ENDPOINT=https://hf-mirror.com python inference.py --source examples/source/source_s1.wav --target examples/reference/s1p1.wav --output ./out --diffusion-steps 25 --length-adjust 1.0 --inference-cfg-rate 0.7 --fp16 True - 03
按场景切模式:歌声转换、实时变声、或 v2 口音转换
歌声转换要开 f0 条件并换成 44k 模型;实时变声用 real-time-gui.py,官方在 RTX 3060 Laptop 上的推荐参数是扩散步数 10、block time 0.18s、crossfade 0.04s、左侧额外上下文 2.5s、右侧 0.02s,算法延迟约等于 block time × 2 + 右侧上下文。v2 的 AR 模型加 --compile 大约有 6 倍加速,Linux 上装好 triton 即可,Windows 需要 triton-windows==3.2.0.post13。
python inference.py --source song.wav --target singer_ref.wav --output ./out --diffusion-steps 40 --f0-condition True --semi-tone-shift 0 # 或:python app_vc_v2.py --compile - 04
用自己的数据微调,把相似度再拉一档
音频每条 1~30 秒,超出范围会被直接忽略;支持 wav/flac/mp3/m4a/opus/ogg,不需要说话人标签,但每个说话人至少一条。从 configs/presets/ 里挑一个和推理目标一致的 preset:tiny 对应实时、whisper-small-wavenet 对应离线、whisper-base-f0-44k 对应歌声。产物落在 runs/<run-name>/ft_model.pth,推理时照样要给参考音频。v2 用 accelerate launch train_v2.py,支持多卡。
python train.py --config ./configs/presets/config_dit_mel_seed_uvit_xlsr_tiny.yml --dataset-dir ./my_data --run-name my_speaker --batch-size 2 --max-steps 1000 --save-every 500 --num-workers 0
一次完整的验证 + 微调 + 上线,到底多少钱
按 NexGPU 列表价一条条算。第一阶段做零样本验证,选 Tesla T4 16GB,$0.298/卡·时:拉权重(离线档 440MB + hift.pt 82MB + se_db.pt 102MB + Whisper 与 BigVGAN,落盘约 3GB)加上 200 条 10 秒素材按 diffusion-steps 25 跑完,连下载带推理 40 分钟 —— 0.667 × $0.298 = $0.20。第二阶段微调一个说话人,README 的原话是「最少 100 步,在 T4 上 2 分钟」,跑满 1,000 步约 20 分钟 —— 0.333 × $0.298 = $0.10。也就是说,从零验证到拿到 ft_model.pth,总共 $0.30,比一杯咖啡便宜两个数量级。上线阶段换卡:实时变声用 RTX 4090 24GB,$0.540/卡·时,一场 8 小时直播是 8 × $0.540 = $4.32;44.1kHz 歌声转换批量出片用 RTX A6000 48GB,$0.817/卡·时,四路并发跑 3 小时是 3 × $0.817 = $2.45。存储单独计费:3GB 权重按 $0.414/GB·月 的中位价是 3 × $0.414 = $1.24/月 —— 注意计算费在实例停止时就停了,存储费会一直算到你把它销毁。出网几乎可以忽略:1,000 条 22kHz wav 大约 0.44GB,0.44 × $0.0081 ≈ $0.004。计费按秒计量、按小时计价,没有起租时长、没有开通费、不用提配额申请。
04 —
