当前位置:首页 > 技术 > 正文内容

CosyVoice语音模型微调实践:数据处理到部署全流程

访客 技术 2026年6月2日 1

模型版本选择:CosyVoice与CosyVoice2对比

配置项CosyVoiceCosyVoice2
采样率22050Hz24000Hz
语音令牌数量40966561
基础架构TransformerLMQwen2LM
学习率设置0.001(基础)/1e-5(SFT)1e-5
适用场景通用合成流式合成
配置文件路径examples/libritts/cosyvoice/conf/config_v1.yamlexamples/libritts/cosyvoice2/conf/config_v2.yaml

版本选择建议

实时语音交互应用建议选择CosyVoice2,支持流式推理配置:

stream_chunk: 25  # 流式块大小(令牌数)
left_context: -1  # 解码上下文范围,负值表示全上下文

离线高质量合成推荐CosyVoice基础版,兼容性更广。

数据处理流程

以LibriTTS数据集为例的操作流程:

# 数据集下载
bash scripts/fetch_dataset.sh /your/data/dir www.openslr.org/60 train-set

# 格式转换
python scripts/convert_format.py \
  --input_dir /source/LibriTTS \
  --output_dir /processed/train-set

生成关键文件:音频路径列表、文本内容、语音片段映射关系。

特征提取操作

提取说话人特征:

python tools/get_speaker_vectors.py \
  --data_dir /processed/train-set \
  --model_file pretrained/campplus.onnx

提取语音令牌:

# CosyVoice版本
python tools/get_audio_tokens.py \
  --data_path /processed/train-set \
  --token_model pretrained/tokenizer_v1.onnx

# CosyVoice2版本
python tools/get_audio_tokens.py \
  --data_path /processed/train-set \
  --token_model pretrained/tokenizer_v2.onnx

训练数据格式化

转换为Parquet格式:

python tools/create_parquet_sets.py \
  --samples_per_file 1000 \
  --worker_count 8 \
  --source_dir /processed/train-set \
  --target_dir /parquet/train-set

模型训练执行

训练配置示例:

processing_steps: [
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref ,
  !ref 
]

启动训练命令:

torchrun --nproc_per_node=4 \
  voice_model/trainer.py \
  --engine ddp \
  --config conf/train_v2.yaml \
  --train_set /parquet/train.list \
  --val_set /parquet/val.list \
  --pretrain_path /models/base_model \
  --model_component language_model \
  --checkpoint /models/lm_checkpoint.pt \
  --output_dir /training_output \
  --use_mixed_precision

模型优化与导出

权重平均优化:

python model_tools/average_weights.py \
  --output_model /optimized/lm.pt \
  --model_dir /training_output \
  --snapshot_count 5 \
  --select_best

导出部署格式:

# 导出JIT格式
python export/convert_jit.py --model_dir /optimized

# 导出ONNX格式
python export/convert_onnx.py --model_dir /optimized

部署实施方案

主要部署方式:

  1. Web交互界面
  2. API服务接口
  3. Triton推理服务器

命令行合成示例:

python voice_synth/cli/synthesize.py \
  --model_path /deploy_models/cosyvoice2 \
  --text "语音合成测试内容" \
  --output test_audio.wav \
  --speaker 5

常见问题处理

训练过拟合:降低学习率,增强数据过滤

推理延迟:调整流式参数:

stream_chunk: 50
inference_speed: 0.5

音质问题:验证数据预处理流程,增加训练轮次

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。