Mizuoto

训练

训练页:建立并预处理数据集,再用实验逐阶段运行各引擎自己的微调流程,查看损失曲线与试听,导出为音色权重或新模型。

训练 页用你自己的录音微调模型。它分两步:

  1. 数据集:同一个音色的若干片段及其文本。
  2. 实验:选一个起始模型和训练方式,在数据集上逐阶段运行该引擎自己的微调流程(由 Mizuoto 实现)。结果是音色的专属权重(加到音色库中的某个音色上)或一个新模型(出现在 模型 页)。

页面顶部的标签页在 实验 和 数据集 之间切换,右侧是 新建实验 或 新建数据集。

能训练什么

引擎训练方式结果设备
GPT-SoVITSFine-tune a voice音色的 GPT 与 SoVITS 权重GPU,CPU 可做小规模试验
F5-TTSFine-tune the model新模型GPU,CPU 可做小规模试验
Qwen3-TTS(Base 模型)Teach it a speaker新模型(以这个音色为预置说话人的 CustomVoice 模型)GPU,CPU 可做小规模试验
OmniVoiceFine-tune the model、Fine-tune with LoRA新模型GPU,CPU 可做小规模试验
VoxCPMFine-tune the model、Fine-tune with LoRA新模型(LoRA 的适配器与基础权重放在一起)GPU,CPU 可做小规模试验(VoxCPM2 全量微调约需 40 GB)
CosyVoice(300M、2、3)Fine-tune the language model、Fine-tune the LLM and the flow新模型GPU,CPU 可做小规模试验
Fish SpeechFine-tune with LoRA新模型(仍受 Fish Audio 研究许可约束)建议 24 GB 显存的 GPU

训练方式的名称和阶段名称来自引擎的说明文件,界面中显示为英文。

训练不需要 Mizuoto 和 torch 之外的任何东西:所有训练方式都在 Mizuoto 自己的 Python 中运行,每个阶段一个单独的进程。有的方式需要只在训练时用到的共享文件,例如 GPT-SoVITS 的预训练判别器(mizuoto asset download gptsovits/s2d-v2pro)。缺少什么时,新建实验对话框会把这种方式标为 不可用,并写明要运行的命令。

训练在本机进行

训练始终在本机运行,不会使用远程主机;引擎设为远程设备时,它的训练方式不可用。微调运行时会独占所用的设备。训练用哪个设备在 设置 › 训练 › 训练设备 中选择,默认使用 引擎所用设备。

数据集

新建数据集

  1. 在 数据集 标签页点 新建数据集。
  2. 填写 数据集名称、选择 语言,可选填写 描述。
  3. 点 创建,打开数据集页。

数据集保存在数据文件夹的 datasets/<名称>/ 中:dataset.json、每行一个片段的 manifest.jsonl,以及 audio/ 中的 FLAC 片段。

添加片段

数据集页的 添加片段 部分提供几种来源:

  • 音频文件或录音:拖放、选择文件、录音,或 服务器文件。可以在 说话人 中写明这些片段是谁说的(可选),然后点 添加(N)。
  • 某个音色的片段:选择音色库中的一个音色,点 添加,加入它的参考音频及文本。
  • 之前的结果:从合成结果中挑选。结果会带着它的许可标记加入;许可不允许用来训练其他引擎的结果(例如 Fish Speech 的结果),训练时会被拒绝。
  • 添加服务器文件夹(只在服务器本机的浏览器中出现):先选择 文件夹格式,再选择文件夹:
文件夹格式内容
自动识别按文件夹内容判断
音频文件(旁边可有同名 .lab 或 .txt)普通的音频文件
GPT-SoVITS .listGPT-SoVITS 的标注文件
LJSpeech(metadata.csv)LJSpeech 格式
CSV(audio_file|text)每行一个音频文件名和文本

预处理

在停顿处切分长录音,用语音识别补全缺失的文本,并统一音量。添加片段后运行。

设置默认作用
切分长片段开在静音处切分,同 GPT-SoVITS 的切分工具
转写开用语音识别为没有文本的片段生成文本(需要已安装语音识别)
统一音量开每个片段的峰值调到 -1 dBFS
最长片段(秒)12比它长的片段才会被切分
保留的最短片段(秒)1更短的片段被丢弃
静音阈值(dB)-34低于它算作静音
所说语言—转写时使用的语言

点 开始预处理,它作为一个任务运行,进度显示在下方。

检查报告

预处理后(或有片段时)显示 检查报告:

  • 可用片段:可用数/总数 · 时长;
  • 片段时长 的直方图;
  • 问题列表:过短、过长、缺少文本、削波,每一项旁的 查看 会只列出这些片段;
  • 其他提示,以及 片段的许可证。

编辑片段

片段 列表每页 50 条,可以搜索文本或按问题筛选。每条片段:

  • 播放按钮和时长;
  • 文本框(标签为说话人名,没有文本时提示 没有文本:请转写或手动输入),改完点保存按钮或按回车;
  • 用于训练 / 不用于训练:排除的片段保留在数据集中但不参与训练;
  • 删除按钮。

详情 中可以修改名称、语言和描述。页面底部有 删除(移到回收站;用它建立的实验将无法再运行)和 用它训练(以这个数据集新建实验)。

实验

新建实验

  1. 在 实验 标签页点 新建实验(或在数据集页点 用它训练)。
  2. 起始模型:只列出可以训练的已安装模型。没有时提示安装可训练的模型。
  3. 训练方式:这个模型可用的方式;不可用的带有 (不可用) 并写明原因(缺少共享文件、引擎不可用或在远程主机上等)。下方显示这种方式的说明、阶段、结果类型(生成音色专属权重 或 生成新模型)和所需的最少语音时长。
  4. 数据集;数据集中可用的语音时长不足时,创建会失败,并说明现有与所需的时长。
  5. 实验名称:默认是“数据集-模型”,只能用字母、数字、-、_ 和 .。
  6. 结果是音色权重时,还有 权重所属音色:选音色库中的一个音色,或 新建音色(用数据集中三段 3 到 10 秒的片段新建一个)。
  7. 主要设置(轮数、学习率等)可以在这里修改,更多设置(包括高级设置)在实验页面中。
  8. 点 创建。

实验保存在 experiments/<引擎>/<名称>/ 中。

阶段

实验页上方显示起始模型、数据集、结果类型和语言。阶段 部分是一排步骤,每个阶段的状态为 未运行、运行中、已完成、已过期 或 失败。

按钮作用
运行从第一个未完成(或已过期)的阶段运行到最后;全部完成后显示 已完成
运行此阶段只运行选中的阶段;它之前的阶段必须已完成
从头开始确认后从第一个阶段起重新运行所有阶段

点一个阶段查看它的说明、完成时间和结果;失败时显示错误。

一次运行是一个 训练 任务,它的步骤就是各个阶段,任务卡片显示在阶段下方。

已过期:每个完成的阶段都记录了它读取的内容——数据集、起始模型的版本和它用到的设置,以及之前阶段的结果。这些内容变化后,这个阶段及其后的阶段都标为 已过期(此阶段运行后,它读取的内容(数据集、模型或它用到的设置)已改变:请重新运行。)。重新运行某个阶段时,它之后已完成的阶段也会过期,因为它们读的是这个阶段的旧文件。

损失曲线

损失 部分在训练阶段运行时实时显示曲线;有多个训练阶段时可以切换,有多条曲线时可以用标签逐条开关。还没有数据时显示 训练阶段运行时,损失曲线显示在这里。

设置

设置 中是这种训练方式的超参数(数字输入框),高级 中是其余的。修改设置会使用到它的阶段及其后的阶段过期。 改完点 保存。

试听与导出

  • 试听:导出阶段会用训练结果朗读一段(设置 › 训练 › 训练后合成试听 打开时),结果列在这里。
  • 已导出:导出的 音色(可以 打开 或 在合成中使用)或 模型(点 模型 跳到模型页)。导出的权重会加到所选音色上;导出的新模型以 引擎/名称 出现在模型列表中。

页面底部的 删除 把实验及其工作文件移到回收站,已导出的内容保留。

CPU 与 GPU

  • 微调实际上需要 GPU。按 内存 设置,各微调在其配方默认批大小下能运行的最小显卡如下(峰值在 RTX 3090 上测得,加上估算的余量:多一成再加 512 MB):
微调标准低最低
CosyVoice 2 / 3, llm (2 的 llm_flow 相同)12 GB12 GB12 GB
F5-TTS full12 GB12 GB8 GB
Fish Speech S2 Pro LoRA, 批大小 1 / 216 GB / 24 GB16 GB / 24 GB16 GB / 24 GB
GPT-SoVITS speaker (批大小 4)6 GB6 GB6 GB
OmniVoice full16 GB16 GB6 GB
OmniVoice LoRA12 GB4 GB4 GB
Qwen3-TTS 1.7B speaker24 GB24 GB12 GB
VoxCPM 0.5B full24 GB16 GB16 GB
VoxCPM 0.5B / 1.5 / 2 LoRA (批大小 16)12 GB / 12 GB / 24 GB4 GB / 6 GB / 12 GB4 GB / 6 GB / 12 GB
  • 所有引擎也都能在 CPU 上训练,适合用很少的数据和步数确认流程能走通。
  • 设置 › 训练 中还有 训练精度、每次运行保留的检查点数 和 内存:标准 按各配方训练;低 加上梯度检查点(反向传播时重新运行模型的每个块,而不保留其激活值),并把用不到的部分移出 GPU,结果相同,每步慢几个百分点到一倍(在 RTX 3090 上测得:F5-TTS +6 %、VoxCPM +51 %、Qwen3-TTS +80 %、OmniVoice +104 %);最低 还把优化器状态放在内存中,并从内存流式加载 LoRA 的冻结权重,结果略有不同。方法自己的 gradient_checkpointing 超参数优先。
  • 在 GPU 上精确复现微调(training.deterministic,默认关闭):在 GPU 上,同一个实验运行两次得到的权重略有不同,因为用原子操作求和的内核(许多反向传播中都有,还有 SDPA 融合注意力的反向传播)每次相加的顺序不同。GPT-SoVITS 的损失在几步之后就会分开;Fish Speech 的 LoRA 在最后几位上不同。开启后,每个阶段都使用 torch 的确定性内核,并且除非 注意力 指定了某个后端,否则使用 math 注意力内核:两次运行完全相同(两者都在 RTX 3090 上验证过)。代价是一些时间(测试用的微调,预热后:GPT-SoVITS 30.6 → 34.7 s,Fish Speech 41.1 → 43.0 s),以及长序列上 math 内核所需的显存。在 CPU 上,微调总能复现。
  • 为新实验选择方法时,对话框会显示每种内存设置下一次运行大约需要多少显存;估计超过 GPU 空闲显存的运行会在日志中说明,并给出放得下的设置;没有设置能解决时,给出更小的 batch_size(Fish Speech 的 LoRA 在默认批量 4 下需要超过 24 GB 显存;3 可以放下)。在 GPU 上,每个记录的步骤还会报告 memory/peak_mb,即实际用量。

命令行

mizuoto dataset create Narrator --lang zh
mizuoto dataset add narrator recordings/          # 与音频同名的 .lab 或 .txt 即其文本
mizuoto dataset import narrator ljspeech/ --layout ljspeech
mizuoto dataset prepare narrator                  # 切分、转写、统一音量
mizuoto dataset check narrator
mizuoto asset download gptsovits/s2d-v2pro        # v2Pro 的预训练判别器
mizuoto train methods gptsovits/v2pro-base        # 可用的训练方式及其设置
mizuoto train new narrator --base gptsovits/v2pro-base --dataset narrator --hp sovits_epochs=8
mizuoto train run narrator                        # 从第一个未完成的阶段继续
mizuoto train run narrator --stage <阶段id>       # 只运行某个阶段
mizuoto train metrics narrator

本页目录