Ajuste Fino (Fine-tuning)
Obviamente, ao abrir esta página, você não estava satisfeito com o desempenho do modelo pré-treinado em modo zero-shot. Você deseja fazer um ajuste fino em um modelo para melhorar seu desempenho em seu conjunto de dados.
Na versão atual, você só precisa fazer o ajuste fino da parte 'LLAMA'.
Ajuste Fino do LLAMA
1. Prepare o conjunto de dados
.
├── 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
Você precisa converter seu conjunto de dados para o formato acima e colocá-lo no diretório data. O arquivo de áudio pode ter as extensões .mp3, .wav ou .flac, e o arquivo de anotação deve ter a extensão .lab.
Info
O arquivo de anotação .lab precisa conter apenas a transcrição do áudio, sem necessidade de formatação especial. Por exemplo, se hi.mp3 contiver "Olá, adeus.", então o arquivo hi.lab conterá uma única linha de texto: "Olá, adeus.".
Warning
Recomenda-se aplicar a normalização de volume (loudness) ao conjunto de dados. Você pode usar o fish-audio-preprocess para fazer isso.
2. Extração em lote de tokens semânticos
Certifique-se de que você baixou os pesos do VQGAN. Se não, execute o seguinte comando:
Em seguida, você pode executar o seguinte comando para extrair os tokens semânticos:
python tools/vqgan/extract_vq.py data \
--num-workers 1 --batch-size 16 \
--config-name "modded_dac_vq" \
--checkpoint-path "checkpoints/openaudio-s1-mini/codec.pth"
Note
Você pode ajustar --num-workers e --batch-size para aumentar a velocidade de extração, mas certifique-se de não exceder o limite de memória da sua GPU.
Este comando criará arquivos .npy no diretório data, como mostrado abaixo:
.
├── 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. Empacote o conjunto de dados em protobuf
python tools/llama/build_dataset.py \
--input "data" \
--output "data/protos" \
--text-extension .lab \
--num-workers 16
Após a conclusão da execução do comando, você deverá ver o arquivo protos no diretório data.
4. Finalmente, ajuste fino com LoRA
Da mesma forma, certifique-se de que você baixou os pesos do LLAMA. Se não, execute o seguinte comando:
Finalmente, você pode iniciar o ajuste fino executando o seguinte comando:
python fish_speech/train.py --config-name text2semantic_finetune \
project=$project \
+lora@model.model.lora_config=r_8_alpha_16
Note
Você pode modificar os parâmetros de treinamento, como batch_size, gradient_accumulation_steps, etc., para se adequar à memória da sua GPU, modificando fish_speech/configs/text2semantic_finetune.yaml.
Note
Para usuários do Windows, você pode usar trainer.strategy.process_group_backend=gloo para evitar problemas com nccl.
Após o treinamento ser concluído, você pode consultar a seção de inferência para testar seu modelo.
Info
Por padrão, o modelo aprenderá apenas os padrões de fala do locutor e não o timbre. Você ainda precisará usar prompts para garantir a estabilidade do timbre. Se você quiser aprender o timbre, pode aumentar o número de passos de treinamento, mas isso pode levar a um sobreajuste (overfitting).
Após o treinamento, você precisa converter os pesos do LoRA para pesos regulares antes de realizar a inferência.
bash
python tools/llama/merge_lora.py \
--lora-config r_8_alpha_16 \
--base-weight checkpoints/openaudio-s1-mini \
--lora-weight results/$project/checkpoints/step_000000010.ckpt \
--output checkpoints/openaudio-s1-mini-yth-lora/
Note
Você também pode tentar outros checkpoints. Sugerimos usar o checkpoint mais antigo que atenda aos seus requisitos, pois eles geralmente têm um desempenho melhor em dados fora de distribuição (OOD).