一、导读
主流 TTS 的流水线十几年没变过:先把语音压成离散 token,再让语言模型预测 token,最后解码回波形。VoxCPM2 直接把这条流水线里的分词器删了——它在连续潜空间里端到端建模声音,用一个 2B 参数的骨干同时装下 30 种语言、9 种中文方言、自然语言语音设计、风格可控克隆与高保真续写克隆,并原生输出 48kHz 音频。官方技术报告给出的内部 30 语言评测平均 WER 为 1.68%,Apache-2.0 全开源。
核心结论:它的价值不在「又一个 TTS」,而在于证明了「不依赖任何外部离散语音分词器」的层级连续潜变量路线,可以作为大规模多语言、可控语音生成的地基。 代价同样清晰——8GB 显存起步、Voice Design 需要抽卡式重试、Mac 与老 CUDA 暂不可用。
二、项目速览
| 项目 | 内容 |
|---|---|
| 仓库 | OpenBMB/VoxCPM(模型名 VoxCPM2,前身为 VoxCPM-0.5B / VoxCPM1.5) |
| 团队 | OpenBMB(面壁智能 + 清华大学系团队),通讯作者含刘知远、吴志勇 |
| 主语言 / 许可 | Python / Apache-2.0(权重与代码均开源,允许商用) |
| Star / Fork | 40,216 / 4,572(GitHub API,2026-10-23 抓取) |
| 当日涨星 | 144(GitHub Trending daily,2026-10-23 抓取) |
| 首次提交 | 2025-09-16;最近推送 2026-10-08 |
| 开放 Issue | 141 |
| 技术报告 | arXiv:2606.06928(2026-06-05 提交,cs.SD) |
| 规模 | 2B 参数骨干;训练语料 >200 万小时多语言语音 |
| 能力面 | 30 语言 + 9 种中文方言、Voice Design、可控克隆、极致克隆、48kHz 输出 |
版本谱系(README 口径):VoxCPM-0.5B(0.5B / 16kHz / 中英双语)→ VoxCPM1.5(0.6B / 44.1kHz / 中英)→ VoxCPM2(2B / 48kHz / 30 语言)。18 个月内采样率翻三倍、语言数从 2 跳到 30,并新增 Voice Design 与可控克隆两个从 0 到 1 的能力。
三、为什么是它:删掉分词器的赌注
第一,它挑战的是 TTS 的默认范式。 主流做法(CosyVoice、Fish Speech 等)都要先把语音离散化成 token 再建模,量化压缩本身就是一道有损瓶颈。VoxCPM2 在连续潜空间直接建模,把「该说什么」和「怎么说」拆成两条链路,理论上去掉了量化带来的细节损失。技术报告的结论很直白:层级连续潜变量建模,在不依赖任何外部离散语音分词器的前提下,足以支撑大规模多语言与可控生成。
第二,它把「设计声音」变成了「描述声音」。 传统换音色要准备目标说话人的参考音频、跑参考编码,再祈祷音色不漂移。VoxCPM2 允许直接用自然语言描述(性别、年龄、语气、情绪、语速)凭空生成一个新声音,无需任何参考音频。开源阵营里此前只有 ElevenLabs 的 Voice Design 能做类似效果,但那是闭源、按字符计费的。
第三,它一次给了三层克隆梯度。 基础克隆(一段参考音频)→ 可控克隆(保留音色,用文字指令微调情绪/语速/风格)→ 极致克隆(同时给参考音频与逐字转录,无缝续写,连呼吸停顿都复刻)。从快速 demo 到高保真复刻不用换工具。
第四,涨星动因里有一半是「部署生态」。 一个模型放权重是常规操作,但 VoxCPM2 同时推三条生产路径:标准 PyTorch(RTF≈0.30)、Nano-vLLM 加速(RTF≈0.13,同一张 RTX 4090)、以及 vLLM-Omni 后端——后者直接暴露 OpenAI 兼容的 /v1/audio/speech 端点,现有 ElevenLabs 客户端改个 URL 就能指向自部署的 VoxCPM2。开源模型 + 商业友好许可 + 零代码迁移路径,这三者叠加才是它持续上榜的真正原因。
四、【重点】架构原理
4.1 整体架构:四阶段生成管线 + 非对称编解码
VoxCPM 家族共享同一条高层生成路径:text → 四阶段生成骨干 → AudioVAE 解码器 → 波形。VoxCPM2 没有改变这个心智模型,而是重写了几条内部信息通路。
graph TD
T["文本 / 自然语言描述<br/>(A young woman, gentle voice)"] --> TSLM
R["参考音频 16kHz<br/>(可选)"] --> AE["AudioVAE V2 Encoder<br/>16kHz 编码"]
AE --> LE["Local Encoder (LocEnc)<br/>帧→patch 聚合"]
LE --> TSLM["Text-Semantic LLM (TSLM)<br/>MiniCPM-4 骨干 · 6.25Hz"]
TSLM --> FSQ["FSQ 半离散瓶颈<br/>通道级有限标量量化"]
FSQ --> RALM["Residual Acoustic LLM (RALM)<br/>无位置编码 NoPE"]
LE --> RALM
RALM --> DIT["Local DiT (CFM)<br/>逐 patch 条件流匹配扩散"]
TSLM --> DIT
DIT --> DEC["AudioVAE V2 Decoder<br/>48kHz 重建 · 隐式超分"]
DEC --> W["48kHz 波形"]
关键在两条信息通路的分工:TSLM 在 6.25Hz 的低帧率上做「高层语义与韵律规划」(说什么、怎么断句、哪里强调),RALM 在 patch 内补「细粒度声学细节」(音色质感、呼吸、微表情),最后 LocDiT 在连续潜空间做逐 patch 扩散去噪。语义与声学被显式解耦,因此每个模块可以独立优化、蒸馏、量化。
4.2 分层模块拆解
| 层 | 职责 | 关键设计 |
|---|---|---|
| AudioVAE V2 编码器 | 把 16kHz 波形压成低帧率连续潜变量 | 步进式因果 CNN 堆叠,640× 时间压缩 |
| Local Encoder (LocEnc) | 聚合 patch 级声学历史 | 每 4 帧打成一个 patch(≈160ms),把序列压到 6.25Hz |
| Text-Semantic LLM (TSLM) | 自回归建模高层语义与韵律结构 | 基于放大的 MiniCPM-4 骨干 |
| FSQ 瓶颈 | 把 TSLM 状态压成稳健的「语义骨架」 | 通道级有限标量量化(可微半离散) |
| Residual Acoustic LLM (RALM) | 在语义骨架 + 局部声学上下文上恢复细节 | 省略位置编码(NoPE),提升长句稳定性 |
| Local DiT (CFM) | 逐 patch 在连续潜域做扩散去噪 | 条件流匹配;多 token 条件前缀 |
| AudioVAE V2 解码器 | 把潜变量重建为 48kHz 波形 | 非对称解码,上采样至 48kHz |
为什么帧率是 6.25Hz? 这是整套设计的枢纽:AudioVAE V2 把语音编码成 25Hz 的连续潜变量,每 4 帧归为一个 patch,得到 6.25Hz 的自回归序列。相比传统 12.5Hz(VoxCPM-0.5B)甚至更高帧率的离散 token 方案,序列长度直接减半,语言模型侧的算力与显存压力随之下降——这是「48kHz 高保真输出」与「可接受的推理成本」能同时成立的前提。
4.3 核心机制一:FSQ 半离散瓶颈——连续与离散的折中
完全连续的潜变量容易在长序列上漂移,完全离散的 token 又会丢失细节。VoxCPM2 的解法是在两者之间插一个 FSQ(Finite Scalar Quantization)瓶颈:把 TSLM 的输出状态做通道级量化,压成一个「稳健的语义骨架」,再交给 RALM 去补声学细节。
技术报告指出,VoxCPM2 相比 1.x 扩大了 FSQ 瓶颈宽度,以容纳更广的语言多样性——这是 30 语言支持能在一个骨干里成立的结构性原因之一。用作者的话说,这个设计「调和了离散与连续建模各自的优势」。
4.4 核心机制二:统一序列组织——一个骨干干五种活
VoxCPM2 最优雅的设计是不引入任何模式专属模块。所有生成模式都被表达为同一组输入积木(文本、参考音频、目标音频)的不同排列,外加一个二值模态指示符:
| 模式 | 输入排列 | 典型用途 |
|---|---|---|
| 基础多语言 TTS | 文本 → 目标音频 | 通用合成 |
| Voice Design | 自然语言描述 + 文本 → 目标音频 | 凭空造角色音 |
| 参考克隆 | 参考音频 + 文本 → 目标音频 | 音色复刻 |
| 可控克隆 | 参考音频 + 风格描述 + 文本 → 目标音频 | 保留音色改情绪 |
| 续写克隆 | 参考音频 + 其转录 + 文本 → 目标音频 | 无缝续写 |
序列结构本身让 TSLM 在单一目标函数、单一参数集下自行消歧条件信号。 这带来两个工程红利:一是参数共享让所有模式都能吃到 200 万小时预训练的红利;二是新增一种生成模式只需重新排列序列,不需要新模块——技术报告称之为「即插即用的可扩展框架」。
4.5 核心机制三:AudioVAE V2 非对称编解码——隐式超分
标准音频编解码器通常输入输出同采样率,于是产生一个两难:采样率越高音质越好,但语言模型要处理的序列也越长。VoxCPM2 的破法是非对称:编码器在 16kHz 工作(兼容绝大多数大规模数据集、潜变量更短),解码器直接重建到 48kHz。
这相当于在合成过程中内置了一次隐式超分辨率——不需要外接上采样器,也不会因为提高输出采样率而让序列长度成比例膨胀。技术报告强调,这是「在提升输出保真度的同时,不要求序列长度成比例增长」的关键。
4.6 训练管线与设计取舍
训练语料 >200 万小时多语言语音(中英占多数,其余 28 种语言各约 1K–50K 小时),走三段式渐进课程:
- 多语言预训练:大规模音-文对,聚焦基础 TTS 与续写克隆,打牢发音与韵律。
- 联合可控预训练:引入表现力语句、风格/音色标注与显式参考音频,最大序列长度扩到 8192 token;同时平衡配比以保住基线 TTS 性能。
- 高质量退火(SFT):用高标注、表现力强的精选子集精修,尤其针对可控属性与长上下文。
两个值得记录的取舍:
- 风格-内容解耦靠「克隆式合成」。 如果直接用「悲伤的文本 + 悲伤的语气」训练,模型会偷懒——看到悲伤文本就自动用悲伤语气,忽略指令。团队的做法是把某个风格施加到语义中立甚至无关的文本上生成训练样本,逼迫模型依赖自然语言指令而非文本内容来推断韵律。这是 Voice Design 能真正「听话」的关键。
- RALM 去掉位置编码(NoPE)。 位置编码在长句上会引入外推误差,去掉它反而提升了长句稳定性——这是一个反直觉但有效的工程选择。
4.7 与其他架构路线的差异
| 路线 | 代表 | 语音表示 | 主要取舍 |
|---|---|---|---|
| 离散 token + LM | CosyVoice2/3、Fish Audio S2 | 离散 token | 生态成熟、与 LLM 同构;量化有损 |
| 连续潜变量 + 扩散自回归 | VoxCPM2 | AudioVAE V2 连续潜变量 | 保真度高、语义声学可解耦;显存 8GB 起步 |
| 非自回归 + Flow Matching | F5-TTS、XTTS | 连续 | 快、显存低(约 4GB);长文与可控性弱 |
| 闭源 Voice Design | ElevenLabs v4 | 未公开 | 效果强;按字符计费、不可自部署 |
一句话:VoxCPM2 用「删掉分词器 + 非对称编解码 + 统一序列」三招,把连续潜变量路线的保真度优势,换成了 8GB 显存的入场门槛。
4.8 为什么这条路值得赌
把分词器删掉,短期看是给自己找麻烦:没有现成的离散词表可以复用,序列建模全部要重新设计,还得额外训一个 AudioVAE。但长期收益在于信息不再被量化瓶颈截断——细粒度声学细节、呼吸、口音质感都留在连续潜变量里,模型才有可能在「保真度」和「可控性」上同时往前走。技术报告的判断是:这条路线「在不依赖任何外部离散语音分词器的前提下,为大规模多语言与可控语音生成提供了可行且强大的地基」。换句话说,它赌的不是这一代的效果,而是下一代的可扩展性。
五、【重点】应用场景
场景一:有声书 / 播客批量生产——长文本上下文感知韵律
业务痛点。 传统 TTS 把每句话独立合成,长文听下来语调平、断句机械,多角色有声书还要为每个角色单独准备参考音频。
做法。 用 VoxCPM2 的基础 TTS 模式,让模型从文本内容自行推断韵律;多角色场景用 Voice Design 为每个角色生成一个音色,再用可控克隆统一风格。
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)
wav = model.generate(
text="(A calm middle-aged female narrator with a slight Tokyo accent)那一年的冬天来得特别早。",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("narrator.wav", wav, model.tts_model.sample_rate)
收益与量化。 48kHz 原生输出省去后处理上采样;30 语言无需语言标签即可直接合成。注意:长上下文生成超过约 45 秒后音色会轻微漂移(第三方评测口径),建议每 20–30 秒分段生成。
适用边界。 不适合需要逐音素精确控制的配音(模型不支持 SSML 级音素干预,专有名词偶尔读错)。
场景二:出海产品多语种配音——同一音色的跨语种克隆
业务痛点。 出海产品的宣传片要在 10+ 个语种上线,找 10 个配音员成本高、音色不统一;传统方案每个语种都要重录。
做法。 用一段母语参考音频克隆音色,再让同一个音色说其他语言。
wav = model.generate(
text="(slightly faster, cheerful tone)Welcome to our new product launch.",
reference_wav_path="speaker.wav", # 一段 5-15 秒干净录音
)
收益与量化。 技术报告称,内部 30 语言评测中 28/30 种语言 WER/CER < 3%;MiniMax-MLS-Test 的 24 种语言里 22 种取得相似度领先,并观察到对未见语言(如捷克语、罗马尼亚语)的零样本迁移。r/LocalLLaMA 社区把「同一音色跨英、日、土、印地语零样本输出」视为 Apache-2.0 模型里的第一次。
适用边界。 存在跨语言口音渗透——用英语说话人的音色说西班牙语,会带出轻微英语口音;要地道口音仍需目标语母语参考音频。低资源语言长句末尾偶有无意义音节(Issue #352 报告,EOS 停止条件不够精准)。
场景三:个人 AI 助手语音——5–10 分钟 LoRA 适配自有音色
业务痛点。 独立开发者想给助手一个专属声音,但完整微调 2B 模型门槛高。
做法。 用官方自带的 SFT/LoRA 脚本,5–10 分钟参考音频即可适配。
# LoRA 微调(官方脚本)
python scripts/train_voxcpm_finetune_lora.py --config_path conf/voxcpm_v2/lora.yaml
收益与量化。 第三方实测:VoxCPM2 全量 SFT 在单张 RTX 3090 Ti(24GB)上跑通,9000 步约 5 小时,需 gradient_checkpointing: true + PagedAdamW8bit + batch_size: 1 + grad_accum_steps: 8;LoRA 9000 步约 2.4 小时,checkpoint 更小。值得注意的反直觉结论:最终 9000 步的 checkpoint 并非最佳,held-out 验证选中的是 step_0002000。
适用边界。 2B 全量微调显存账单很硬——BF16 权重 4GB + 梯度 4GB + FP32 AdamW 优化器状态 16GB = 24GB,激活值还没算就已经把 24GB 卡占满,必须靠分页优化器与梯度检查点才跑得通。
场景四:实时语音对话——流式合成接进现有 LLM 链路
业务痛点。 语音助手要把首字延迟压到几百毫秒,标准 PyTorch 推理的 RTF 不够看。
做法。 用 Nano-vLLM 或 vLLM-Omni 后端,暴露 OpenAI 兼容端点。
# vLLM-Omni:OpenAI 兼容的 /v1/audio/speech
# 现有 ElevenLabs 客户端改 URL 即可,零代码迁移
curl -X POST http://localhost:8000/v1/audio/speech \
-d '{"input":"你好,欢迎使用。","voice":"default"}' -o out.wav
收益与量化。 RTF 从标准 PyTorch 的 ~0.30 降到 Nano-vLLM 的 ~0.13(同一张 RTX 4090);vLLM-Omni 带 PagedAttention KV cache、连续批处理与流式分块。换算成产能:RTF 0.13 时,一张 4090 每 GPU 小时可产出约 7.7 小时音频;RTF 0.30 时降到约 3.3 小时。
适用边界。 RTF 0.13 仍不够快用于电话/直播级实时交互——端到端的 Qwen3-TTS(97ms)或 CosyVoice 2(150ms 流式延迟)更合适。另外 vLLM-Omni 上 VoxCPM2 的 KV cache 需要显式 pin 住,否则会按 gpu_memory_utilization 超额分配(H20 上实测 851× 并发、24GB L4 上 79×),在小卡上直接 OOM(vllm-omni PR #4279 已修,pin 到 6GiB ≈ 175k token)。
场景五(不建议):这些情况别用 VoxCPM2
①需要精确音素控制——不支持 SSML 级干预,专有名词会读错;②追求极致情感表现力——实测「happy」与「sad」标签区分度有限,Fish Speech S2 或 Higgs Audio v3 更强;③只有 Mac 或 AMD 显卡——官方发行版假设 CUDA ≥ 12.0,无 MPS 后端,截至 2026-10 主流 MLX 移植仍不成熟(社区有 Swift/MLX 移植在推进,待确认生产可用性);④需要确定性输出——Voice Design 与可控克隆每次运行结果有波动,官方建议跑 1–3 次选最优。
六、快速上手
pip install voxcpm
# 要求:Python ≥ 3.10(<3.13)、PyTorch ≥ 2.5.0、CUDA ≥ 12.0、约 8GB 显存
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)
wav = model.generate(
text="VoxCPM2 brings multilingual support and controllable voice cloning.",
cfg_value=2.0, # 引导强度
inference_timesteps=10, # CFM 步数
)
sf.write("output.wav", wav, model.tts_model.sample_rate)
极致克隆(最高相似度):把同一段音频同时传给 reference_wav_path 与 prompt_wav_path,并附上 prompt_text 逐字转录。最小验收清单:① 跑通基础 TTS 得到 48kHz wav;② Voice Design 用一句描述生成新音色;③ 用 5–15 秒干净录音跑通克隆。三条都过,才算真正跑通。
七、横向对比
| 维度 | VoxCPM2 | CosyVoice3-1.5B | Fish Audio S2 | F5-TTS / XTTS |
|---|---|---|---|---|
| 参数 / 许可 | 2B / Apache-2.0 | 1.5B / Apache-2.0 | 未公开 / 部分开源 | ~0.3B / MIT/CPML |
| 语音表示 | 连续潜变量 | 离散 token | 离散 token | 连续(非自回归) |
| 采样率 | 48kHz | 24kHz | 44.1kHz | 24kHz |
| 语言数 | 30(+9 中文方言) | 多语 | 多语 | 中英为主 |
| Voice Design | ✅ 自然语言造声 | ❌ | ❌ | ❌ |
| 克隆梯度 | 基础/可控/极致三层 | 基础 | 基础 | 基础 |
| 显存 | ~8GB | ~6GB | ~6GB | ~4GB |
| RTF(4090) | ~0.30(Nano-vLLM ~0.13) | 流式 150ms 延迟 | — | 快 |
| 主要代价 | 显存高、需重试 | 可控性弱 | 情感强但可控弱 | 长文/可控弱 |
读法:VoxCPM2 是当前唯一同时满足 Apache-2.0 + 30 语言 + 48kHz + 文本造声的开源选项;代价是显存门槛(约 8GB vs F5-TTS 的 4GB)与运行间波动。如果你的产品价值在「精确控制」,选它;如果价值在「省心自然」,Qwen3-TTS 这类可能更合适。
八、局限、风险与社区观察
第一,运行间波动是设计属性而非 bug。 官方 README 明确写:Voice Design 与可控克隆「结果可能因运行而异,可能需要生成 1–3 次才能得到想要的音色或风格」。离线内容生产可以「抽三张选一张」,但确定性流水线里是麻烦。
第二,48kHz 容易被误读。 模型确实输出 48kHz,但如果参考音频是 16kHz 有损压缩,输出不会凭空多出高频细节——只是把 16kHz 的内容装进了 48kHz 的容器。第三方评测把这一点列为「skeptics 的合理质疑」。
第三,显存与部署门槛真实存在。 8GB 是基线,意味着 RTX 3060 12GB / 4060 Ti 16GB 或更好;8GB 卡不加量化基本跑不动,而上游尚无官方量化支持。Windows 整合包速度明显慢于 Linux/WSL2(社区实测 4090 上 Linux 可跑到 50 tokens/s)。
第四,低资源语言与短文本的边界。 4 字以下极短文本在克隆模式下易产生幻觉(Issue #361、#357);越南语等低资源语言长句末尾偶有无意义音节(Issue #352)。技术报告也把「低资源与长尾语言的数据不平衡」列为未来方向。
第五,许可与合规。 Apache-2.0 允许商用,但 README 明确禁止用于冒充、欺诈或虚假信息。语音克隆的深度伪造风险是这类模型的固有外部性,产品化时必须配内容溯源、水印与合成语音检测。
第六,社区与维护。 维护方是 OpenBMB(机构支撑,Bus Factor 风险低于个人项目),141 个开放 Issue 以功能请求与新语言适配为主。r/TextToSpeech 的高赞评价是「little hallucinations, and has bundled finetune scripts that actually work」——自带微调脚本能真正跑通,一直是 VoxCPM 系列最强的卖点。
九、小结与行动建议
VoxCPM2 的意义不在于把 MOS 分又推高零点几,而在于它用「删掉分词器 + 非对称编解码 + 统一序列」三招,证明了连续潜变量路线可以同时承载多语言、可控性与高保真。它把 TTS 的竞争从「谁的音质好一点」拉到了「谁的架构更能扩展」。
- 先算显存再选型。 8GB 是硬门槛,Mac/AMD/老 CUDA 暂时别碰;只有 4GB 卡请先用 F5-TTS 或 XTTS。
- 把重试写进流水线。 Voice Design 与可控克隆需要 1–3 次抽卡,务必加自动重试与人工听感门禁;需要确定性的场景改用极致克隆。
- 参考音频质量决定上限。 用 5–15 秒、单人、无背景音乐、无回声的干净录音;「你给一坨屎给它模仿,就会得到一坨屎」——这是社区里流传最广的一条经验。
- 生产部署走 vLLM-Omni 并 pin 住 KV cache。 直接用 Nano-vLLM/vLLM-Omni 拿 RTF 0.13,但务必按 PR #4279 显式限制 KV cache,避免小卡 OOM。
- 合规先于产品。 Apache-2.0 允许商用,但禁止冒充与欺诈;上线前配好溯源、水印与合成语音检测,并明确参考音频的授权来源。
资料来源(均抓取于 2026-10-23):GitHub Trending daily 榜单与 GitHub REST API(OpenBMB/VoxCPM,★40,216 / 4,572 fork / 141 open issues,Apache-2.0);仓库 README.md 与官方文档 voxcpm.readthedocs.io(架构页、快速上手页);技术报告 arXiv:2606.06928(2026-06-05,cs.SD);HuggingFace 模型卡 openbmb/VoxCPM2;vllm-project/vllm-omni PR #4279(KV cache pin 修复);第三方评测 andrew.ooo、orcarouter.ai、emergentmind.com、aixq.cc 及社区讨论(r/TextToSpeech、r/LocalLLaMA、lcz.me)。厂商自测数据(WER 1.68%、RTF、相似度)已标注来源;第三方指出的「48kHz 容器 vs 频响上限」「运行间波动」「跨语言口音渗透」等保留意见已并列展示;未能核实的 MLX/量化生产可用性已标注「待确认」。
读者留言
COMMENTS 暂无还没有留言,来说第一句?