Bark 不是传统意义上的 TTS。它没有音素、没有时长预测器、也没有声码器流水线,而是一条 GPT 式的自回归链路:文本先被 semantic 模型压成语义 token,再由 coarse 模型预测出 EnCodec 的前两个码本,最后 fine 模型非因果地补齐剩下的码本,交给 EnCodec 解码成 24kHz 单声道波形。三段 transformer 各 300M 参数(small 版各 80M),加上 EnCodec 解码器构成完整模型。副作用是它会顺手生成笑声、叹气、清嗓子、背景音乐甚至环境噪声 —— 在文本里写 `[laughs]`、`[sighs]`、`♪` 就能触发。官方支持 13 种语言,含简体中文,附带 100+ 说话人预设(`v2/zh_speaker_0` 到 `v2/zh_speaker_9` 是中文那批),MIT 授权,可商用。
有一件事必须先说清楚:上游仓库已经基本冻结了。suno-ai/bark 最后一次实质代码提交停在 2023 年 9 月,README 在 2024 年 4 月动过一次,至今没有发过任何一个 release,269 个 issue 挂在那里。Suno 本身把重心转向了商业音乐产品。但这不等于 Bark 死了 —— 权重以 MIT 放出来收不回去,而 Hugging Face 那侧的 `BarkModel` 是随 transformers 主干一起维护的,Flash Attention 2、SDPA、`enable_cpu_offload()` 这些支持全是上游冻结之后才加进去的。suno/bark 与 suno/bark-small 两个 checkpoint 月下载量合计仍有约 9.5 万次。要用就走 transformers 这条路,别指望原仓库再更新。官方从来不支持声音克隆,克隆能力只存在于社区分支 serp-ai/bark-with-voice-clone。
README 里那个「约 12GB 显存」经常把人吓退,其实指的是原生库把所有 fp32 子模型同时常驻在显存里的情况。换成 transformers 路径,Hugging Face 在一张 TITAN RTX 24GB 上实测:不做任何优化、256 个新 token 时峰值 5025MB、单条 10.48 秒;叠上 CPU offload 与 BetterTransformer 降到 2040.7MB;再加 fp16 只剩 1010.4MB、8.10 秒 —— 显存省了 80%,速度反而快了 23%。也就是说 Bark 的显存门槛低得离谱,真正花钱的地方在吞吐:batch 8 配 fp16 大约 0.78 样本/秒,A100 上开 Flash Attention 2 跑 batch 16、400 个 semantic token 能拿到 17 倍吞吐。所以按秒计费租一张卡跑完就停,比买卡划算得多。
01 —
有哪些版本,各要多少显存
同一套权重,跑法不同显存能差一个数量级
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| suno/bark(v2 large) | 3 × 300M + EnCodec | 原生库 fp32 全量常驻 ~12GB;transformers 权重 4.49GB,fp16 约 2.2GB | 文本截断至 256 token/单次约 13 秒 | 音质最好的满血版,中文与非语言音效表现都靠它。月下载约 3.8 万次。 |
| suno/bark-small | 3 × 80M + EnCodec | 权重 1.68GB(fp32),fp16 约 0.85GB;`SUNO_USE_SMALL_MODELS` 下 8GB 卡稳跑 | 文本截断至 256 token/单次约 13 秒 | 速度明显更快、音质略降。下载量反而比大版本更高(约 5.8 万/月),说明大多数人跑的是它。 |
| 原生库 + OFFLOAD_CPU + SMALL_MODELS | 3 × 80M | 低至 ~2GB,官方明确支持 <4GB 显存的卡 | 文本截断至 256 token/单次约 13 秒 | 老卡、白嫖 Colab 或纯 CPU 的兜底方案,代价是子模型反复在显存与内存之间搬运。 |
| transformers + fp16 + CPU offload | 3 × 300M | 实测峰值 1010.4MB(TITAN RTX 24GB,256 新 token) | 文本截断至 256 token/单次约 13 秒 | 显存降 80%、延迟还降 23% 的组合,单条生成场景的最优解。 |
| transformers + fp16 + Flash Attention 2 | 3 × 300M | batch 8 约 4198.8MB;batch 16 需要 Ampere 及以上 | 文本截断至 256 token/单次约 13 秒 | 生产批量首选。A100 上 batch 16、400 semantic token 可达 17 倍吞吐。V100 这类 Volta 卡用不了 FA2,只能退回 fp16。 |
| serp-ai/bark-with-voice-clone | 3 × 300M(社区分支) | 与 suno/bark 相同 | 文本截断至 256 token/单次约 13 秒 | 官方不做声音克隆,要克隆特定音色只有这条路。分支至今仍在维护。 |
02 —
该租哪张卡
Bark 是个不到 10 亿参数的模型,把钱花在吞吐上,别花在显存上
试音、调 prompt、跑 bark-small
Tesla V100 32GB$0.188/卡·时
全网最便宜的一档,32GB 装满血 Bark 绰绰有余;Volta 不支持 Flash Attention 2,但单条试听本来也用不上。
满血 suno/bark 常驻 + fp16 批量生成
RTX 3090 24GB$0.193/卡·时
Ampere 架构能开 Flash Attention 2,24GB 相对 12GB 峰值有一倍余量,性价比在整个价目表里最高。
上千条配音的高吞吐流水线
RTX 4090 24GB$0.540/卡·时
Ada 架构 + FA2 + batch 16,自回归解码吃单核算力,4090 在这类小模型上的每秒样本数远超同显存的老卡。
Bark + Whisper + 克隆分支微调同机跑
RTX A6000 48GB$0.817/卡·时
48GB 能让语音识别、合成、后处理模型同时常驻,省掉反复加载卸载的时间。
03 —
四步跑起来
从空机器到出第一个 wav,通常十分钟以内
- 01
开机器,装对包
选 PyTorch 预置镜像开一台 RTX 3090,SSH 进去直接装。注意一个坑:PyPI 上那个叫 `bark` 的包不是这个项目,装了会一脸茫然,必须从 GitHub 装。Bark 在 PyTorch 2.0+、CUDA 11.7 与 12.0 上都验证过。
pip install git+https://github.com/suno-ai/bark.git # 不要 pip install bark - 02
最省显存的原生跑法
两个环境变量决定显存占用。`SUNO_USE_SMALL_MODELS` 换成 80M 的小模型,`SUNO_OFFLOAD_CPU` 让空闲子模型退回内存,两个一起开能把占用压到 2GB 左右。输出固定 24kHz 单声道,中括号标签可以触发笑声等非语言音。
SUNO_USE_SMALL_MODELS=True SUNO_OFFLOAD_CPU=True python -c "from bark import SAMPLE_RATE, generate_audio, preload_models; preload_models(); import scipy.io.wavfile as w; w.write('out.wav', SAMPLE_RATE, generate_audio('你好,这是 Bark 的中文测试。[laughs]'))" - 03
生产跑法:transformers + fp16 + FA2
真要批量出活就别用原生库。走 `BarkModel`,半精度加载再挂上 Flash Attention 2,音质几乎无损而显存与延迟双降。显存紧张时追加一行 `model.enable_cpu_offload()`,三种优化可以叠加使用。
model = BarkModel.from_pretrained('suno/bark', torch_dtype=torch.float16, attn_implementation='flash_attention_2').to('cuda') - 04
锁音色,拼长音频
不给 `voice_preset` 时 Bark 每次都会随机一个音色,同一段旁白前后不一致。用 `v2/` 前缀的预设锁定说话人。单次生成上限约 13 秒是架构决定的,长音频要自己按句切分、逐句生成再拼接,并且始终传同一个预设保持音色连贯。
inputs = processor('欢迎收听本期节目。', voice_preset='v2/zh_speaker_1')
算笔账:1000 条配音要多少钱
假设要生成 1000 条约 13 秒的短句,用 RTX 3090 24GB($0.193/卡·时),走 transformers 的 fp16 + BetterTransformer,batch 8。按 Hugging Face 在同级 24GB 卡上实测的 0.78 样本/秒计算:1000 ÷ 0.78 ≈ 1282 秒 ≈ 0.36 小时,0.36 × $0.193 ≈ $0.069。加上拉权重与预热大约 5 分钟(0.083 小时 × $0.193 ≈ $0.016),总计约 $0.085 —— 不到一毛钱。真正需要留意的反而是存储:4.5GB 的权重按 $0.414/GB·月 存一个月要 $1.86,是计算成本的二十多倍。所以正确姿势是跑完即停、卷用完就销毁,下次重新拉权重(入站不计费)。1000 条 13 秒的 24kHz WAV 约 624MB,按 $0.0081/GB 出站算约 $0.005,可以忽略。计算按秒计费、停机即停止计费,没有起租时长,也没有开通费。
04 —
