VoxCPM2 保姆级部署教程:面壁智能开源 30 语言多情感 TTS 从安装到声音克隆全流程
VoxCPM 是面壁智能(OpenBMB)开源的 tokenizer-free 语音合成系统,采用端到端"扩散自回归"架构直接生成连续语音表示,跳过离散 token 化环节。当前最新版本 VoxCPM2 是一个 2B 参数模型,在 200 多万小时多语言语音数据上训练,支持 30 种语言、8 种中文方言,并提供 48kHz 工作室级音质输出,代码与权重均以 Apache-2.0 协议开放、可商用。它有三个杀手级能力:Voice Design(只用一段自然语言描述凭空造一个新音色)、Controllable Cloning(克隆音色的同时还能控制情绪语速)、Ultimate Cloning(给参考音频+逐字稿实现极高相似度复刻)。本文严格按官方 README 与 ReadTheDocs 文档,从 pip 安装讲到 vLLM 生产部署,零基础可复现。

一、项目介绍与适用场景
VoxCPM2 基于 MiniCPM-4 主干架构,工作在 AudioVAE V2 的隐空间中,按 LocEnc → TSLM → RALM → LocDiT 四阶段流水线生成语音。"tokenizer-free"是它的核心卖点:传统 TTS 先把音频压成离散 token 再逐 token 预测,容易在 token 边界出现咔哒声和韵律不连贯;VoxCPM 直接在连续隐空间里做扩散生成,听感更顺滑。官方给出的模型代际对比:VoxCPM2(2B,最新,48kHz,30 语言,支持 Voice Design 与可控克隆)、VoxCPM1.5(0.6B,稳定,44.1kHz,中英双语)、VoxCPM-0.5B(0.5B,经典版,16kHz,中英双语)。
适用场景:
- 个人创作者:用 Voice Design 直接描述"一个温柔甜美的年轻女声"生成专属音色,不需要任何参考音频;
- 产品团队:通过 vLLM-Omni 拉起 OpenAI 兼容的
/v1/audio/speech接口,几行代码把业务切到自托管 TTS; - 边缘部署:用 llama.cpp-omni 的 GGUF 量化版,在没有 Python、没有 CUDA 的机器(Apple Silicon、CPU、Vulkan)上跑 TTS;
- 研究/二次开发:官方支持 SFT 与 LoRA 微调,可以用自己的数据集继续训练。
与站点此前写过的 GPT-SoVITS、F5-TTS、CosyVoice 相比,VoxCPM2 的差异在于:它的"Voice Design"是纯描述造音色,而不是克隆已有音色;同时官方直接提供了生产级 vLLM-Omni 服务方案与端侧 GGUF 方案,部署链路最完整。
从官方公布的 Seed-TTS-eval 基准看,VoxCPM2 在中文 CER 上达到 0.97%、说话人相似度 79.5%,英文 WER 1.84%、相似度 75.3%,在开源模型里处于第一梯队,与 CosyVoice3、Seed-TTS 等闭源模型的差距已经很小。MiniMax-Multilingual-Test 上,中文相似度 82.5%、英文 85.4%、粤语 83.5%,多语言覆盖能力是它的核心卖点。
为什么值得现在部署它?三个理由:第一,Apache-2.0 协议直接允许商用,没有 AGPL 类传染性条款,也没有模型权重单独的非商业限制;第二,官方把"个人玩票到生产上线"的整条链路都写进了 README——pip 一行装、Web Demo 一行起、vLLM 一行拉起 OpenAI 兼容服务、llama.cpp 一行端侧跑,不需要自己拼装;第三,它是 2026 年仍在高频更新的项目(最近一次提交在 2026 年 10 月),踩坑有人接、新功能持续加。
二、核心功能逐条拆解
- 30 语言多语言合成:直接输入任意支持语言的文本,无需语言标签。官方列表含中、英、日、韩、法、德、西、俄、阿等 30 种语言。
- Voice Design 音色设计:在文本开头括号里写音色描述(如
(A young woman, gentle and sweet voice)你好),模型凭空生成新音色。对应 API:model.generate(text=...)。 - Controllable Cloning 可控克隆:给一段参考音频克隆音色,同时用括号提示词控制情绪/语速。对应 API:
reference_wav_path="path/to/voice.wav"。 - Ultimate Cloning 终极克隆:同时给参考音频与逐字稿(
prompt_wav_path+prompt_text),复刻音色、节奏、情绪全部细节。 - 48kHz 高音质输出:通过 AudioVAE V2 非对称编解码,16kHz 参考音频直接输出 48kHz,内置超分,无需外部上采样器。
- 流式合成 API:
model.generate_streaming()逐块返回音频,适合实时对话场景。 - Web Demo:
python app.py --port 8808一键起浏览器界面。 - 生产级服务:Nano-vLLM-VoxCPM(RFR ~0.13)与 vLLM-Omni(OpenAI 兼容 API)两条官方路线。
- 端侧推理:llama.cpp-omni 支持 GGUF,CPU/Metal/CUDA/Vulkan 全平台。
- 时间戳输出:可选
pip install "voxcpm[timestamps]",输出词级/字级时间戳,适合做字幕对齐。
三、全套官方链接
| 类型 | 链接 |
|---|---|
| GitHub 仓库 | https://github.com/OpenBMB/VoxCPM |
| 官方文档 | https://voxcpm.readthedocs.io/en/latest/ |
| 官方 Demo | https://huggingface.co/spaces/OpenBMB/VoxCPM-Demo |
| HuggingFace 权重 | https://huggingface.co/openbmb/VoxCPM2 |
| ModelScope 权重 | https://modelscope.cn/models/OpenBMB/VoxCPM2 |
| License | Apache-2.0 |
四、硬件与环境前置要求
官方 README 明确要求:
- Python 版本:≥ 3.10,且 < 3.13;
- PyTorch 版本:≥ 2.5.0;
- CUDA 版本:≥ 12.0(GPU 推理路线);
- 显存(VRAM):VoxCPM2 约 8GB,VoxCPM1.5 约 6GB,VoxCPM-0.5B 约 5GB(官方 Models & Versions 表格);
- 速度参考:NVIDIA RTX 4090 上 RTF 约 0.30(标准 PyTorch 实现),Nano-vLLM 加速后约 0.13;Apple M4 Pro 上 GGUF Q8_0 量化版 RTF 约 1.76(llama.cpp-omni);
- 支持设备:官方 Web Demo 的
--device参数支持auto、cpu、mps、cuda、cuda:N,Apple Silicon Mac 在 auto 模式下自动用 MPS。
官方未提供 Windows 原生安装包,Windows 用户建议走 WSL2 Linux 环境。
补充说明:如果你手头只有一张 6GB 显存的卡,建议直接用 VoxCPM1.5(约 6GB 显存);4GB 显存甚至核显用户,走 llama.cpp-omni 的 GGUF Q8_0 量化版,官方实测 Apple M4 Pro 上 RTF 约 1.76,也就是合成 10 秒音频大约花 17.6 秒,完全够用。磁盘方面,VoxCPM2 的权重约 4–5GB,建议预留 10GB 以上空间。
五、多平台部署步骤
5.1 源码 / pip 安装(官方 Quick Start)
第 1 步:创建虚拟环境并安装:
pip install voxcpm
官方要求 Python ≥ 3.10(<3.13)、PyTorch ≥ 2.5.0、CUDA ≥ 12.0。建议先 conda create -n voxcpm python=3.11 -y && conda activate voxcpm,再按 pytorch.org 官方命令安装对应 CUDA 版本的 PyTorch,最后 pip install voxcpm。
第 2 步:Python API 跑通最简 TTS(官方示例原文):
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained(
"openbmb/VoxCPM2",
load_denoiser=False,
)
wav = model.generate(
text="VoxCPM2 is the current recommended release for realistic multilingual speech synthesis.",
cfg_value=2.0,
inference_timesteps=10,
seed=42,
)
sf.write("demo.wav", wav, model.tts_model.sample_rate)
print("saved: demo.wav")
逐段解释:VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False) 从 HuggingFace 下载并加载模型;generate() 里 cfg_value=2.0 是无分类器引导强度,inference_timesteps=10 是扩散步数(越大越慢越稳),seed=42 固定随机种子保证可复现;sf.write() 用 soundfile 写出 wav,采样率取模型自带的 model.tts_model.sample_rate。
第 3 步(国内网络):先用 ModelScope 下载模型再本地加载:
pip install modelscope
from modelscope import snapshot_download
snapshot_download("OpenBMB/VoxCPM2", local_dir='./pretrained_models/VoxCPM2')
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained("./pretrained_models/VoxCPM2", load_denoiser=False)
5.2 Web Demo 部署(官方)
python app.py --port 8808
然后浏览器打开 http://localhost:8808。用 --device 选择运行设备:
python app.py --device auto
官方说明:--device 支持 auto、cpu、mps、cuda、cuda:N,Apple Silicon Mac 上 auto 自动用 MPS。(注意:app.py 在克隆的仓库根目录里,需先 git clone https://github.com/OpenBMB/VoxCPM.git。)
5.3 生产部署:Nano-vLLM(官方)
pip install nano-vllm-voxcpm
from nanovllm_voxcpm import VoxCPM
import numpy as np, soundfile as sf
server = VoxCPM.from_pretrained(model="/path/to/VoxCPM", devices=[0])
chunks = list(server.generate(target_text="Hello from VoxCPM!"))
sf.write("out.wav", np.concatenate(chunks), 48000)
server.stop()
官方说明:RTX 4090 上 RTF 低至 ~0.13(标准实现 ~0.3),支持批量并发请求与 FastAPI HTTP server。
5.4 生产部署:vLLM-Omni(官方 OpenAI 兼容服务)
uv pip install vllm==0.19.0 --torch-backend=auto
git clone https://github.com/vllm-project/vllm-omni.git && cd vllm-omni
uv pip install -e .
启动 OpenAI 兼容 TTS 服务:
vllm serve openbmb/VoxCPM2 --omni --port 8000
调用:
curl http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model":"openbmb/VoxCPM2","input":"Hello from VoxCPM2 on vLLM-Omni!","voice":"default"}' \
--output out.wav
官方说明:基于 vLLM 调度器,带 PagedAttention KV cache、连续批处理、流式分块返回、多 GPU 部署。其他平台(ROCm、XPU、MUSA、NPU)与 Docker 镜像见 vLLM-Omni 官方安装文档。
5.5 端侧部署:llama.cpp-omni(官方,无 Python 环境)
第 1 步:从 HuggingFace 或 ModelScope 下载 GGUF 权重——需要一个 BaseLM 文件(F16 或 Q8_0)+ 一个 Acoustic 文件。官方说明 Q8_0 可减半下载体积且质量损失可忽略。
第 2 步:编译:
git clone https://github.com/tc-mb/llama.cpp-omni.git && cd llama.cpp-omni
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target voxcpm2-cli -j
CMake 会自动检测 macOS 的 Metal 或 Linux 的 CUDA。
第 3 步:运行:
./build/bin/voxcpm2-cli \
-t "Hello, this is VoxCPM2 running through llama.cpp-omni." \
-o output.wav VoxCPM2-BaseLM-Q8_0.gguf VoxCPM2-Acoustic-F16.gguf
六、配置文件全部参数解释
VoxCPM 是纯 Python 包,无独立配置文件,参数全部体现在 generate() 函数与 CLI 上。按官方文档整理:
| 参数 | 作用 | 可选值 | 默认值 | 配置示例 | 改错后果 |
|---|---|---|---|---|---|
cfg_value |
无分类器引导强度 | 浮点数 | 官方示例 2.0 | cfg_value=2.0 |
过高会让语音生硬 |
inference_timesteps |
扩散步数 | 整数 | 官方示例 10 | inference_timesteps=10 |
越大越慢,过小音质差 |
seed |
随机种子 | 整数 | 无 | seed=42 |
不设则每次结果不同 |
reference_wav_path |
可控克隆参考音频路径 | wav 文件路径 | 无 | path/to/voice.wav |
路径错误会报文件不存在 |
prompt_wav_path |
终极克隆提示音频 | wav 文件路径 | 无 | 同上 | 与 prompt_text 不匹配会影响相似度 |
prompt_text |
参考音频的逐字稿 | 文本 | 无 | "The transcript..." |
逐字稿错误会导致韵律异常 |
load_denoiser |
是否加载降噪器 | True/False | False | VoxCPM.from_pretrained(..., load_denoiser=False) |
开启会多占显存 |
CLI --text |
要合成的文本 | 字符串 | 必填 | "你好" |
空文本直接报错 |
CLI --control |
音色控制描述 | 字符串 | 无 | "Young female voice..." |
只在 design 子命令生效 |
CLI --output |
输出 wav 路径 | 文件路径 | 必填 | out.wav |
目录不存在会写失败 |
CLI --timestamps |
是否输出时间戳 | 开关 | 关 | --timestamps |
需先装 voxcpm[timestamps] |
CLI --timestamp-level |
时间戳粒度 | word/char | word | --timestamp-level char |
中文建议 char |
七、启动、后台常驻与开机自启
7.1 命令行(CLI)
voxcpm design --text "VoxCPM2 brings studio-quality multilingual speech synthesis." --output out.wav
官方还提供:
voxcpm clone --text "This is a voice cloning demo." --reference-audio path/to/voice.wav --output out.wav
voxcpm batch --input examples/input.txt --output-dir outs
7.2 Web Demo 后台常驻
nohup python app.py --port 8808 --device cuda > voxcpm_web.log 2>&1 &
或 systemd:
[Unit]
Description=VoxCPM Web Demo
After=network.target
[Service]
User=your_user
WorkingDirectory=/your/path/VoxCPM
ExecStart=/bin/bash -c "source /opt/conda/etc/profile.d/conda.sh && conda activate voxcpm && python app.py --port 8808 --device cuda"
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now voxcpm-web
7.3 vLLM-Omni 服务常驻
把 vllm serve openbmb/VoxCPM2 --omni --port 8000 写进 systemd unit,Restart=always。
7.4 修改端口
Web Demo 改 --port 8808 为别的值;vLLM 改 --port 8000。改完浏览器/curl 访问新端口验证。
八、功能实操教程
第 1 步:装好 pip install voxcpm 后,运行最简 Python 示例,等待模型下载(首次约 2B 体积),生成 demo.wav。
第 2 步:Voice Design 造音色:
wav = model.generate(
text="(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!",
cfg_value=2.0,
inference_timesteps=10,
seed=42,
)
sf.write("voice_design.wav", wav, model.tts_model.sample_rate)
听到一个全新女声即成功。
第 3 步:可控克隆:准备一段 10 秒以内的 wav(例如 speaker.wav),运行:
wav = model.generate(
text="(slightly faster, cheerful tone)This is a cloned voice with style control.",
reference_wav_path="speaker.wav",
cfg_value=2.0,
inference_timesteps=10,
seed=42,
)
sf.write("controllable_clone.wav", wav, model.tts_model.sample_rate)
第 4 步:终极克隆(相似度最高):
wav = model.generate(
text="This is an ultimate cloning demonstration using VoxCPM2.",
prompt_wav_path="speaker.wav",
prompt_text="The transcript of the reference audio.",
reference_wav_path="speaker.wav",
)
sf.write("hifi_clone.wav", wav, model.tts_model.sample_rate)
第 5 步:流式合成验证:
import numpy as np
chunks = []
for chunk in model.generate_streaming(text="Streaming text to speech is easy with VoxCPM!"):
chunks.append(chunk)
wav = np.concatenate(chunks)
sf.write("streaming.wav", wav, model.tts_model.sample_rate)
第 6 步:浏览器打开 Web Demo http://localhost:8808,在页面上切换 design / clone 模式合成一段中文。
第 7 步:跑一次中文方言合成。在 text 里直接写四川话句子,例如"(四川话口音,幽默)你这个事情搞得有点巴适嘛",观察模型是否能给出带口音韵律的中文。官方支持的中文方言包括四川话、粤语、吴语、东北话、河南话、陕西话、山东话、天津话、闽南话,这是中英双语 TTS 项目里少见的能力。
第 8 步:用时间戳功能做字幕对齐。执行:
pip install "voxcpm[timestamps]"
voxcpm design --text "欢迎使用 VoxCPM2。" --output out.wav \
--timestamps --timestamp-level char --timestamp-language zh
合成后会同时输出一份字级时间戳文件,可直接喂给剪辑软件做字幕对齐。
九、全套报错故障排查
-
报错:
No matching distribution found for voxcpm。 原因分析:Python 版本不在 3.10–3.12 区间。 分步解决方案:python --version确认,用conda create -n voxcpm python=3.11重建环境。 -
报错:
CUDA out of memory。 原因分析:2B 模型需要约 8GB 显存。 分步解决方案:关闭其他占显存进程;换用 VoxCPM1.5(约 6GB)或 VoxCPM-0.5B(约 5GB);或走 llama.cpp-omni 的 GGUF Q8_0 量化版。 -
报错:HuggingFace 下载模型超时。 原因分析:国内访问 HF 不稳。 分步解决方案:改用官方 ModelScope 方式:
pip install modelscope,snapshot_download("OpenBMB/VoxCPM2", local_dir='./pretrained_models/VoxCPM2'),再VoxCPM.from_pretrained("./pretrained_models/VoxCPM2")。 -
报错:
import torch或 CUDA 相关错误。 原因分析:PyTorch 版本 < 2.5.0 或未装 CUDA 版。 分步解决方案:按 pytorch.org 官方命令重装对应 CUDA 12.x 的 PyTorch,确认python -c "import torch; print(torch.cuda.is_available())"输出 True。 -
报错:时间戳参数无效。 原因分析:未安装 timestamps extra。 分步解决方案:
pip install "voxcpm[timestamps]"后再用--timestamps。 -
报错:克隆音色相似度低。 原因分析:只给了参考音频没给逐字稿。 分步解决方案:改用 Ultimate Cloning 方式,同时传
prompt_wav_path与prompt_text(逐字稿要与音频内容完全一致)。官方建议把同一段参考音频同时传给prompt_wav_path与reference_wav_path以获得最大相似度。 -
报错:合成出来的中文读得像外国人,或多音字读错。 原因分析:文本本身没有标注发音上下文,模型按字面概率朗读。 分步解决方案:把容易读错的多音字在文本里换成更明确的写法(例如"行长"改成"银行行长"或"cháng 行长");或在文本里加标点控制停顿;官方 Cookbook 文档里有更多文本预处理技巧。
十、升级、回滚与卸载
升级:pip install -U voxcpm;vLLM-Omni 路线 git pull && uv pip install -e .。升级前建议先 pip show voxcpm 记下当前版本号,万一新版有兼容问题可以 pip install voxcpm==<旧版本号> 回退。
备份建议:ModelScope 下载到 ./pretrained_models/VoxCPM2 的模型目录单独备份;自定义的参考音频 wav 与逐字稿注意留存;自己改过的 app.py 或 systemd unit 文件记得版本管理。
回滚:pip install voxcpm==<旧版本号>;或 vllm serve 时指定旧权重目录;GGUF 路线则直接换回旧版 gguf 文件即可。
卸载:pip uninstall voxcpm;删除模型目录与 outputs/;systemd 方式 sudo systemctl disable --now voxcpm-web 并删除 unit 文件;GGUF 路线删除 llama.cpp-omni/build 目录与下载的 gguf 文件。
十一、商用许可与合规风险提示
代码与权重均为 Apache-2.0,官方明确说明 "Fully Open-Source & Commercial-Ready — Weights and code released under the Apache-2.0 license, free for commercial use"。需要注意:克隆真人音色涉及肖像权/声音权,商业产品中克隆他人声音需取得本人书面授权;官方 Risks and Limitations 章节提示了滥用风险,部署时建议在产品内加入合成语音标识。本教程不构成法律意见。
参考链接
- GitHub 仓库:https://github.com/OpenBMB/VoxCPM
- 官方文档:https://voxcpm.readthedocs.io/en/latest/
- HuggingFace 权重:https://huggingface.co/openbmb/VoxCPM2
- ModelScope 权重:https://modelscope.cn/models/OpenBMB/VoxCPM2
- vLLM-Omni:https://github.com/vllm-project/vllm-omni
- llama.cpp-omni:https://github.com/tc-mb/llama.cpp-omni