1. ์๋ฒ ํ๊ฒฝ์
Ubuntu 24.04.2 LTS
ํ๋์จ์ด ๊ตฌ์ฑ์ ์๋์ ๊ฐ๋ค
CPU AMD Ryzen 7 7700 GPU NVIDIA GeForce RTX 5070 Ti
๋ฉ์ธ๋ณด๋ ASUS TUF Gaming B650M-PLUS (STCOM ์ ํต)
๋ฉ๋ชจ๋ฆฌ G.Skill Flare X5 DDR5-6000 CL30 64GB (32GB x 2)
SSD WD Blue SN580 M.2 NVMe SSD 500GB
TTS ํ ์คํธ๋ ๋์ปค ํ๊ฒฝ์์ ์งํ๋์๋ค.
2. ์์ด๋์ด: "ํ๊ตญ์ด ๊ตฌํ์ด ์์ฐ์ค๋ฌ์ด ์์ฑ ๋ํ ์ฑ๋ด" ๋ง๋ค๊ธฐ
3. TTS ๋ชจ๋ธ ์ ์ ํ๊ธฐ
์ฐ๋ฆฌ๋ ์ง์ ๋ชจ๋ธ์ ํ์ต์ํค๊ณ , ํ์ํ๋ค๋ฉด ํ์ธ ํ๋(๋ชจ๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์์ค์์์)๊น์ง ํด๋ณด์๋ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ tts ๋ชจ๋ธ์ ์ฐพ์๋ณด์๋ค.
๊ฐ์ฅ ์ค์ํ๋ ๊ฒ์ ์คํ์์ค ํํ์ด๋ฉด์ ํ์ต ์ฝ๋ training py ํ์ผ์ ์ ๊ณตํ๋๊ฐ, ๋ํ ์ ํ๋ ์๊ฐ ์์ ์๋น์ค ํํ๋ก ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ๊ตญ์ด ์ฌ์ ํ์ต์ด ์๋ฃ๋ ๋ชจ๋ธ์ด์ด์ผ ํ๋ค. (์๊ทธ๋ฌ๋ฉด ์๊ฐ๊ณผ ์์์ด ๋๋ฌด๋๋ ๋ง์ด ํ์ํด์ง๋ค)
2๋ฒ์์ ์ธ๊ธํ๋ฏ์ด ์ฐ๋ฆฌ์ ๋ชฉํ๋ "ํ๊ตญ์ด ๊ตฌํ์ด ์์ฐ์ค๋ฌ์ด TTS" ์ด๋ค.
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ "์์ฐ์ค๋ฌ์ด ํ๊ตญ์ด"์ ๋ํด์๋ ์ ์๋ฅผ ํ ํ์๊ฐ ์์๋ค. ์์ฐ์ค๋ฝ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ "๋๋"์ด๊ธฐ ๋๋ฌธ์
"์ ๋ต"์ ๊ฐ์ง ์ ์๋ค.
- ์ธ๊ฐ์ด ์ด๋ค ํฌ์ธํธ์์ "์ฌ๋์ ์์ฑ"์ ๋ฃ๊ณ ์์ฐ์ค๋ฝ๋ค๊ณ ๋๋ผ๋์ง
- ์์ฐ์ค๋ฌ์์ ๊ฒฐ์ ์ง๋ ์์๋ ์ด๋ค ๊ฒ์ด ์๋์ง
๋ฑ๋ฑ ์ด์ธ์๋ ๋ค์ํ ๊ด์ ์์ "์์ฐ์ค๋ฌ์ด ํ๊ตญ์ด ์์ฑ", "๋ํ์ฒด" ์ ๋ํด ์ ์ํด๋ณด๊ณ ์ ๋ ธ๋ ฅํ๋ค.
์ผ๋จ ์์ฐ์ค๋ฌ์์ ๋ํ ๊ฐ์ ์ก์ ๋ค TTS ์ ๋ํด ๊ณต๋ถํ๊ณ ๋จธ์ ๋ฌ๋์ ๊ฐ๋นํ ์ ์๋ ใ ใ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ค.
์ญ์์ผ๋ฐ.... ํต์ฅ์ ํํ ํธ์ด ์ปดํจํฐ ๋ถํ๋ค์ ์ฌ๋ชจ์๋ค. . ใ ใ ๋ง์น ํฌ์ผ๋ชฌ๋ณผ ๋ชจ์ผ๋ฏ์ด ใ ใ ใ ใ
๊ทธ๋ ๊ฒ ์ด๋ฐฑ๋ง์์ด ํ์ฉ ๋๋ ์์คํ ์ปดํจํฐ๊ฐ ๋๋์ด ์์ฑ ๋์๋ค ใ ใ
์ฐ๋ถํฌ๋ฅผ ๊น๊ณ ํฌํธํฌ์๋ฉ๋ ํด์ ํ์๋ค์ด ์ ์ํ ์ ์๋๋ก ํด์ฃผ์๋ค.
์ด์ ์ฐ๋ฆฌ๊ฐ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ ์์ด๋์ด๋ฅผ ๊ตฌํํ ์ ์๋ TTS ๋ชจ๋ธ์ ๊ณจ๋ผ์ผํ๋ค.
์๋ ? ์ฌ์๋ ? ๋ชจ๋ธ์ธ 5070ti ํ ๋๋ก๋ ์ต์ต์ต์ TTS ๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ํ์ตํ๊ธฐ์๋ ๋ค์ํ ์ ์ฝ์ด ์์๊ณ ํ๊ตญ์ด ํ์ต์ด ์ด๋ฏธ ๋์ด ์์ผ๋ฉด์ ๊ณต์์ ์ผ๋ก ์ง์๋ ํ๊ณ ,, ์คํ์์ค์ธ,,, ๋ฌด๋ฃ ๋ผ์ด์ ์ค์ธ ๋ชจ๋ธ์ ์ฐพ๋ ๊ฒ์ ๋น์ฐํ๊ฒ๋ ์ด๋ ค์ด ์ผ์ด์๋ค.
์ฐ์ ์ต๊ทผ์ (23๋ ์ดํ) ๊ณต๊ฐ๋์์ผ๋ฉฐ ํ๊ตญ์ด ์ฌ์ ํ์ต์ด ๋, ๊ทธ๋ฆฌ๊ณ ๋ผ์ด์ ์ค ๋ฌธ์ ๊ฐ ์๋ (MIT) TTS ์ค ํ๋์ธ Melo TTS ๋ชจ๋ธ์ ๋จผ์ ํ ์คํธ ํด๋ณด์๋ค. (๋ค๋ฅธ ํ์๋ถ์ GPT-SoVITS, Coqui-XTTS ๋ฑ๋ฑ์ ์ฐจ๋ก๋ก ๋ณด์ ๋ค๊ณ ํ์ จ๋ค. )
4. Melo TTS ๋?
GitHub - myshell-ai/MeloTTS: High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French,
High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French, Chinese, Japanese and Korean. - myshell-ai/MeloTTS
github.com
- MIT ์ MyShell.ai๊ฐ ๊ฐ๋ฐํ ๊ณ ํ์ง ๋ค๊ตญ์ด ํ ์คํธ-์์ฑ(TTS) ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ง์๋๋ ์ธ์ด: ์์ด(๋ฏธ๊ตญ, ์๊ตญ, ์ธ๋, ํธ์ฃผ), ์คํ์ธ์ด, ํ๋์ค์ด, ์ค๊ตญ์ด(์์ด ํผํฉ), ์ผ๋ณธ์ด, ํ๊ตญ์ด
- ๊ณ ํ์ง ๋ค๊ตญ์ด TTS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ณต, CPU ์์๋ ์ค์๊ฐ ์ถ๋ก ๊ฐ๋ฅํ ํจ์จ์ ๋ชจ๋ธ
ํน์ง
- ๊ณ ํ์ง ์์ฑ ํฉ์ฑ: ๋ชจ๋ ์ง์์ธ์ด์์ ์์ฐ์ค๋ฝ๊ณ ๋ช ํํ ์์ฑ ์์ฑ. ๋ค๊ตญ์ด TTS ์๋ฃจ์ ์ ๊ณต
- ๊ฒฝ๋ํ ๋ฐ ํจ์จ์ฑ: CPU ํ๊ฒฝ์์๋ ๋ฐ์ด๋ ์ฑ๋ฅ ๋ฐํ
- ๋ณ๋ถ์ถ๋ก ๊ณผ ์ ๋์ ํ์ต์ ๊ธฐ๋ฐ์ผ๋ก ํ End-to-End TTS ๋ชจ๋ธ VITS ๊ธฐ๋ฐ
- ๋ค์ํ ์ฅ์น(CPU, GPU, NPU)์ ๋ํ OpenVINO ํดํท ์ฌ์ฉํด ์ต์ ํ ๊ฐ๋ฅ.
5. ๋์ปค ์ปจํ ์ด๋์ Melo TTS ํ ์คํธ ํ๊ธฐ
5-1) melo tts ๊น ํด๋ก (๊ฒฝ๋ก: eunsil/tts_models)
git clone https://github.com/myshell-ai/MeloTTS.git
5-2) Docker file ๋ก ๋์ปค ์ด๋ฏธ์ง ๋น๋ํ๊ธฐ
- Melo TTS ๋ ๋์ปค ์ง์ํ๊ธฐ ๋๋ฌธ์ Dockerfile ์ด ์ ์ฅ์์ ๋ค์ด์์.
docker build -t melotts-korean-env .
๊ทธ๋ฌ๋ ๊ณ์ ๋๋ ๋น๋ ์คํจ .... ใ ใ
ใ ใ ใ ใ
melo ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋์ปค ํ์ผ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN apt-get update && apt-get install -y \
build-essential libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
RUN pip install -e .
RUN python -m unidic download
RUN python melo/init_downloads.py
CMD ["python", "./melo/app.py", "--host", "0.0.0.0", "--port", "8888"]
์๊ณ ๋ณด๋ ์ด๋๋ก๋ ์ ๋ ์ด๋ฏธ์ง ๋น๋๊ฐ ๋์ง ์๋๋ค
๋๋์ง ์๋ ์ข ์์ฑ ์ง์ฅ์ ๊ฐํ๊ฒ ๋จ ใ
# 1. ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ค์ : NVIDIA CUDA ์ด๋ฏธ์ง ์ฌ์ฉ
# RTX 5070 Ti (sm_120) ํธํ์ฑ์ ์ํด NVIDIA ๊ณต์ CUDA ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 2. ํ๊ฒฝ ๋ณ์ ์ค์
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
ENV PATH="/root/.local/bin:${PATH}"
# ENV CUDA_LAUNCH_BLOCKING=1 # GPU ์ค๋ฅ ๋๋ฒ๊น
์ ์ ์ฉ, ํ์์๋ ์ฃผ์ ์ฒ๋ฆฌ
# 3. ์์คํ
๋๊ตฌ ๋ฐ ํ์ด์ฌ ํ๊ฒฝ ์ค์น
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-dev \
build-essential \
curl \
git \
git-lfs \
libsndfile1 \
portaudio19-dev \
&& rm -rf /var/lib/apt/lists/*
# 4. ์์
๋๋ ํ ๋ฆฌ ์ค์ ๋ฐ ์์ค์ฝ๋ ๋ณต์ฌ
WORKDIR /app
COPY . .
# 5. ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น (๊ฐ์ฅ ์ค์!)
RUN pip install --upgrade pip
# --- ์ด ์ค์ ์ถ๊ฐํฉ๋๋ค: PyTorch Nightly (์ต์ ๊ธฐ๋ฅ ๋ฐ CUDA 12.8 ์ง์) ๋ฒ์ ์ค์น ---
# ํ์ ๋ถ์ด StyleTTS 2์์ ์ฑ๊ณตํ ๋ฐ๋ก ๊ทธ ๋ช
๋ น์ด์
๋๋ค.
# --pre: ํ๋ฆฌ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ ํฌํจํ์ฌ ์ค์น
# --index-url: Nightly ๋น๋ ๋ค์ด๋ก๋ URL ์ง์ (CUDA 12.8์ฉ)
RUN pip install --no-cache-dir --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
# MeloTTS์ ๋๋จธ์ง ์์กด์ฑ ๋ฐ ํ๋ก์ ํธ ์์ฒด ์ค์น
# requirements.txt์ botocore, cached_path, gradio ๋ฑ์ ๋ฒ์ ์ด ๋ช
์๋์ด ์์ด์ผ ํฉ๋๋ค.
# (๊ทธ๋ฆฌ๊ณ requirements.txt์์ torch์ torchaudio๋ ๋ฐ๋์ ์ ๊ฑฐ๋์ด์ผ ํฉ๋๋ค!)
RUN pip install -e .
RUN pip install huggingface-hub # ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ
# 6. unidic ์ฌ์ ๋ฐ ๋ชจ๋ธ ๊ฐ์ค์น ์ด๊ธฐ ๋ค์ด๋ก๋ ์คํ
RUN python3 -m unidic download
RUN python3 melo/init_downloads.py
# 7. WebUI ํฌํธ ๋
ธ์ถ
EXPOSE 8888
# 8. ์ปจํ
์ด๋ ์คํ ์ ๊ธฐ๋ณธ ๋ช
๋ น์ด
CMD ["python3", "./melo/app.py", "--host", "0.0.0.0", "--port", "8888"]
requirements.txt
txtsplit
cached_path==1.6.2
transformers==4.27.4
num2words==0.5.12
unidic_lite==1.0.8
unidic==1.1.0
mecab-python3==1.0.9
pykakasi==2.2.1
fugashi==1.3.0
g2p_en==2.1.0
anyascii==0.3.2
jamo==0.4.1
gruut[de,es,fr]==2.2.3
g2pkk>=0.1.1
librosa==0.9.1
pydub==0.25.1
eng_to_ipa==0.0.2
inflect==7.0.0
unidecode==1.3.7
pypinyin==0.50.0
cn2an==0.5.22
jieba==0.42.1
gradio==3.50.2
langid==1.1.6
tqdm
tensorboard==2.16.2
loguru==0.7.2
botocore==1.34.88
๋์ปค ์ด๋ฏธ์ง์ ํน์ง
- ์ฌํ์ฑ (Reproducibility) : ์ด๋ฏธ์ง๋ ๋ถ๋ณํ๋ค. ์ด๋ค ํ๊ฒฝ์์๋ ๋์ผํ ์ด๋ฏธ์ง ์ฌ์ฉํ๋ฉด ๋์ผํ ๊ฐ๋ฐํ๊ฒฝ, ๊ฒฐ๊ณผ ์ป์ ์ ์์ !! “๋ด ์ปดํจํฐ์์ ๋๋๋ฐ, ๋ค ์ปด์์๋ ์๋ผ” ๋ชปํจ ใ
- ๊ฒฉ๋ฆฌ (isolation) : ์ด๋ฏธ์ง๋ ํ์ํ ๋ชจ๋ ๊ฒ์ ์์ฒด์ ์ผ๋ก ํฌํจํจ!! ํธ์คํธ ์์คํ ์ ๋ค๋ฅธ ์ํํธ์จ์ด๋ ์ถฉ๋ํ ์ผ๋ ค ์์.
- ๋ฐฐํฌ ์ฉ์ด์ฑ: ํ๋ฒ ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ์๋ฒ, ํด๋ผ์ฐ๋ ํ๊ฒฝ์ผ๋ก ์ฝ๊ฒ ์ฎ๊ฒจ ๋ฐฐํฌํ ์ ์์.
์ด๋ฏธ์ง ์ ์ฅ ๊ฒฝ๋ก: /var/lib/docker/ ๋๋ ํ ๋ฆฌ ์๋ @@ 1!!
5-3) ๋์ปค ์ปจํ ์ด๋ ์คํํ๊ธฐ
์ด๋ฏธ์ง ๋น๋๊ฐ ์์ฑ ๋์๋ค.
์ด์ ์ปจํ ์ด๋๋ฅผ ์คํํด๋ณด์!!
#1. -it ์ต์
: ์ธ์
์ด ๋๊ธฐ๋ฉด ์ปจํ
์ด๋๋ ๊ฐ์ด ์ข
๋ฃ๋จ. exied
docker run --gpus all -it -p 8888:8888 -v "$(pwd):/app" melotts-korean-env
#2. -d ์ต์
: ๋์ปค ์ปจํ
์ด๋๋ฅผ "๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์ํ๊ฒ"
docker run --gpus all -d -p 8888:8888 -v "$(pwd):/app" --name melotts_webui melotts-korean-env
#2. --rm ์ต์
: ์ข
๋ฃ์ ๋์์ "์ปจํ
์ด๋ ์ธ์คํด์ค" ์ญ์ ๋จ.
docker run --gpus all --rm -p 8888:8888 -v "$(pwd):/app" --name melotts_webui melotts-korean-env
- ์ด ์ค ํ๋๋ฅผ ๊ณจ๋ผ run ์ ํ๋ฉด Dockerfile ๋ง์ง๋ง ์ค CMD ์ฐฝ์ ์ ํ ๋ช ๋ น์ด๊ฐ ์คํ๋๋ค.
app.py -> ์น ui ํ๋ฉด์ ํฌํธ ๋ฒํธ 8888๋ฒ์ ์ฌ์ฉํด ์ด๋ผ๋ ๋ป.
๋์ปค ๋ช ๋ น์ด ๋ชจ์
#ํ์ฌ ์คํ ์ค์ธ ๋์ปค ์ปจํ
์ด๋ ํ์ธ
docker ps
#ํ์ฌ ์คํ ์ค + ์ค์ง๋ ์ปจํ
์ด๋ ์ ๋ถ ํ์ธ
docker ps -a
#์ด์ ์ปจํ
์ด๋ ์ค์์ ํ์ฌ ์ฌ์ฉ ์ํ๋ ์ปจํ
์ด๋ ์ญ์
#1)์ ์ฒด ์ญ์
docker rm $(docker ps -a -q)
#2)ํน์ ์ปจํ
์ด๋ ์ญ์
docker rm [id ํน์ names ์ง์ ์
๋ ฅ] !!!! image ์
๋ ฅํ๋ฉด ์๋จ. !!
#ํ์ฌ exited ์ํ์ธ ๋์ปค ์ปจํ
์ด๋ ๋ค์ ์์์ํค๊ธฐ - ์ข
๋ฃ๋ ์ปด ์ผ๊ธฐ
#docker ps -a ๋ชฉ๋ก์ ์กด์ฌํด์ผํ๋ฉฐ, exited(0) ์ธ ์ํ์ฌ์ผํจ.
docker start <์ปจํ
์ด๋_ID_๋๋_์ด๋ฆ>
5-4) ์น ui ๋ก melo tts ์ถ๋ก ํ๊ธฐ
melo tts ๋ ์น ui ๋ฅผ ์ ๊ณตํ๋ค.

์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ์์ ๊ฐ์ ์น ui ํ๋ฉด์ ์ด ์ ์๋ค. !!!
์ฒ์ ์ถ๋ก ์์๋ 3์ด ์ด๋ด์ ์งง์ ๋ฌธ์ฅ๋ 20์ด๋ ์กฑํ ๊ฑธ๋ฆฌ์ง๋ง ์ดํ ๋ฐ๋ก ๋นจ๋ผ์ง.
์ ์ด๋ ๊ฒ melo tts ๋ฅผ ๋์ปค ๋ด์์ ์ถ๋ก ํด๋ณด์๋ค~!
์ถ๋ก ๊ฒฐ๊ณผ๋ ์๋์ ์๋ค. ํ๊ตญ์ด ์์ฑ ์์ฒด๋ ๊ฝค ์์ฐ์ค๋ฝ๋ค. ๋งํฌ๋ ์์ฐ์ค๋ฝ์ง ์์ง๋ง ํ์คํ
ํ๊ตญ์ด ๊ตฌํ์ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ๋ค.
"์ค๋ ๋น ์จ๋ค๋๋ฐ ์ฐ์ฐ ์ฑ๊ฒผ๋? ... ์ด? ๊ทผ๋ฐ ์ง๊ธ์ ๋น ์์ค๋ ๊ฒ ๊ฐ์" ์ ๋ํ ์์ฑ ํ์ผ์ด๋ค.
ํ๋ฒ ๋ค์ด๋ณด์ธ์
๊ฝค ์์ฐ์ค๋ฝ์ง ์๋์ค? ใ ใ ใ
์ถ๋ก ๊ฒฐ๊ณผ์ ์ต์ข ์ ํํ GPT-SoVITS ๋ชจ๋ธ์ ๋ํด์๋ ๋ค์ ๊ฒ์๊ธ์์ ๋ ์์ธํ๊ฒ ๋ค๋ค๋ณผ ์์ ์ด๋ค ์๋ฝ