Orpheus TTS —— 基于 Unsloth 的文本转语音微调


文档摘要

源文件:chapter7/orpheus/README.md Orpheus TTS —— 基于 Unsloth 的文本转语音微调 本项目演示如何使用 Unsloth 高效地微调 Orpheus 3B 文本转语音模型,并完成推理。 概览 Orpheus 是一个文本转语音(TTS)模型,能把文本转换为自然听感的语音。本实现使用: Unsloth 做高效的 LoRA 微调(显存占用减少 30%,batch size 可放大 2 倍) SNAC(随机神经音频编解码器)做 24kHz 的音频分词 Hugging Face Transformers 做模型训练与推理 功能特性 ✅ 以极低的显存占用微调 Orpheus 3B 模型 ✅ 支持单说话人与多说话人 TTS ✅

源文件:chapter7/orpheus/README.md

Orpheus TTS —— 基于 Unsloth 的文本转语音微调

本项目演示如何使用 Unsloth 高效地微调 Orpheus 3B 文本转语音模型,并完成推理。

概览

Orpheus 是一个文本转语音(TTS)模型,能把文本转换为自然听感的语音。本实现使用:

  • Unsloth 做高效的 LoRA 微调(显存占用减少 30%,batch size 可放大 2 倍)
  • SNAC(随机神经音频编解码器)做 24kHz 的音频分词
  • Hugging Face Transformers 做模型训练与推理

功能特性

  • ✅ 以极低的显存占用微调 Orpheus 3B 模型
  • ✅ 支持单说话人与多说话人 TTS
  • 带情感标签的富有表现力的语音(laugh、sigh、gasp 等)
  • ✅ 可自定义参数生成音频
  • ✅ 自动把生成的语音导出为 WAV 文件
  • ✅ 通过 LoRA 适配器训练实现高效微调

安装

前置条件

  • Python 3.8+
  • CUDA 兼容 GPU(推荐 16GB 以上显存)
  • 已安装 CUDA 工具包

安装依赖

重要:为保证兼容性,datasets 包的版本须在 3.4.1 到 4.0.0 之间。

pip install sentencepiece protobuf "datasets>=3.4.1,<4.0.0" "huggingface_hub>=0.34.0" hf_transfer pip install -r requirements.txt

对于 Colab 或特定环境,你可能还需要:

pip install --no-deps bitsandbytes accelerate xformers peft trl triton cut_cross_entropy unsloth_zoo pip install --no-deps unsloth

项目结构

orpheus/ ├── orpheus_sft_unsloth.py # Full training + inference script ├── inference.py # Standalone inference script ├── requirements.txt # Python dependencies ├── README.md # This file ├── lora_model/ # Saved LoRA adapters (after training) └── generated_audio/ # Generated audio outputs

用法

训练

在你的数据集上微调模型:

python orpheus_sft_unsloth.py

训练脚本会:

  1. 加载预训练的 Orpheus 3B 模型
  2. 应用 LoRA 适配器以实现高效微调
  3. 在 MrDragonFox/Elise 数据集(或你的自定义数据集)上训练
  4. 把微调后的 LoRA 适配器保存到 lora_model/

训练参数:

  • Batch size:每设备 1
  • 梯度累积:4 步
  • 学习率:2e-4
  • 训练步数:60(可配置)
  • LoRA rank:64

推理

用微调后的模型从文本生成语音:

python inference.py

或作为模块使用:

from inference import OrpheusInference # Initialize the model tts = OrpheusInference( model_path="unsloth/orpheus-3b-0.1-ft", lora_path="lora_model" # Optional: load fine-tuned adapters ) # Generate speech with emotion tags prompts = [ "Hey there my name is Elise, <giggles> and I'm a speech generation model.", "I missed you <laugh> so much! It's been way too long.", "This is absolutely amazing <gasp> I can't believe it worked!" ] audio_files = tts.generate( prompts=prompts, output_dir="generated_audio", temperature=0.6, top_p=0.95, max_new_tokens=1200 ) print(f"Generated {len(audio_files)} audio files")

情感标签(富有表现力的语音)

Orpheus 支持特殊的情感/表达标签,用以生成更富表现力、更自然的语音:

支持的标签:

  • 笑声<laugh><giggles><chuckle>
  • 情绪<sigh><gasp>
  • 身体声响<yawn><cough><sniffle><groan>

用法:

prompts = [ "Hey there <giggles> welcome to my channel!", "I missed you <laugh> so much!", "That's so beautiful <sigh> it brings back memories.", "I'm so tired <yawn> after working all day.", "This is incredible <gasp> I can't believe my eyes!" ] audio_files = tts.generate(prompts=prompts)

工作原理:

  • 标签用尖括号包裹:<tag>
  • 训练时,模型学会把这些标签与音频模式关联起来
  • Elise 数据集中包含 336 处 "laughs"、156 处 "sighs" 等
  • 如果你的自定义数据集缺少这些标签,可以在音频中含相应表达的转写处手动标注

多说话人支持

对于多说话人模型,指定说话人名字:

tts.generate( prompts=["This is a test <laugh> with emotion."], voice="speaker_name" # Specify the speaker )

数据集格式

训练脚本要求数据集具有如下结构:

单说话人:

  • text:要朗读的文本
  • audio:音频文件,含 arraysampling_rate 字段

多说话人:

  • source:说话人标识
  • text:要朗读的文本
  • audio:音频文件,含 arraysampling_rate 字段

示例数据集:MrDragonFox/Elise

模型架构

音频分词(SNAC)

  • 采样率:24kHz
  • 多层分层编解码器(3 层)
  • 每帧 7 个 token(三层分别为 1 + 2 + 4)
  • 去除重复帧以提升效率

特殊 token

  • 人类开始:128259
  • 人类结束:128260
  • AI 开始:128261
  • AI 结束:128262
  • 语音开始:128257
  • 语音结束:128258
  • 填充 token:128263

输出

生成的音频文件以 WAV 格式保存到 generated_audio/ 目录:

  • 格式:WAV (PCM)
  • 采样率:24kHz
  • 命名:output_0.wavoutput_1.wav

显存占用

典型显存需求:

  • 训练:约 12-16GB 显存(配合 LoRA 与 4-bit 量化)
  • 推理:约 8-10GB 显存
  • CPU 内存:建议约 16GB

故障排查

常见问题

1. 数据集版本错误:

Ensure datasets>=3.4.1,<4.0.0 is installed pip install "datasets>=3.4.1,<4.0.0" --force-reinstall

2. CUDA 显存不足:

  • 推理时减小 max_new_tokens
  • 加载模型时使用 load_in_4bit=True
  • 减小 batch size 或开启梯度检查点

3. 多 GPU 问题:

  • 设置 CUDA_VISIBLE_DEVICES=0 仅使用一块 GPU
  • 在多 GPU 环境下 per_device_train_batch_size >1 可能报错

性能建议

  1. 更快的推理:在生成前使用 FastLanguageModel.for_inference(model)
  2. 内存优化:用 load_in_4bit=True 开启 4-bit 量化
  3. 更高质量:调节 temperature(0.4-0.8)与 top_p(0.9-0.95)参数
  4. 更长的音频:增大 max_new_tokens(约每 7 个 token 对应 1 个音频帧)

资源

许可证

本项目使用的模型与库遵循它们各自的许可证:

  • Unsloth:Apache 2.0
  • Transformers:Apache 2.0
  • Orpheus 模型:请查看 Hugging Face 上的模型卡片

引用

如果你在研究中使用了本代码,请引用:

@misc{orpheus-tts-unsloth, title={Orpheus TTS Fine-tuning with Unsloth}, author={Unsloth AI Team}, year={2024}, url={https://github.com/unslothai/unsloth} }

参与贡献

欢迎贡献!请随时提交 issue 或 pull request。

致谢

  • 感谢 Etherl 创建的原版 notebook
  • 感谢 Unsloth AI 团队提供高效的训练框架
  • 感谢 Hugging Face 托管模型与数据集

发布者: 作者: bojieli 转发
评论区 (0)
U