- vendor/CosyVoice: 패치된 CosyVoice 코드 + Matcha-TTS 벤더링 - cosyvoice_worker: 전용 venv에서 상주하는 합성 워커(FastAPI, 모델 1회 로드) - app/engines/cosyvoice_engine: HTTP 프록시 엔진(속도/피치) - Dockerfile: 전용 venv(torch cu128) + 모델 베이킹 + 빌드 워밍업 - entrypoint.sh: 워커(8001) + 메인앱(8788) 동시 기동
66 lines
2.8 KiB
Docker
66 lines
2.8 KiB
Docker
FROM python:3.11-slim
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
HF_HOME=/models \
|
|
NLTK_DATA=/models/nltk_data \
|
|
HF_HUB_DISABLE_TELEMETRY=1
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential git ffmpeg libsndfile1 curl ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
RUN mkdir -p /models/nltk_data
|
|
|
|
# Blackwell(sm_120, RTX 5050/5070Ti) 지원 torch cu128 휠
|
|
# (파일 의존성이 없어 constraints/requirements 수정 시에도 캐시 유지)
|
|
RUN pip install torch==2.11.0 torchaudio==2.11.0 \
|
|
--index-url https://download.pytorch.org/whl/cu128
|
|
|
|
COPY constraints.txt requirements.txt ./
|
|
|
|
# 나머지 의존성 (정확한 버전 고정)
|
|
RUN pip install -c constraints.txt -r requirements.txt
|
|
|
|
# MeloTTS(순수 파이썬) 벤더링: 검증된 호스트 사본을 그대로 설치
|
|
# (PyPI 미배포 0.1.2 + gradio/tensorboard 등 불필요 의존성 회피)
|
|
COPY vendor/melo /usr/local/lib/python3.11/site-packages/melo
|
|
|
|
COPY app ./app
|
|
COPY frontend ./frontend
|
|
COPY warmup.py ./
|
|
|
|
# 한국어/영어 모델 및 부가 데이터 사전 다운로드 (첫 요청 지연 제거)
|
|
RUN python warmup.py
|
|
|
|
# ================= CosyVoice 엔진 (한국어, Apache-2.0) =================
|
|
# 전용 venv 로 의존성 격리 (MeloTTS 스택과 충돌 방지).
|
|
COPY vendor/CosyVoice /opt/CosyVoice
|
|
COPY cosyvoice_worker /opt/cosyvoice_worker
|
|
|
|
RUN python -m venv /opt/cosyvoice-venv \
|
|
&& /opt/cosyvoice-venv/bin/pip install --no-cache-dir "setuptools<81" wheel \
|
|
&& /opt/cosyvoice-venv/bin/pip install --no-cache-dir torch==2.11.0 torchaudio==2.11.0 \
|
|
--index-url https://download.pytorch.org/whl/cu128 \
|
|
&& /opt/cosyvoice-venv/bin/pip install --no-cache-dir --no-build-isolation \
|
|
-r /opt/cosyvoice_worker/requirements.txt \
|
|
&& /opt/cosyvoice-venv/bin/pip install --no-cache-dir --no-deps --no-build-isolation \
|
|
openai-whisper==20231117 tiktoken more-itertools
|
|
|
|
# CosyVoice-300M-SFT 모델 베이킹 (한국어 프리셋 화자 '韩语女' 포함, ~5.4GB)
|
|
ENV COSYVOICE_MODEL_DIR=/models/cosyvoice/CosyVoice-300M-SFT
|
|
RUN /opt/cosyvoice-venv/bin/python -c "from modelscope import snapshot_download; snapshot_download('iic/CosyVoice-300M-SFT', local_dir='/models/cosyvoice/CosyVoice-300M-SFT')"
|
|
|
|
# 빌드 시 1회 로드하여 런타임 프론트엔드(wetext 등)를 이미지에 캐시
|
|
RUN /opt/cosyvoice-venv/bin/python -c "import sys; sys.path.insert(0,'/opt/CosyVoice'); sys.path.insert(0,'/opt/CosyVoice/third_party/Matcha-TTS'); from cosyvoice.cli.cosyvoice import CosyVoice; CosyVoice('/models/cosyvoice/CosyVoice-300M-SFT', load_jit=False, load_trt=False, fp16=False); print('cosyvoice warmup ok')"
|
|
|
|
# 워커 활성화 스위치
|
|
ENV COSYVOICE_URL=http://127.0.0.1:8001
|
|
|
|
COPY entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
EXPOSE 8788
|
|
CMD ["/entrypoint.sh"]
|