
Un serveur d'inférence simple et rapide de texte-parole pour la parole de poisson 1.5 et ci-dessous, écrit en rouille pure.
Caractéristiques:
torch.compile Note
Oui, la compilation de Source n'est pas amusante. Une image Docker officielle, un homebrew, un emballage Linux et une couche d'interopération Python sont sur la feuille de route.
Si vous souhaitez que votre plate-forme soit prise en charge, n'hésitez pas à soulever un problème et j'y reviendrai!
Tout d'abord, clonez ce dépôt au dossier que vous voulez:
git clone https://github.com/EndlessReform/fish-speech.rs.git
cd fish-speech.rs Enregistrez les points de contrôle de la parole de poisson sur ./checkpoints . Je recommande d'utiliser 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.5Si vous utilisez une ancienne version de poisson:
jkeisling/fish-speech-1.4 : Les poids officiels ne sont pas compatibles.Maintenant, compilez à partir de la source. Pour le support GPU d'Apple Silicon:
cargo build --release --bin server --features metalPour nvidia:
cargo build --release --bin server --features cudaPour des performances supplémentaires sur Nvidia, vous pouvez permettre l'attention du flash. Si vous compilez pour la première fois ou après une mise à jour majeure, cela peut prendre un certain temps: jusqu'à 15 minutes et 16 Go de RAM sur un processeur décent. Vous avez été averti!
mkdir ~ /.candle
CANDLE_FLASH_ATTN_BUILD_DIR= $HOME /.candle cargo build --release --features flash-attn --bin server Cela compilera votre binaire sur ./target/release/server .
Commencez simplement le binaire! Si vous commencez pour la première fois, courez:
# Default voice to get you started
./target/release/server --voice-dir voices-templateOptions:
--port : par défaut est 3000--checkpoint : répertoire du dossier de point de contrôle. Les défauts des checkpoints/fish-speech-1.5 .--voice-dir : répertoire pour les invites de haut-parleur. (plus à ce sujet ci-dessous)--fish-version : 1.5 , 1.4 ou 1.2 . Par défaut est 1,5--temp : température pour le squelette du modèle de langue. Par défaut: 0,7--top_p : Échantillonnage TOP-P pour le squelette du modèle de langue. Par défaut 0,8, pour désactiver le définir 1.Ce serveur prend en charge Ogg Audio (streaming) et WAV Audio Sortie.
Vous pouvez utiliser n'importe quel client compatible OpenAI. Voici un exemple de demande 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 ) Pour cloner une voix, vous aurez besoin d'un fichier WAV et d'une transcription. Supposons que vous souhaitiez ajouter la conférencière alice , qui dit "Hello World" dans File fake.wav .
Faites une demande de poste au point de terminaison /v1/audio/encoding , avec:
id et prompt en tant que paramètres de requête codés par URLExemple avec Curl:
curl -X POST " http://localhost:3000/v1/audio/encoding?id=alice&prompt=Hello%20world "
-F " [email protected] "
--output alice.npy Vous pouvez vérifier que votre voix a été ajoutée en frappant le point de terminaison de débogage /v1/voices :
curl http://localhost:3000/v1/voices
# Returns ['default', 'alice'] Cela renverra un fichier .npy avec votre audio d'entrée en tant que jetons codés. Après cela, la voix alice sera utilisable tant que le serveur s'exécute et sera supprimé à l'arrêt.
Si vous souhaitez enregistrer cette voix, vous pouvez utiliser le fichier .npy renvoyé pour l'ajouter aux voix au démarrage: voir ci-dessous.
Note
Oui, ça craint. Les voix codées persistantes sur le disque sont une priorité absolue.
Ouvrez le fichier voices-template/index.json . Cela devrait ressembler à quelque chose:
{
"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. "
}
}Le répertoire des voix contient:
default.npy ) Prenez le fichier .npy que vous avez obtenu du codage d'exécution et renommez-le à votre ID de haut-parleur: Ex. Si l'ID est "Alice", renommez-le à alice.npy . Déplacez ensuite alice.npy vers votre dossier Voices. Dans index.json , ajoutez la clé:
{
"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. "
}
}Redémarrez le serveur et votre nouvelle voix devrait être bonne à partir.
Pour l'instant, nous gardons la compatibilité avec les scripts officiels de CLI d'inférence du discours de poisson. (Inférence Server et Python Bindings à venir!)
# saves to fake.npy by default
cargo run --release --features metal --bin encoder -- -i ./tests/resources/sky.wavPour les versions antérieures, vous devrez spécifier manuellement la version et les points de contrôle:
cargo run --release --bin encoder -- --input ./tests/resources/sky.wav --output-path fake.npy --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftPour le poisson 1.5 (par défaut):
# 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.npyPour les versions antérieures, vous devrez spécifier explicitement la version et le point de contrôle. Par exemple, pour le poisson 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-sftPour une vitesse supplémentaire, compilez avec support d'attention Flash.
Avertissement
La dépendance aux bougies-flash-newing peut prendre plus de 10 minutes à compiler même sur un bon processeur et peut nécessiter plus de 16 Go de mémoire! Vous avez été averti.
En outre, en octobre 2024, le goulot d'étranglement est en fait ailleurs (dans des copies de mémoire inefficaces et une répartition du noyau), donc sur le matériel déjà rapide (comme un RTX 4090), cela a actuellement moins d'impact.
# 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.npyPour le poisson 1.5 (par défaut):
# Switch to --features cuda for Nvidia GPUs
cargo run --release --features metal --bin vocoder -- -i out.npy -o fake.wavPour les modèles antérieurs, veuillez spécifier la version. 1.2 Exemple:
cargo run --release --bin vocoder -- --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftAvertissement
Cette base de code est sous licence sous la licence APACHE 2.0 d'origine. N'hésitez pas à l'utiliser comme vous le souhaitez. Cependant, les poids de la parole de poisson sont CC-by-NC-SA-4.0 et pour une utilisation non commerciale uniquement!
Veuillez soutenir les auteurs originaux en utilisant l'API officielle pour la production.
Ce modèle est autorisé par la licence BY-CC-NC-SA-4.0. Le code source est publié sous la licence Apache 2.0.
Un merci aussi à:
candle_examples pour des extraits de code très utiles à travers la base de codeFish Speech V1.5 est l'un des principaux modèles de texte vocale (TTS) formés sur plus d'un million d'heures de données audio en plusieurs langues.
Langages pris en charge:
Veuillez vous référer à Fish Speech Github pour plus d'informations. Demo disponible chez Fish Audio.
Si vous avez trouvé ce référentiel utile, veuillez envisager de citer ce travail:
@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},
}
Ce modèle est autorisé par la licence BY-CC-NC-SA-4.0.