diff --git a/Dockerfile b/Dockerfile index fa7e2e3..20b0299 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM python:3.11-slim +# ---------- 빌더 단계 ---------- +FROM python:3.11-slim AS builder ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ @@ -13,25 +14,53 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ WORKDIR /app RUN mkdir -p /models/nltk_data -# Blackwell(sm_120, RTX 5050/5070Ti) 지원 torch cu128 휠 -# (파일 의존성이 없어 constraints/requirements 수정 시에도 캐시 유지) +# Blackwell(sm_120) 지원 torch cu128 휠 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 등 불필요 의존성 회피) +# MeloTTS(순수 파이썬) 벤더링 COPY vendor/melo /usr/local/lib/python3.11/site-packages/melo -# 한국어/영어 모델 및 부가 데이터 사전 다운로드 (첫 요청 지연 제거) -# (app/frontend COPY 보다 앞: 앱 코드만 바뀌어도 재-워밍업하지 않도록) +# 한국어/영어 모델 사전 다운로드 COPY warmup.py ./ RUN python warmup.py +# 슬림화: 추론에 불필요한 패키지 제거 +# - triton: torch.compile 전용(우리는 eager 추론이라 불필요) +# - gruut 미사용 언어(es/de/fr): 영어만 사용 +RUN pip uninstall -y triton 2>/dev/null || true \ + && rm -rf /usr/local/lib/python3.11/site-packages/gruut_lang_es \ + /usr/local/lib/python3.11/site-packages/gruut_lang_de \ + /usr/local/lib/python3.11/site-packages/gruut_lang_fr \ + /usr/local/lib/python3.11/site-packages/gruut_lang_es-*.dist-info \ + /usr/local/lib/python3.11/site-packages/gruut_lang_de-*.dist-info \ + /usr/local/lib/python3.11/site-packages/gruut_lang_fr-*.dist-info \ + && find /usr/local/lib/python3.11/site-packages -name "__pycache__" -type d -prune -exec rm -rf {} + 2>/dev/null || true + +# 슬림화 후에도 한/영 모델이 정상 로드되는지 검증 +RUN python -c "from melo.api import TTS; TTS('KR', device='cpu'); TTS('EN', device='cpu'); print('slim import ok')" + +# ---------- 런타임 단계 ---------- +FROM python:3.11-slim AS runtime + +ENV PYTHONUNBUFFERED=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 \ + ffmpeg libsndfile1 libgomp1 ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin +COPY --from=builder /models /models + COPY app ./app COPY frontend ./frontend