跳到主要内容

VoxCPM2

VoxCPM 语音系列

用自己的语音数据探索说话人、风格与领域适配。从数据清单和音频检查开始,选择 LoRA 或全参数微调,再用未参与训练的文本验证音色、可懂度与泛化效果。

VoxCPM2 支持 LoRA 与全参数微调,两者使用同一训练脚本和 JSONL 数据格式。多数个性化说话人、风格或领域任务应先做 LoRA;只有 LoRA 容量不足、数据和算力充足时再评估全参数微调。

选择训练方式​

目标数据规模推荐方式
单一说话人克隆5–50 条高质量片段;官方说明 5–10 分钟音频可起步LoRA,先使用 r=32
领域或风格适配50–500 条片段LoRA,可评估 r=32–64
新增语言官方文档建议 500+ 小时全参数微调,并混入部分中英数据减轻遗忘
大规模定制且 LoRA 容量不足充足且多样的数据全参数微调

官方微调文档给出的参考显存为:VoxCPM2 LoRA 约 20 GB,全参数约 40 GB;这是示例配置的近似值,batch、片段长度、梯度累积和设备会改变实际占用。

准备仓库与模型​

Bash
git clone https://github.com/OpenBMB/VoxCPM.git
cd VoxCPM
pip install -e .

python -c "from huggingface_hub import snapshot_download; snapshot_download('openbmb/VoxCPM2', local_dir='./pretrained_models/VoxCPM2')"

训练配置的 pretrained_path 指向本地模型目录,不是仅用于推理的 Hub 模型 ID。

准备 JSONL 数据​

训练清单每行一个 JSON 对象。audio 与 text 必填;ref_audio、duration 与 dataset_id 可选。

JSON
{"audio":"data/audio_001.wav","text":"第一条音频的逐字转写。","duration":4.2}
{"audio":"data/audio_002.wav","text":"第二条音频的逐字转写。","duration":6.8,"dataset_id":0}
检查项要求
片段官方文档建议 3–30 秒;小于 1 秒易不稳定,过长会增加显存并可能被 max_batch_tokens 过滤。
转写必须与音频逐字一致;错字、漏字和额外口头语都会损害克隆质量与文本遵循。
音频推荐 WAV;单人、低噪声、低混响、音量一致。加载器会自动重采样。
训练采样率VoxCPM2 配置使用 sample_rate: 16000,对应 AudioVAE 编码器输入;out_sample_rate: 48000 是解码输出。
验证集保留未进入训练集的说话内容,用于过拟合与泛化检查。
授权记录说话人同意、数据来源、许可范围和删除机制。

参考音频条件样本:

JSON
{"audio":"data/target.wav","text":"目标音频转写。","ref_audio":"data/same_speaker_reference.wav"}

ref_audio 应是与目标音频来自同一说话人、同一音色的另一段干净录音,用作声音克隆的说话人条件。它不要求是验证集中的未见样本,但不应指向不同说话人或明显不同音色的音频。

官方微调文档建议让 30%–50% 的训练样本包含 ref_audio,其余样本不包含该字段,以同时保留零样本生成和参考音频条件声音克隆能力。该比例是官方建议,仍应通过独立验证集确认是否适合具体数据规模与任务。

Bash
voxcpm validate --manifest train.jsonl --sample-rate 16000

LoRA 微调​

从官方配置复制一份实验配置,修改模型、数据和输出路径;不要直接覆盖仓库示例。

Bash
cp conf/voxcpm_v2/voxcpm_finetune_lora.yaml conf/my_voxcpm2_lora.yaml
YAML
pretrained_path: ./pretrained_models/VoxCPM2
train_manifest: ./train.jsonl
val_manifest: ./val.jsonl
sample_rate: 16000
out_sample_rate: 48000
batch_size: 2
grad_accum_steps: 8
learning_rate: 0.0001
max_steps: 1000
save_interval: 500
save_path: ./checkpoints/voxcpm2_lora
tensorboard: ./logs/voxcpm2_lora
lora:
enable_lm: true
enable_dit: true
enable_proj: false
r: 32
alpha: 32
dropout: 0.0
Bash
# 单卡
python scripts/train_voxcpm_finetune.py --config_path conf/my_voxcpm2_lora.yaml

# 多卡
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 scripts/train_voxcpm_finetune.py --config_path conf/my_voxcpm2_lora.yaml

enable_dit 对音质关键;enable_proj 多数场景保持关闭。官方文档建议说话人克隆从 r=32 开始,风格或语言适配可评估 r=64。

全参数微调​

Bash
cp conf/voxcpm_v2/voxcpm_finetune_all.yaml conf/my_voxcpm2_full.yaml
python scripts/train_voxcpm_finetune.py --config_path conf/my_voxcpm2_full.yaml

全参数配置不包含 lora 节点,示例学习率为 1e-5,约为 LoRA 示例的 1/10。全参数训练更容易灾难性遗忘和过拟合;新增语言时官方文档建议混入 10%–20% 中英数据。

观察训练​

信号处理
loss/diff 与 loss/stop同时观察训练与验证趋势;验证损失反向上升时优先使用更早 checkpoint。
生成停不下来检查 loss/stop、样本时长、文本匹配和数据异常。
音色像但文本被忽略典型过拟合信号;减少步数或学习率,并扩大文本和韵律多样性。
显存不足降低 batch_size 或 max_batch_tokens,增加梯度累积;优先使用 LoRA。

验证 checkpoint​

Bash
# LoRA checkpoint
python scripts/test_voxcpm_lora_infer.py --lora_ckpt checkpoints/voxcpm2_lora/step_0000500 --text "这是一条未出现在训练集中的验证文本。" --output lora_eval.wav

# 全参数 checkpoint
python scripts/test_voxcpm_ft_infer.py --ckpt_dir checkpoints/voxcpm2_full/step_0000500 --text "这是一条未出现在训练集中的验证文本。" --output full_eval.wav

至少比较音色相似度、文本可懂度、未见文本泛化、长短句稳定性、基座能力回归和多次生成波动。不要只试听训练集中的句子。

LoRA WebUI 与热切换​

Bash
python lora_ft_webui.py

WebUI 适合低门槛试验。生产训练仍应保存 YAML、数据 revision 与代码 commit。运行时可通过 load_lora、set_lora_enabled 和 unload_lora 加载、暂时禁用或切换 LoRA,无需重启基座模型。

相关资源​

主题入口
模型概览VoxCPM2 概览
官方微调文档ReadTheDocs Finetuning
代码仓库OpenBMB/VoxCPM

开发者精选

查看全部 →