Spaces:
Running
์ถ๋ก
์ถ๋ก ์ ๋ช ๋ น์ค, HTTP API, ๊ทธ๋ฆฌ๊ณ ์น UI์์ ์ง์๋ฉ๋๋ค.
!!! note ์ ์ฒด ์ถ๋ก ๊ณผ์ ์ ๋ค์์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
1. VQGAN์ ์ฌ์ฉํ์ฌ ์ฝ 10์ด ๋ถ๋์ ์์ฑ์ ์ธ์ฝ๋ฉํฉ๋๋ค.
2. ์ธ์ฝ๋ฉ๋ ์๋งจํฑ ํ ํฐ๊ณผ ํด๋น ํ
์คํธ๋ฅผ ์์๋ก ์ธ์ด ๋ชจ๋ธ์ ์
๋ ฅํฉ๋๋ค.
3. ์๋ก์ด ํ
์คํธ๋ฅผ ์
๋ ฅํ๋ฉด, ๋ชจ๋ธ์ด ํด๋นํ๋ ์๋งจํฑ ํ ํฐ์ ์์ฑํฉ๋๋ค.
4. ์์ฑ๋ ์๋งจํฑ ํ ํฐ์ VITS / VQGAN์ ์
๋ ฅํ์ฌ ์์ฑ์ ๋์ฝ๋ฉํ๊ณ ์์ฑํฉ๋๋ค.
๋ช ๋ น์ค ์ถ๋ก
ํ์ํ vqgan
๋ฐ llama
๋ชจ๋ธ์ Hugging Face ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ค์ด๋ก๋ํ์ธ์.
huggingface-cli download fishaudio/fish-speech-1.4 --local-dir checkpoints/fish-speech-1.4
1. ์์ฑ์์ ํ๋กฌํํธ ์์ฑ:
!!! note ๋ชจ๋ธ์ด ์์์ ๋ฌด์์๋ก ์ ํํ๋๋ก ํ๋ ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
python tools/vqgan/inference.py \
-i "paimon.wav" \
--checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
์ด ๋ช
๋ น์ ์คํํ๋ฉด fake.npy
ํ์ผ์ ์ป๊ฒ ๋ฉ๋๋ค.
2. ํ ์คํธ์์ ์๋งจํฑ ํ ํฐ ์์ฑ:
python tools/llama/generate.py \
--text "๋ณํํ ํ
์คํธ" \
--prompt-text "์ฐธ๊ณ ํ ํ
์คํธ" \
--prompt-tokens "fake.npy" \
--checkpoint-path "checkpoints/fish-speech-1.4" \
--num-samples 2 \
--compile
์ด ๋ช
๋ น์ ์คํํ๋ฉด ์์
๋๋ ํ ๋ฆฌ์ codes_N
ํ์ผ์ด ์์ฑ๋๋ฉฐ, N์ 0๋ถํฐ ์์ํ๋ ์ ์์
๋๋ค.
!!! note
๋น ๋ฅธ ์ถ๋ก ์ ์ํด --compile
์ต์
์ ์ฌ์ฉํ์ฌ CUDA ์ปค๋์ ๊ฒฐํฉํ ์ ์์ต๋๋ค (~์ด๋น 30 ํ ํฐ -> ~์ด๋น 500 ํ ํฐ).
--compile
๋งค๊ฐ๋ณ์๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ์ํ ์ต์
์ ์ฌ์ฉํ์ง ์์ ์๋ ์์ต๋๋ค.
!!! info
bf16์ ์ง์ํ์ง ์๋ GPU์ ๊ฒฝ์ฐ --half
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค.
3. ์๋งจํฑ ํ ํฐ์์ ์์ฑ ์์ฑ:
VQGAN ๋์ฝ๋
python tools/vqgan/inference.py \
-i "codes_0.npy" \
--checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
HTTP API ์ถ๋ก
์ถ๋ก ์ ์ํ HTTP API๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์๋์ ๋ช ๋ น์ด๋ก ์๋ฒ๋ฅผ ์์ํ ์ ์์ต๋๋ค:
python -m tools.api \
--listen 0.0.0.0:8080 \
--llama-checkpoint-path "checkpoints/fish-speech-1.4" \
--decoder-checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" \
--decoder-config-name firefly_gan_vq
์ถ๋ก ์๋๋ฅผ ๋์ด๊ณ ์ถ๋ค๋ฉด --compile
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ดํ, http://127.0.0.1:8080/ ์์ API๋ฅผ ํ์ธํ๊ณ ํ ์คํธํ ์ ์์ต๋๋ค.
์๋๋ tools/post_api.py
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ด๋ ์์์
๋๋ค.
python -m tools.post_api \
--text "์
๋ ฅํ ํ
์คํธ" \
--reference_audio "์ฐธ๊ณ ์์ฑ ๊ฒฝ๋ก" \
--reference_text "์ฐธ๊ณ ์์ฑ์ ํ
์คํธ ๋ด์ฉ" \
--streaming True
์ ๋ช ๋ น์ ์ฐธ๊ณ ์์ฑ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ํ๋ ์์ฑ์ ํฉ์ฑํ๊ณ , ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ผ๋ก ๋ฐํํฉ๋๋ค.
๋ค์ ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ฐธ๊ณ ์์ฑ ๊ฒฝ๋ก์ ํ ์คํธ๋ฅผ ํ๊บผ๋ฒ์ ์ฌ์ฉํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค. ๋ช ๋ น์์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค.
python -m tools.post_api \
--text "์
๋ ฅํ ํ
์คํธ" \
--reference_audio "์ฐธ๊ณ ์์ฑ ๊ฒฝ๋ก1" "์ฐธ๊ณ ์์ฑ ๊ฒฝ๋ก2" \
--reference_text "์ฐธ๊ณ ์์ฑ ํ
์คํธ1" "์ฐธ๊ณ ์์ฑ ํ
์คํธ2"\
--streaming False \
--output "generated" \
--format "mp3"
์ ๋ช
๋ น์ด๋ ์ฌ๋ฌ ์ฐธ๊ณ ์์ฑ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก MP3
ํ์์ ์์ฑ์ ํฉ์ฑํ์ฌ, ํ์ฌ ๋๋ ํ ๋ฆฌ์ generated.mp3
๋ก ์ ์ฅํฉ๋๋ค.
--reference_audio
์ --reference_text
๋์ ์ --reference_id
(ํ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ references/<your reference_id>
ํด๋๋ฅผ ๋ง๋ค์ด ํด๋น ์์ฑ๊ณผ ์ฃผ์ ํ
์คํธ๋ฅผ ๋ฃ์ด์ผ ํฉ๋๋ค. ์ฐธ๊ณ ์์ฑ์ ์ต๋ 90์ด๊น์ง ์ง์๋ฉ๋๋ค.
!!! info
์ ๊ณต๋๋ ํ๋ผ๋ฏธํฐ๋ python -m tools.post_api -h
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
GUI ์ถ๋ก
WebUI ์ถ๋ก
๋ค์ ๋ช ๋ น์ผ๋ก WebUI๋ฅผ ์์ํ ์ ์์ต๋๋ค:
python -m tools.webui \
--llama-checkpoint-path "checkpoints/fish-speech-1.4" \
--decoder-checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" \
--decoder-config-name firefly_gan_vq
์ถ๋ก ์๋๋ฅผ ๋์ด๊ณ ์ถ๋ค๋ฉด
--compile
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
!!! note
๋ผ๋ฒจ ํ์ผ๊ณผ ์ฐธ๊ณ ์์ฑ ํ์ผ์ ๋ฏธ๋ฆฌ ๋ฉ์ธ ๋๋ ํ ๋ฆฌ์ references
ํด๋์ ์ ์ฅํด ๋๋ฉด, WebUI์์ ๋ฐ๋ก ํธ์ถํ ์ ์์ต๋๋ค. (ํด๋น ํด๋๋ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค.)
!!! note
WebUI๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด GRADIO_SHARE
, GRADIO_SERVER_PORT
, GRADIO_SERVER_NAME
๊ณผ ๊ฐ์ Gradio ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ๊ธฐ์ธ์!