跳转至

微调

显然, 当你打开这个页面的时候, 你已经对预训练模型 zero-shot 的效果不算满意. 你想要微调一个模型, 使得它在你的数据集上表现更好.

在目前版本,你只需要微调'LLAMA'部分即可.

LLAMA 微调

1. 准备数据集

.
├── SPK1
│   ├── 21.15-26.44.lab
│   ├── 21.15-26.44.mp3
│   ├── 27.51-29.98.lab
│   ├── 27.51-29.98.mp3
│   ├── 30.1-32.71.lab
│   └── 30.1-32.71.mp3
└── SPK2
    ├── 38.79-40.85.lab
    └── 38.79-40.85.mp3

你需要将数据集转为以上格式, 并放到 data 下, 音频后缀可以为 .mp3, .wav.flac, 标注文件后缀建议为 .lab.

Warning

建议先对数据集进行响度匹配, 你可以使用 fish-audio-preprocess 来完成这一步骤.

fap loudness-norm data-raw data --clean

2. 批量提取语义 token

确保你已经下载了 vqgan 权重, 如果没有, 请运行以下命令:

huggingface-cli download fishaudio/fish-speech-1.2-sft --local-dir checkpoints/fish-speech-1.2-sft

对于中国大陆用户, 可使用 mirror 下载.

HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2-sft --local-dir checkpoints/fish-speech-1.2-sft

随后可运行以下命令来提取语义 token:

python tools/vqgan/extract_vq.py data \
    --num-workers 1 --batch-size 16 \
    --config-name "firefly_gan_vq" \
    --checkpoint-path "checkpoints/fish-speech-1.2-sft/firefly-gan-vq-fsq-4x1024-42hz-generator.pth"

Note

你可以调整 --num-workers--batch-size 来提高提取速度, 但是请注意不要超过你的显存限制.

该命令会在 data 目录下创建 .npy 文件, 如下所示:

.
├── SPK1
│   ├── 21.15-26.44.lab
│   ├── 21.15-26.44.mp3
│   ├── 21.15-26.44.npy
│   ├── 27.51-29.98.lab
│   ├── 27.51-29.98.mp3
│   ├── 27.51-29.98.npy
│   ├── 30.1-32.71.lab
│   ├── 30.1-32.71.mp3
│   └── 30.1-32.71.npy
└── SPK2
    ├── 38.79-40.85.lab
    ├── 38.79-40.85.mp3
    └── 38.79-40.85.npy

3. 打包数据集为 protobuf

python tools/llama/build_dataset.py \
    --input "data" \
    --output "data/protos" \
    --text-extension .lab \
    --num-workers 16

命令执行完毕后, 你应该能在 data 目录下看到 protos 文件.

4. 最后, 使用 LoRA 进行微调

同样的, 请确保你已经下载了 LLAMA 权重, 如果没有, 请运行以下命令:

huggingface-cli download fishaudio/fish-speech-1.2-sft --local-dir checkpoints/fish-speech-1.2-sft

对于中国大陆用户, 可使用 mirror 下载.

HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2-sft --local-dir checkpoints/fish-speech-1.2-sft

最后, 你可以运行以下命令来启动微调:

python fish_speech/train.py --config-name text2semantic_finetune \
    project=$project \
    +lora@model.model.lora_config=r_8_alpha_16

Note

你可以通过修改 fish_speech/configs/text2semantic_finetune.yaml 来修改训练参数如 batch_size, gradient_accumulation_steps 等, 来适应你的显存.

Note

对于 Windows 用户, 你可以使用 trainer.strategy.process_group_backend=gloo 来避免 nccl 的问题.

训练结束后, 你可以参考 推理 部分, 并携带 --speaker SPK1 参数来测试你的模型.

Info

默认配置下, 基本只会学到说话人的发音方式, 而不包含音色, 你依然需要使用 prompt 来保证音色的稳定性.
如果你想要学到音色, 请将训练步数调大, 但这有可能会导致过拟合.

训练完成后, 你需要先将 loRA 的权重转为普通权重, 然后再进行推理.

python tools/llama/merge_lora.py \
    --lora-config r_8_alpha_16 \
    --base-weight checkpoints/fish-speech-1.2-sft \
    --lora-weight results/$project/checkpoints/step_000000010.ckpt \
    --output checkpoints/fish-speech-1.2-sft-yth-lora/

Note

你也可以尝试其他的 checkpoint, 我们建议你使用最早的满足你要求的 checkpoint, 他们通常在 OOD 上表现更好.