
Um servidor de inferência de texto em fala simples e rápido para a fala de peixes 1.5 e abaixo, escrita em ferrugem pura.
Características:
torch.compile Observação
Sim, a compilação da fonte não é divertida. Uma imagem oficial do Docker, homebrew, linux embalagens e camada de interoper Python estão no roteiro.
Se você quiser sua plataforma suportada, sinta -se à vontade para levantar um problema e eu continuarei!
Primeiro, clone este repositório para a pasta que você deseja:
git clone https://github.com/EndlessReform/fish-speech.rs.git
cd fish-speech.rs Salve os pontos de verificação de fala do peixe em ./checkpoints . Eu recomendo usar huggingface-cli :
# If it's not already on system
brew install huggingface-cli
# For Windows or Linux (assumes working Python):
# pip install -U "huggingface_hub[cli]"
# or just skip this and download the folder manually
mkdir -p checkpoints/fish-speech-1.5
# NOTE: the official weights are not compatible
huggingface-cli download jkeisling/fish-speech-1.5 --local-dir checkpoints/fish-speech-1.5Se você estiver usando uma versão mais antiga de peixe:
jkeisling/fish-speech-1.4 : Os pesos oficiais não são compatíveis.Agora compilar da fonte. Para o suporte da Apple Silicon GPU:
cargo build --release --bin server --features metalPara Nvidia:
cargo build --release --bin server --features cudaPara um desempenho extra na NVIDIA, você pode ativar a atenção do flash. Se você estiver compilando pela primeira vez ou após uma grande atualização, isso pode demorar um pouco: até 15 minutos e 16 GB de RAM em uma CPU decente. Você foi avisado!
mkdir ~ /.candle
CANDLE_FLASH_ATTN_BUILD_DIR= $HOME /.candle cargo build --release --features flash-attn --bin server Isso compilará seu binário para ./target/release/server .
Basta começar o binário! Se você está começando pela primeira vez, corra:
# Default voice to get you started
./target/release/server --voice-dir voices-templateOpções:
--port : padrão para 3000--checkpoint : Diretório para pasta do ponto de verificação. Padrões para checkpoints/fish-speech-1.5 .--voice-dir : Diretório para avisos de alto-falante. (mais sobre isso abaixo)--fish-version : 1.5 , 1.4 ou 1.2 . Padrões para 1,5--temp : Temperatura para o backbone do modelo de idioma. Padrão: 0.7--top_p : amostragem Top-P para backbone do modelo de idioma. Padrão 0.8, para desligar, defina -o para 1.Este servidor suporta o OGG Audio (Streaming) e a saída de áudio WAV.
Você pode usar qualquer cliente compatível com o OpenAI. Aqui está um exemplo de solicitação Python:
from openai import OpenAI
client = OpenAI (
base_url = "http://localhost:3000/v1"
)
audio = client . audio . speech . create (
input = "Hello world!" ,
voice = "default" ,
response_format = "wav" ,
model = "tts-1" ,
)
temp_file = "temp.wav"
audio . stream_to_file ( temp_file ) Para clonar uma voz, você precisará de um arquivo WAV e uma transcrição. Suponha que você queira adicionar o orador alice , que diz "Hello World" no arquivo fake.wav .
Faça uma solicitação de postagem para o terminal /v1/audio/encoding , com:
id e prompt como parâmetros de consulta codificados por URLExemplo com Curl:
curl -X POST " http://localhost:3000/v1/audio/encoding?id=alice&prompt=Hello%20world "
-F " [email protected] "
--output alice.npy Você pode verificar se sua voz foi adicionada atingindo o ponto final do /v1/voices Debug:
curl http://localhost:3000/v1/voices
# Returns ['default', 'alice'] Isso retornará um arquivo .npy com seu áudio de entrada como tokens codificados. Depois disso, a voz alice será utilizável enquanto o servidor estiver em execução e será excluído no desligamento.
Se você deseja salvar essa voz, pode usar o arquivo .npy retornado para adicioná -la às vozes na inicialização: veja abaixo.
Observação
Sim, isso é uma merda. Vozes codificadas persistentes para o disco é uma prioridade.
Abra o arquivo voices-template/index.json . Deve parecer algo como:
{
"speakers" : {
"default" : " When I heard the release demo, I was shocked, angered, and in disbelief that Mr. Altman would pursue a voice that sounded so eerily similar to mine that my closest friends and news outlets could not tell the difference. "
}
}O diretório Voices contém:
default.npy ) Pegue o arquivo .npy que você obteve da codificação de tempo de execução e renomeie -o para o seu ID do alto -falante: Ex. Se o ID for "Alice", renomeie -o para alice.npy . Em seguida, mova alice.npy para a pasta Voices. Em index.json , adicione a chave:
{
"speakers" : {
"default" : " When I heard the release demo, I was shocked, angered, and in disbelief that Mr. Altman would pursue a voice that sounded so eerily similar to mine that my closest friends and news outlets could not tell the difference. "
"alice" : " I–I hardly know, sir, just at present–at least I know who I WAS when I got up this morning, but I think I must have been changed several times since then. "
}
}Reinicie o servidor e sua nova voz deve ser boa.
Por enquanto, estamos mantendo a compatibilidade com os scripts oficiais da CLI de inferência de fala de peixes. (Inferência Servidor e Python Bindings em breve!)
# saves to fake.npy by default
cargo run --release --features metal --bin encoder -- -i ./tests/resources/sky.wavPara versões anteriores, você precisará especificar os pontos de verificação da versão e da verificação manualmente:
cargo run --release --bin encoder -- --input ./tests/resources/sky.wav --output-path fake.npy --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftPara peixe 1.5 (padrão):
# Switch to --features cuda for Nvidia GPUs
cargo run --release --features metal --bin llama_generate --
--text " That is not dead which can eternal lie, and with strange aeons even death may die. "
--prompt-text " When I heard the release demo, I was shocked, angered, and in disbelief that Mr. Altman would pursue a voice that sounded so eerily similar to mine that my closest friends and news outlets could not tell the difference. "
--prompt-tokens fake.npyPara versões anteriores, você precisará especificar a versão e o ponto de verificação explicitamente. Por exemplo, para peixes 1.2:
cargo run --release --features metal --bin llama_generate -- --text " That is not dead which can eternal lie, and with strange aeons even death may die. " --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftPara velocidade adicional, compila com o suporte de atenção flash.
Aviso
A dependência de atendimento de flash-flash pode levar mais de 10 minutos para compilar, mesmo em uma boa CPU, e pode exigir mais de 16 GB de memória! Você foi avisado.
Além disso, de outubro de 2024, o gargalo está na verdade em outros lugares (em cópias ineficientes de memória e despacho de kernel); portanto, em hardware já rápido (como um RTX 4090), isso atualmente tem menos impacto.
# Cache the Flash Attention build
# Leave your computer, have a cup of tea, go touch grass, etc.
mkdir ~ /.candle
CANDLE_FLASH_ATTN_BUILD_DIR= $HOME /.candle cargo build --release --features flash-attn --bin llama_generate
# Then run with flash-attn flag
cargo run --release --features flash-attn --bin llama_generate --
--text " That is not dead which can eternal lie, and with strange aeons even death may die. "
--prompt-text " When I heard the release demo, I was shocked, angered, and in disbelief that Mr. Altman would pursue a voice that sounded so eerily similar to mine that my closest friends and news outlets could not tell the difference. "
--prompt-tokens fake.npyPara peixe 1.5 (padrão):
# Switch to --features cuda for Nvidia GPUs
cargo run --release --features metal --bin vocoder -- -i out.npy -o fake.wavPara modelos anteriores, especifique a versão. 1.2 Exemplo:
cargo run --release --bin vocoder -- --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftAviso
Esta base de código está licenciada sob a licença original do Apache 2.0. Sinta -se à vontade para usar como quiser. No entanto, os pesos da fala de peixes são CC-BY-NC-SA-4.0 e apenas para uso não comercial!
Apoie os autores originais usando a API oficial para produção.
Este modelo é licenciado permissivamente sob a licença BY-CC-NC-SA-4.0. O código -fonte é liberado sob licença Apache 2.0.
Agradecimentos enormes também vão para:
candle_examples para trechos de código altamente úteis em toda a base de códigoA fala de peixe v1.5 é um modelo líder de texto para fala (TTS) treinado em mais de 1 milhão de horas de dados de áudio em vários idiomas.
Idiomas suportados:
Por favor, consulte o Fish Speech Github para obter mais informações. Demo disponível no Fish Audio.
Se você achou esse repositório útil, considere citar este trabalho:
@misc{fish-speech-v1.4,
title={Fish-Speech: Leveraging Large Language Models for Advanced Multilingual Text-to-Speech Synthesis},
author={Shijia Liao and Yuxuan Wang and Tianyu Li and Yifan Cheng and Ruoyi Zhang and Rongzhi Zhou and Yijin Xing},
year={2024},
eprint={2411.01156},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2411.01156},
}
Este modelo é licenciado permissivamente sob a licença BY-CC-NC-SA-4.0.