









本文指导在本地 Linux 与 WSL2 环境下,利用 uv 与 ModelScope 完成开源语音大模型 VoxCPM2 的部署与声音克隆。
学完本篇教程后,你将能够:
VoxCPM2 舍弃离散音频分词器,采用连续扩散自回归架构,配合 AudioVAE V2 编码器实现 48kHz 超采样输出。
在正式动手部署前,厘清 3 个核心专业名词:
为了直观对比两代语音生成架构的工程差异,核心特性对照如下表:
| 评估维度 | 传统离散 Tokenizer 方案 (EnCodec / SoundStream) | VoxCPM2 连续扩散表征方案 |
|---|---|---|
| 特征表征空间 | 矢量量化离散整数索引序列 (Vector Quantization) | 连续潜变量特征空间 (Continuous Latent Space) |
| 高保真重构 | 细节量化损失明显,易产生机械电音与杂音 | 端到端扩散建模,完整保留气音、唇齿音与呼吸动态 |
| 声学生成规格 | 多为 16kHz/24kHz,需外挂超分模型后处理 | 内置 AudioVAE V2 非对称通道,直出 48kHz 广播级音频 |
| 音色克隆控制 | 泛化音色单一,风格与提示词难以深度解耦 | 原生支持「可控克隆(指令调节语气)」与「极致克隆(100%对齐)」 |
通过环境初始化、魔搭极速下载、纯 Python 依赖补齐与 WebUI 启动,依次实现端到端推理与麦克风克隆验证。
首先克隆官方代码仓库 OpenBMB/VoxCPM 并进入工程根目录:
1 | git clone https://github.com/OpenBMB/VoxCPM.git |
VoxCPM2 推荐运行在 Python 3.10 或 3.11 环境下。我们使用现代化工具 uv 创建专用的 Python 3.11 虚拟环境,并执行依赖同步:
1 |
|
同步完成后,环境内已就绪 PyTorch 2.10(CUDA 12.9)、torchaudio、Gradio 6、funasr 以及 ModelScope SDK。
VoxCPM2 权重包含 4.27GB 的主模型 model.safetensors 与 359MB 的 audiovae.pth。直接从海外 Hugging Face 下载容易遭遇连接重置或限速。官方已将完整权重同步至国内 ModelScope 社区 OpenBMB/VoxCPM2 平台,可利用阿里云高速 CDN 进行百兆跑满下载:
1 | .venv/bin/python -c " |
在实测带宽下,平均下载速率达到 48MB/s,仅用时 1 分 40 秒即完成了全部文件的完整校验与落盘。
检查落盘目录结构:
1 | ls -lh ./pretrained_models/VoxCPM2 |
执行以下命令,在本地指定端口启动 WebUI 服务:
1 | PATH="$(pwd)/.venv/bin:$PATH" .venv/bin/python app.py --model-id ./pretrained_models/VoxCPM2 --port 8808 --host 0.0.0.0 |
启动日志提示如下内容时,说明后台服务已正常就绪:
1 | Loaded VoxCPM2Model |
在宿主机浏览器中打开 http://localhost:8808,即可看到全功能的交互界面:

在首次尝试通过浏览器录制参考音频时,Web 界面弹出了“找不到麦克风”的异常提示:

这一现象并非 WSL2 内部缺失声卡驱动,而是由于现代 Chromium 内核对 HTTP 明文地址限制了 getUserMedia 硬件调用权限。通过以下步骤即可根治:
1 | edge://flags/#unsafely-treat-insecure-origin-as-secure |

http://localhost:8808, http://127.0.0.1:8808 填入白名单输入框,并将状态切换为 Enabled(已启用),随后点击右下角按钮重启浏览器:
1 | navigator.mediaDevices.getUserMedia({ audio: true }) |
控制台成功打印连接状态:

刷新页面后,点击录音按钮,成功录制了 15 秒清晰的真人音频样本并渲染出完整的声波波形:

在获得参考音频后,进入核心克隆流程:



针对 WSL2 浏览器找不到麦克风、PyTorch 动态库缺失报错以及海外镜像源拉取超时等现场高频问题提供根治方案。
Could not load libtorchcodec 和 libavutil.so 缺失怎么办?解答:这是 PyTorch 2.10 与 TorchAudio 强行引入
torchcodec引起的经典底层依赖冲突。torchcodec底层需要动态链接操作系统的 C 共享库libavutil.so.56/58。若尝试使用sudo apt install ffmpeg,又容易因 Ubuntu 默认官方源未更换国内源而出现Unable to connect to archive.ubuntu.com的网络超时。工程级有效解法:直接在 Python 业务层将音频读写逻辑与
torchaudio.load()解耦,换用纯 Python 的soundfile回退机制。
在src/voxcpm/zipenhancer.py与src/voxcpm/model/voxcpm.py中,将音频读取修改为如下安全模式:
1
2
3
4
5
6
7
8 try:
audio, sr = torchaudio.load(wav_path)
except Exception:
import soundfile as sf
import torch
data, sr = sf.read(wav_path, dtype="float32")
audio = torch.from_numpy(data)
audio = audio.unsqueeze(0) if audio.ndim == 1 else audio.t()响度归一化保存同样采用
sf.write()替代。该改造彻底移除了对外部 C 动态库的硬性要求,100% 在 uv 虚拟环境内部完成闭环。
解答:这属于浏览器安全策略拦截。
- 确认访问地址使用
http://localhost:8808或http://127.0.0.1:8808,避免使用 WSL2 内部虚拟 IP;- 在浏览器
chrome://flags或edge://flags中将该来源加入Insecure origins treated as secure白名单;- 在页面按下 F12,通过控制台执行一次
navigator.mediaDevices.getUserMedia({ audio: true })手动唤醒浏览器的声卡驱动枚举接口。
解答:完全正常。首次调用时 PyTorch 会进行动态编译(compile_fx)并执行 10 步 Warmup 预热,以构建 GPU 算子图缓存。预热完成后,在 RTX 4090 上的单步生成速度可稳定在 21 it/s 以上,实时率(RTF)低至 0.3。
通过轻量环境隔离与国内镜像源加速,完成 VoxCPM2 部署闭环,未来可结合 Nano-vLLM 进一步优化流式推理。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。