5步精通CosyVoice语音模型微调:从数据到部署的全流程指南

【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 【免费下载链接】CosyVoice 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice

你是否还在为语音合成模型无法适配特定场景而烦恼?是否希望定制专属的语音风格却受制于通用模型的局限性?本文将带你通过5个关键步骤,掌握CosyVoice语音模型的微调技术,实现从数据准备到模型部署的全流程落地。读完本文,你将能够:

  • 理解CosyVoice不同版本的微调差异
  • 独立完成数据集的预处理与格式转换
  • 配置并运行模型微调训练
  • 优化模型性能并导出部署

版本选择:CosyVoice vs CosyVoice2

CosyVoice项目提供了两个主要版本的微调配置,分别针对不同的应用场景和硬件条件。选择合适的版本是微调成功的第一步。

核心差异对比

配置项 CosyVoice CosyVoice2
采样率 22050Hz 24000Hz
语音令牌数量 4096 6561
基础模型 TransformerLM Qwen2LM
训练学习率 0.001(基础训练)/1e-5(SFT阶段) 1e-5
适用场景 通用语音合成 流式语音合成
配置文件 examples/libritts/cosyvoice/conf/cosyvoice.yaml examples/libritts/cosyvoice2/conf/cosyvoice2.yaml

版本选择建议

  • 若你需要开发实时语音交互应用(如语音助手),推荐选择CosyVoice2,其支持流式推理,配置文件中已内置流式相关参数

    chunk_size: 25 # 流式推理块大小(令牌数)
    num_decoding_left_chunks: -1 # 流式推理解码器左块大小,<0表示使用所有左块
    
  • 若你专注于高质量离线语音合成,CosyVoice基础版提供更成熟的训练流程和更广泛的兼容性。

步骤1:数据准备

高质量的数据集是模型微调成功的基础。CosyVoice支持多种语音数据集,这里以LibriTTS为例,展示完整的数据处理流程。

数据下载与提取

项目提供了自动化的数据下载脚本,可通过以下命令获取LibriTTS数据集:

# 脚本位置:examples/libritts/cosyvoice/local/download_and_untar.sh
bash examples/libritts/cosyvoice/local/download_and_untar.sh /path/to/data www.openslr.org/resources/60 train-clean-100

数据格式转换

下载完成后,需要将原始音频和文本转换为模型训练所需的格式。使用prepare_data.py脚本处理:

python examples/libritts/cosyvoice/local/prepare_data.py \
  --src_dir /path/to/LibriTTS/train-clean-100 \
  --des_dir data/train-clean-100

该脚本会生成四个关键文件:

  • wav.scp: 音频文件路径列表
  • text: 文本内容
  • utt2spk: 语音片段与说话人的映射
  • spk2utt: 说话人与语音片段的映射

步骤2:特征提取

CosyVoice微调需要两种关键特征:说话人嵌入和语音令牌。这些特征通过项目提供的工具脚本提取。

说话人嵌入提取

使用extract_embedding.py提取说话人特征,采用预训练的campplus模型:

python tools/extract_embedding.py \
  --dir data/train-clean-100 \
  --onnx_path pretrained_models/CosyVoice-300M/campplus.onnx

执行后会在数据目录生成两个文件:

  • spk2embedding.pt: 说话人嵌入向量
  • utt2embedding.pt: 语音片段嵌入向量

语音令牌提取

语音令牌是语音信号的离散表示,使用预训练的语音令牌器提取:

# CosyVoice基础版
python tools/extract_speech_token.py \
  --dir data/train-clean-100 \
  --onnx_path pretrained_models/CosyVoice-300M/speech_tokenizer_v1.onnx

# CosyVoice2版本
python tools/extract_speech_token.py \
  --dir data/train-clean-100 \
  --onnx_path pretrained_models/CosyVoice2-0.5B/speech_tokenizer_v2.onnx

步骤3:数据格式化

CosyVoice采用Parquet格式存储训练数据,需要将预处理后的文件转换为这种格式。

生成Parquet文件

使用make_parquet_list.py工具将数据转换为模型训练所需的Parquet格式:

python tools/make_parquet_list.py \
  --num_utts_per_parquet 1000 \
  --num_processes 10 \
  --src_dir data/train-clean-100 \
  --des_dir data/train-clean-100/parquet

该工具会将数据分割为多个Parquet文件,每个文件包含1000个语音片段,便于并行训练。

训练数据列表

创建训练集和验证集的数据列表文件:

# 训练集
cat data/{train-clean-100,train-clean-360,train-other-500}/parquet/data.list > data/train.data.list

# 验证集
cat data/{dev-clean,dev-other}/parquet/data.list > data/dev.data.list

步骤4:模型训练

CosyVoice提供了完善的训练脚本,支持多GPU分布式训练,可通过简单配置启动训练流程。

训练配置

训练配置文件(YAML格式)包含了模型结构、训练参数等关键信息。以CosyVoice2为例,其配置文件定义了数据处理 pipeline

data_pipeline: [
  !ref <parquet_opener>,    # 打开Parquet文件
  !ref <tokenize>,          # 文本令牌化
  !ref <filter>,            # 数据过滤
  !ref <resample>,          # 重采样到目标频率
  !ref <compute_fbank>,     # 计算梅尔频谱
  !ref <parse_embedding>,   # 解析说话人嵌入
  !ref <shuffle>,           # 数据洗牌
  !ref <sort>,              # 数据排序
  !ref <batch>,             # 批量处理
  !ref <padding>            # 填充
]

启动训练

使用项目提供的run.sh脚本启动训练:

# CosyVoice2训练脚本
cd examples/libritts/cosyvoice2
bash run.sh --stage 5 --stop_stage 5

脚本会自动调用训练命令,关键参数说明:

  • --train_engine: 训练引擎选择(torch_ddp或deepspeed)
  • --config: 配置文件路径
  • --model: 训练的模型组件(llm, flow, hifigan)
  • --checkpoint: 预训练模型路径

核心训练命令如下:

torchrun --nnodes=1 --nproc_per_node=$num_gpus \
  cosyvoice/bin/train.py \
  --train_engine torch_ddp \
  --config conf/cosyvoice2.yaml \
  --train_data data/train.data.list \
  --cv_data data/dev.data.list \
  --qwen_pretrain_path $pretrained_model_dir/CosyVoice-BlankEN \
  --model llm \
  --checkpoint $pretrained_model_dir/llm.pt \
  --model_dir exp/cosyvoice2/llm/torch_ddp \
  --use_amp

步骤5:模型优化与导出

训练完成后,需要对模型进行优化并导出为部署格式,以提高推理效率。

模型平均

为提高模型稳定性,可对多个训练周期的模型进行平均:

python cosyvoice/bin/average_model.py \
  --dst_model exp/cosyvoice2/llm/torch_ddp/llm.pt \
  --src_path exp/cosyvoice2/llm/torch_ddp \
  --num 5 \
  --val_best

模型导出

将PyTorch模型导出为ONNX格式,以便在生产环境中部署:

# 导出JIT模型
python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir

# 导出ONNX模型
python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir

部署与应用

CosyVoice提供了多种部署方案,满足不同场景需求:

快速部署选项

  1. Web界面: 使用webui.py启动图形化界面
  2. API服务: 通过FastAPIgRPC提供API服务
  3. Triton推理服务器: 高性能部署方案,支持模型并行和动态批处理

推理示例

使用命令行工具进行语音合成:

python cosyvoice/cli/cosyvoice.py \
  --model_dir pretrained_models/CosyVoice2-0.5B \
  --text "欢迎使用CosyVoice语音合成模型" \
  --output output.wav \
  --speaker_id 0

常见问题与解决方案

训练过拟合

若模型在训练集上表现良好但验证集性能不佳,可尝试:

推理速度慢

对于CosyVoice2,可调整流式推理参数:

chunk_size: 50  # 增大块大小,减少推理次数
inference_cfg_rate: 0.5  # 降低采样质量以提高速度

语音质量问题

若合成语音质量不佳,建议:

  • 检查数据预处理步骤是否正确
  • 增加训练迭代次数
  • 使用更大的预训练模型(如CosyVoice2-0.5B)

通过以上5个步骤,你可以完成CosyVoice语音模型的微调并应用到实际项目中。项目提供的配置文件和脚本已经过优化,可根据具体需求进行调整。如需进一步优化,可参考官方文档或项目中的示例代码

【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 【免费下载链接】CosyVoice 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐