语音合成模型EAGLE3#
Eagle3是目前最常用、加速效果最好的投机采样算法。 本项目包括Eagle3的训练以及benchmark测试,并开源了Fun-CosyVoice3的Eagle3权重。
我们训练的Fun-CosyVoice3 Eagle3模型的表现可以参见基准测试benchmarks
1. 支持模型列表#
Fun-CosyVoice3
2. 准备数据#
2.1 数据组织形式#
所有数据需保存在jsonl文件中,数据格式可参考:
原始训练数据示例:
AngelSlim/dataset/tts_fake_data/train.jsonl重采样训练数据示例:
AngelSlim/dataset/tts_fake_data/train_regenerate.jsonl
2.2 原始训练数据#
每行字段意义如下:
text:输入文本audio_path:真实音频绝对路径instruct:发音人文本表示instruct_audio_path:发音人音频绝对路径
2.3 重采样训练数据(推荐)#
为得到高质量的目标模型SFT数据,建议使用目标模型重新采样训练数据,将LLM生成的语音token保存在jsonl文件中,每行字段意义如下:
text:输入文本audio_tokens:生成的语音tokeninstruct:发音人文本表示instruct_audio_path:发音人音频绝对路径
3. 训练Eagle3模型#
目前仅支持在线训练模式。
3.1 在线训练#
使用下面的脚本进行Eagle3模型的在线训练:
bash scripts/speculative/train_eagle3_tts_online.sh
脚本参数说明:
在使用前,需要在脚本中配置以下参数:
TARGET_MODEL_NAME_OR_PATH: 目标模型的HF名称或本地名称DRAFT_MODEL_CONFIG_PATH: 草稿模型的config路径TRAIN_DATA_PATH: 训练数据路径OUTPUT_DIR: Eagle3模型输出路径MODEL_MAX_LENGTH: 训练数据的最大长度
4. 基准测试#
AngelSlim提供了HF backend的Eagle3基准测试脚本,用于评估投机采样的性能提升。
4.1 HF基准测试#
Fun-CosyVoice3仅支持HF测试平均接收长度。
4.1.1 基本用法#
使用 tools/spec_benchmark.py 脚本进行投机采样基准测试:
python3 tools/spec_benchmark.py \
--base-model-path ${BASE_MODEL_PATH} \
--eagle-model-path ${EAGLE_MODEL_PATH} \
--model-id ${MODEL_ID} \
--mode both
4.1.2 参数说明#
模型配置参数:
--base-model-path: 基础模型路径(必需)--eagle-model-path: Eagle辅助模型路径(必需)--model-id: 模型标识符(必需)--is-tts: 是否为TTS模型,默认为False
基准测试配置:
--bench-name: 基准数据集名称,可参考【tts_fake_data】--mode: 执行模式,可选eagle(仅投机采样)、baseline(仅基线)、both(两者都执行),默认为both--output-dir: 结果输出目录
生成参数:
--temperature: 采样温度,默认为 1.0--max-new-token: 最大生成token数,默认为 1024--total-token: 草稿树中的总节点数,默认为 60--depth: 树深度,默认为 5--top-k: Top-k采样,默认为 10--generate-audio: 是否生成最终音频
硬件配置:
--num-gpus-per-model: 每个模型使用的GPU数量,默认为 1--num-gpus-total: 总GPU数量,默认为 1--max-gpu-memory: 每个GPU的最大内存限制
其他设置:
--seed: 随机种子,默认为 42--question-begin: 问题起始索引(用于调试)--question-end: 问题结束索引(用于调试)--no-metrics: 跳过自动指标计算
注意事项:
--bench-name: 也可以添加自定义测试集,在AngelSlim/dataset目录下创建新的子目录并将目录名作为--bench-name,在新目录下创建question.jsonl,框架会自动读取该文件--temperature:Fun-CosyVoice3在temperature为0时容易生成大量重复token,建议测试时使用默认配置
4.1.3 使用示例#
完整基准测试:
python3 tools/spec_benchmark.py \
--base-model-path /path/to/base/model \
--eagle-model-path /path/to/eagle/model \
--model-id cosyvoice3 \
--mode both \
--output-dir ./results \
--deploy-backend pytorch \
--is-tts \
--bench-name tts_fake_data \
--generate-audio
注意事项:
Fun-CosyVoice3在设置generate-audio为True时需要额外导入cosyvoice包,安装步骤如下:git clone https://github.com/FunAudioLLM/CosyVoice pip install hyperpyyaml omegaconf conformer diffusers hydra-core lightning gdown matplotlib wget x-transformers pyworld librosa
测试脚本参考:
export PYTHONPATH=/xxx/CosyVoice:/xxx/CosyVoice/third_party/Matcha-TTS:$PYTHONPATH python3 tools/spec_benchmark.py [ARGS]
不生成音频:
python3 tools/spec_benchmark.py \
--base-model-path /path/to/base/model \
--eagle-model-path /path/to/eagle/model \
--model-id cosyvoice3 \
--mode both \
--output-dir ./results \
--deploy-backend pytorch \
--is-tts \
--bench-name tts_fake_data \