MOSS-TTS 声音克隆微调:reference 条件训练从数据到推理完整流程
【免费下载链接】MOSS-TTSAn open-source model family for long-form speech, dialogue synthesis, voice design, sound effects, and real-time streaming TTS项目地址: https://gitcode.com/GitHub_Trending/mo/MOSS-TTS
MOSS-TTS 是一个开源语音与声音生成模型家族,以零样本声音克隆著称。本教程带你走通MOSS-TTS 声音克隆微调的完整链路:从准备带ref_audio参考音频的训练数据,到预处理编码、SFT 训练,再到用 reference 音频验证克隆效果,帮助新手快速微调出一个属于自己的专属声音模型。
🎙️ 先搞懂:什么是 reference 条件训练
零样本声音克隆是「临时给一段参考音频,模型即兴模仿」;而reference 条件训练(音色克隆微调)则是让模型在训练阶段就反复学习「参考音频 → 目标音频」的对应关系,从而把某个特定音色「刻进」模型里,生成时音色更稳、更像。
MOSS-TTS 家族覆盖了长音频、对话、声音设计、音效与实时流式等场景,其中MossTTSLocal(1.7B/4B)架构轻量、适合新手上手微调,本文就以它为主线:
💡 完整的架构细节可阅读 moss_tts_local/README.md,微调官方文档在 moss_tts_local/finetuning/README_zh.md。
📦 第一步:安装微调环境
先安装仓库并带上微调依赖(finetune额外组会引入 accelerate 等训练组件):
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[torch-runtime,finetune]"如果你打算用DeepSpeed ZeRO-3做参数分片,再额外安装.[torch-runtime,finetune-deepspeed]。
🗂️ 第二步:整理训练数据 —— 编写 reference 音频的 JSONL
微调数据是一个 JSONL 文件,每行一条样本。做声音克隆微调时,核心是audio(目标音频)+text(文本)+ref_audio(参考音频)三个字段的组合:
{"audio":"./data/utt0001.wav","text":"其实我真的有发现,我是一个特别善于观察别人情绪的人。","ref_audio":"./data/ref.wav","language":"zh"} {"audio":"./data/utt0002.wav","text":"She said she would be here by noon.","ref_audio":"./data/ref.wav","language":"en"}| 字段 | 必填 | 说明 |
|---|---|---|
audio | ✅ | 目标训练音频路径,会被编码为audio_codes |
text | ✅ | 目标音频对应的文本 |
ref_audio | 克隆微调必填 | 参考音频路径(reference 条件),prepare_data.py会默认把它一起预编码 |
language | 建议 | 语言标签,如zh/en |
reference | 可选 | 多说话人场景的参考音频列表(MOSS-TTSD 用),支持null |
instruction/ambient_sound/tokens | 可选 | 声音设计、音效等任务的扩展字段 |
📌 数据打包逻辑在 moss_tts_local/finetuning/dataset.py:每条样本都会打包成「参考音频 + 文本 → 目标音频」的 teacher-forcing 序列,只有目标音频部分计算 loss。
⚡ 第三步:数据预处理 —— 把参考音频预编码为 audio_codes
MOSS-TTS 的音频统一由MOSS-Audio-Tokenizer(基于因果 Transformer 的 RVQ 音频分词器)压成离散音频码。训练前用 moss_tts_local/finetuning/prepare_data.py 把目标音频和参考音频一次性编码好,训练时就不用再反复解码 wav:
单进程预处理最简命令:
python moss_tts_local/finetuning/prepare_data.py \ --model-path OpenMOSS-Team/MOSS-TTS-Local-Transformer \ --codec-path OpenMOSS-Team/MOSS-Audio-Tokenizer \ --device auto \ --input-jsonl train_raw.jsonl \ --output-jsonl train_with_codes.jsonl几个实用要点:
- 默认会连同
ref_audio/reference参考音频一起预编码,省去训练时的重复计算;只想编码目标音频可加--skip-reference-audio-codes。 - 数据量大时可以用
accelerate launch --num_processes 16按 rank 切分并行编码,每个 rank 输出一个 shard(如train_with_codes.rank00001-of-00016.jsonl),训练阶段直接读 glob 即可。
🚀 第四步:启动训练 —— 单卡到多卡一键切换
训练入口是 moss_tts_local/finetuning/sft.py,支持单卡、数据并行(DDP)以及 FSDP / ZeRO-3 参数分片。单卡基线命令:
accelerate launch moss_tts_local/finetuning/sft.py \ --model-path OpenMOSS-Team/MOSS-TTS-Local-Transformer \ --train-jsonl train_with_codes.jsonl \ --output-dir output/moss_tts_local_sft \ --per-device-batch-size 1 --gradient-accumulation-steps 8 \ --learning-rate 1e-5 --warmup-ratio 0.03 --num-epochs 3 \ --mixed-precision bf16 --channelwise-loss-weight 1,32 --gradient-checkpointing多卡训练直接换一份 accelerate 配置文件即可,三种常用档位:
| 档位 | 配置文件 | 适用场景 |
|---|---|---|
| DDP 数据并行 | configs/accelerate_ddp_8gpu.yaml | 单机 8 卡,1.7B 模型首选 |
| FSDP 参数分片 | configs/accelerate_fsdp_1.7b.yaml | 显存吃紧时的单机方案 |
| ZeRO-3 全分片 | configs/accelerate_zero3_1.7b.yaml | 更大模型 / 多机集群 |
新手建议优先记住的超参数:
--learning-rate:微调起步推荐1e-5(社区 LoRA 案例用的是2e-6,更小更稳)--channelwise-loss-weight:文本头与 RVQ 多头 loss 的加权,默认1,32--gradient-checkpointing:显存不足时打开
🔊 第五步:推理验证 —— 用 reference 音频测试克隆效果
sft.py保存的每个 checkpoint 目录都会附带模型配置、tokenizer 与 processor 元数据,可以直接对它from_pretrained,无需额外导出:
- 用
AutoProcessor.from_pretrained(checkpoint_dir, trust_remote_code=True)加载处理器; - 用
processor.build_user_message(text=..., reference=[参考音频])构造带 reference 条件的消息; - 调用
model.generate(...)生成,再用processor.decode取出音频保存为 wav。
对比微调前后的同一句合成音频,重点听三点:音色相似度、稳定性(多次生成是否漂移)、长文本是否跑偏。想体验交互式浏览器 Demo,可运行 clis/moss_tts_app.py。
🛠️ 懒人捷径:一键脚本与更多资源
不想拼参数?直接跑一键脚本(支持RAW_JSONL、OUTPUT_DIR、ACCELERATE_CONFIG_FILE等环境变量控制全流程):
bash moss_tts_local/finetuning/run_train.sh- 一键脚本:moss_tts_local/finetuning/run_train.sh,设置
SKIP_PREPARE=1可跳过预处理直接训练 - 8B 大模型(MossTTSDelay 架构,MOSS-TTS-v1.5)的微调流程同构,见 moss_tts_delay/finetuning/README_zh.md
- 实时语音助手模型微调见 moss_tts_realtime/finetuning/README_zh.md
- 社区实战案例:挪威语 LoRA 适配器(r=16,lr=2e-6,3 万步)的训练脚本与配置可参考 community/norwegian-lora/README.md
✅ 小结
MOSS-TTS 声音克隆微调的完整流程其实就四步:写带ref_audio的 JSONL →prepare_data.py预编码 →sft.py训练 → checkpoint 直接推理验证。数据质量(参考音频干净、文本对齐)比调参更能决定克隆效果,建议先用几十条高质量样本跑通单卡基线,再逐步扩展数据和卡数。🎧
【免费下载链接】MOSS-TTSAn open-source model family for long-form speech, dialogue synthesis, voice design, sound effects, and real-time streaming TTS项目地址: https://gitcode.com/GitHub_Trending/mo/MOSS-TTS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考