Relatório de unsloth parte 2 + Fish Speech
| Texto | Áudio |
|---|---|
| “Isso daqui é um texto de teste para ver se consegue gerar bem o texto.” | |
| “Oi! Tudo bem com você? Espero que seu dia esteja sendo incrível!” | |
| “Eu tava pensando em pedir um café agora, quer um também?” | |
| “Ah… eu não acredito que isso deu certo! Finalmente, depois de tanto teste!” | |
| “Update the audio driver and restart the system after installation.” | |
| “Um panorama sereno que acalmava a alma de quem contemplava a paisagem, era um céu estrelado refletido na água calma do lago” |
Modelo em PT-PT. Procurando por finetuning para ptbr:
https://github.com/fishaudio/fish-speech/issues/549
https://speech.fish.audio/finetune/
https://github.com/fishaudio/fish-speech
https://github.com/fishaudio/fish-speech/discussions/856
https://github.com/fishaudio/fish-speech/discussions/786
https://github.com/fishaudio/fish-speech/discussions/577
Com referencia
| Texto | Áudio |
|---|---|
| “O céu estrelado refletia na água calma do lago, criando um panorama sereno que acalmava a alma de quem contemplava a paisagem.” | |
| “Eu me pergunto se isso realmente é uma forma de mudar o pensamento de alguém.” | |
| “você contemplava a paisagem?” | |
| “Um panorama sereno que acalmava a alma de quem contemplava a paisagem, era um céu estrelado refletido na água calma do lago” | |
| “Uma criança curiosa tocava as pétalas macias das rosas no jardim, enquanto pássaros cantavam alegremente ao amanhecer em perfeita harmonia.” |
Referencia:
Unsloth
Relatório — Fine-tuning TTS pt-BR com Unsloth/Orpheus
Objetivo
Realizar ajuste fino (LoRA) de um modelo TTS para pt-BR usando Unsloth/Orpheus-3B e um corpus próprio (áudio + texto), visando síntese de voz.
O que foi feito
- Dataset
- CSV no formato
audio|text→ convertidos paradata/train.jsonl(3.015 exemplos) edata/val.jsonl(335 exemplos).
- CSV no formato
- Ambiente
- Miniconda no Windows; instalação de
transformers,datasets,peft, etc.
- Miniconda no Windows; instalação de
- Modelo
- Correção do identificador para
unsloth/orpheus-3b-0.1-ft(arquitetura CausalLM).
- Correção do identificador para
- Smoke test (CPU)
- Treino LoRA texto→texto para validar pipeline (dataloader, forward, salvamento).
- Modelo salvo em
outputs/unsloth-tts-ptbr-cpu.
- Tokens de áudio (SNAC 24 kHz)
- Script
make_audio_ids_snac.pypara geraraudio_idsa partir dos WAVs →data/train_snac.jsonledata/val_snac.jsonl.
- Script
- Treino TTS “real”
- Collator que concatena prefixo de texto + tokens de áudio, com máscara de loss no prefixo.
- Mapeamento SNAC →
<custom_token_*>conforme regracode + 10 + ((i % 7) * 4096).
Problemas encontrados e soluções
- Repositório HF incorreto (404/401)
— Ajuste paraunsloth/orpheus-3b-0.1-ft. - Cabeçalho do modelo incompatível (Seq2Seq vs CausalLM)
— Troca paraAutoModelForCausalLM. - Parâmetros de treino incompatíveis (
evaluation_strategy)
— Remoção/ajuste; uso deremove_unused_columns=False. - Erro “No columns match forward”
— Collator custom fornecendoinput_ids/attention_mask/labels. - Dependências de áudio no Windows (
torchcodec/FFmpeg)
— Leitura com SoundFile/Librosa; tokens via SNAC (dispensatorchcodec). - Conflitos Triton /
torch.compile/bitsandbytes/torchao(GPU/Windows)
— Desinstalação debitsandbytes/torchao, desativação do Inductor; priorização de CPU ou GPU em Linux/Colab. - Desalinhamento texto × áudio (tamanhos diferentes)
— Construção de sequência únicatexto + áudio; labels-100no prefixo.
Resultados
- Smoke test (CPU)
- ~50 steps, loss ≈ 7,07.
- Artefatos salvos em
outputs/unsloth-tts-ptbr-cpu.
- Pré-processamento SNAC
audio_idsgerados;data/train_snac.jsonledata/val_snac.jsonlprontos.
- Treino TTS
- Pipeline final (mapeamento + collator) montado e pronto para execução completa.
Próximos passos
- Verificar se todos os exemplos têm
audio_idsnos*_snac.jsonl. - Rodar treino TTS completo (validar em CPU; preferir GPU em Linux/Colab para performance).
- Implementar inferência completa:
generate()→<custom_token_*>→ SNAC.decode → WAV. - Em paralelo, avaliar FishSpeech 1.5/CSM-1B no Colab com o mesmo corpus.
Scripts principais
csv2jsonl.py— CSVaudio|text→train.jsonl/val.jsonltrain_unsloth_tts.py— Smoke test (CPU, texto→texto)make_audio_ids_snac.py— WAV →audio_ids(SNAC 24 kHz)train_unsloth_tts_with_audio_ids.py— treino TTS (prefixo + áudio, máscara no prefixo)
Datasets ptbr:
https://danielbrito.me/datasets-de-tts-em-portugues/