
Un servidor de inferencia de texto a voz simple y rápido para Fish Speech 1.5 y abajo, escrito en óxido puro.
Características:
torch.compile Nota
Sí, la compilación de la fuente no es divertida. Una imagen oficial de Docker, Homebrew, Linux Packaging y Python Intopop Layer están en la hoja de ruta.
Si desea que su plataforma sea compatible, no dude en plantear un problema y lo aceptaré.
Primero, clone este repositorio a la carpeta que desee:
git clone https://github.com/EndlessReform/fish-speech.rs.git
cd fish-speech.rs Guardar los puntos de control del habla de los peces ./checkpoints . Recomiendo 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.5Si está utilizando una versión de pescado más antigua:
jkeisling/fish-speech-1.4 : Los pesos oficiales no son compatibles.Ahora compilar desde la fuente. Para soporte de GPU de Silicon Apple:
cargo build --release --bin server --features metalPara nvidia:
cargo build --release --bin server --features cudaPara un rendimiento adicional en NVIDIA, puede habilitar la atención de flash. Sin embargo, si está compilando por primera vez o después de una actualización importante, esto puede llevar bastante tiempo: hasta 15 minutos y 16 GB de RAM en una CPU decente. ¡Te han advertido!
mkdir ~ /.candle
CANDLE_FLASH_ATTN_BUILD_DIR= $HOME /.candle cargo build --release --features flash-attn --bin server Esto compilará su binario a ./target/release/server .
¡Solo comienza el binario! Si está comenzando por primera vez, ejecute:
# Default voice to get you started
./target/release/server --voice-dir voices-templateOpciones:
--port : el valor predeterminado a 3000--checkpoint : Directorio para la carpeta de punto de control. El valor predeterminado a checkpoints/fish-speech-1.5 .--voice-dir : directorio para las indicaciones del altavoz. (Más sobre esto a continuación)--fish-version : 1.5 , 1.4 o 1.2 . El valor predeterminado a 1.5--temp : temperatura para la columna vertebral del modelo de lenguaje. Valor predeterminado: 0.7--top_p : muestreo de top-P para la columna vertebral del modelo de idioma. Predeterminado 0.8, para apagarlo a 1.Este servidor admite OGG Audio (transmisión) y la salida de audio WAV.
Puede usar cualquier cliente compatible con OpenAI. Aquí hay un ejemplo de solicitud de 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 una voz, necesitará un archivo WAV y una transcripción. Supongamos que desea agregar al altavoz alice , quien dice "hola mundo" en el archivo fake.wav .
Realice una solicitud de publicación al punto final /v1/audio/encoding , con:
id y prompt como parámetros de consulta codificados por URLEjemplo con curl:
curl -X POST " http://localhost:3000/v1/audio/encoding?id=alice&prompt=Hello%20world "
-F " [email protected] "
--output alice.npy Puede verificar que su voz se agregó al presionar el punto final de depuración /v1/voices :
curl http://localhost:3000/v1/voices
# Returns ['default', 'alice'] Esto devolverá un archivo .npy con su audio de entrada como tokens codificados. Después de esto, la voz alice se puede usar mientras el servidor se esté ejecutando y se eliminará al apagado.
Si desea guardar esta voz, puede usar el archivo .npy devuelto para agregarlo a las voces al inicio: ver a continuación.
Nota
Sí, esto apesta. Las voces codificadas persistentes al disco es una prioridad.
Abra el archivo voices-template/index.json . Debería verse algo así 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. "
}
}El directorio de Voices contiene:
default.npy ) Tome el archivo .npy que obtuvo de la codificación de tiempo de ejecución y cambie el nombre a su ID de altavoz: Ex. Si la ID es "Alice", entonces cambíe el nombre de alice.npy . Luego mueva alice.npy a su carpeta Voices. En index.json , agregue la clave:
{
"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 el servidor y su nueva voz debería estar bien.
Por ahora, mantenemos compatibilidad con los guiones oficiales de inferencia de discurso del habla de peces. (¡Próximamente en el servidor de inferencia y los pitones!)
# saves to fake.npy by default
cargo run --release --features metal --bin encoder -- -i ./tests/resources/sky.wavPara versiones anteriores, deberá especificar la versión y los puntos de control 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 pescado 1.5 (predeterminado):
# 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 versiones anteriores, tendrá que especificar la versión y el punto de control explícitamente. Por ejemplo, para peces 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 una velocidad adicional, compile con soporte de atención flash.
Advertencia
La dependencia de la atención de vela puede tomar más de 10 minutos para compilar incluso en una buena CPU, ¡y puede requerir más de 16 GB de memoria! Te han advertido.
Además, en octubre de 2024, el cuello de botella está en realidad en otro lugar (en copias de memoria ineficientes y envío de núcleo), por lo que en hardware ya rápido (como un RTX 4090) esto actualmente tiene 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 pescado 1.5 (predeterminado):
# Switch to --features cuda for Nvidia GPUs
cargo run --release --features metal --bin vocoder -- -i out.npy -o fake.wavPara modelos anteriores, especifique la versión. 1.2 Ejemplo:
cargo run --release --bin vocoder -- --fish-version 1.2 --checkpoint ./checkpoints/fish-speech-1.2-sftAdvertencia
Esta base de código tiene licencia bajo la licencia original de Apache 2.0. Siéntase libre de usar como desee. Sin embargo, los pesos del habla de pescado son CC-By-NC-SA-4.0 y solo para uso no comercial.
Apoye a los autores originales utilizando la API oficial para la producción.
Este modelo tiene licencia permisivamente bajo la licencia BY-CC-NC-SA-4.0. El código fuente se publica bajo la licencia Apache 2.0.
Gracias masivo también ir a:
candle_examples para fragmentos de código muy útiles en la base de códigoFish Speech V1.5 es un modelo líder de texto a voz (TTS) entrenado en más de 1 millón de horas de datos de audio en múltiples idiomas.
Idiomas compatibles:
Consulte el discurso de pescado Github para obtener más información. Demo disponible en Fish Audio.
Si encontró útil este repositorio, considere citar este trabajo:
@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 tiene licencia permisivamente bajo la licencia BY-CC-NC-SA-4.0.