File size: 3,893 Bytes
5afd702
98f15bb
 
5afd702
98f15bb
cd586a0
 
 
 
 
 
 
 
 
0d7b13b
 
98f15bb
 
 
 
 
a28587a
5afd702
a28587a
 
 
0d7b13b
 
a28587a
a94c078
a20c5b1
a28587a
 
 
 
a20c5b1
0d7b13b
fa6742e
0d7b13b
a28587a
a20c5b1
0d7b13b
fa6742e
0d7b13b
a94c078
98f15bb
 
 
 
 
a94c078
98f15bb
 
5afd702
 
 
67a5fcc
5afd702
 
 
b376975
 
 
 
 
aac9cb4
 
 
 
 
 
 
 
 
 
 
b376975
 
 
aac9cb4
 
 
 
 
b376975
 
 
 
 
 
 
 
aac9cb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5afd702
67a5fcc
 
98f15bb
67a5fcc
cd586a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# 베이스 이미지 선택
FROM python:3.10-slim

# 필수 패키지 설치
RUN apt-get update && \
    apt-get install -y \
        git \
        unzip \
        ffmpeg \
        build-essential \
        g++ \
        gcc \
        python3-dev \
        libffi-dev \
        libssl-dev \
        fontconfig && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

# 환경변수 설정 (/tmp 경로로 변경하여 캐시 문제 해결)
ENV PYTHONPATH="/app/model:/app/model/third_party/Matcha-TTS:/app:$PYTHONPATH"
ENV HF_HOME="/tmp/.cache/huggingface"
ENV MPLCONFIGDIR="/tmp/.cache/matplotlib"
ENV FONTCONFIG_PATH="/tmp/.cache/fontconfig"
ENV NUMBA_DISABLE_JIT=1
ENV NUMBA_DISABLE_CUDA=1
ENV MODELSCOPE_CACHE="/tmp/.cache/modelscope"

# 캐시 및 출력 디렉토리들 생성 및 권한 설정
RUN mkdir -p /tmp/.cache/huggingface && \
    mkdir -p /tmp/.cache/matplotlib && \
    mkdir -p /tmp/.cache/fontconfig && \
    mkdir -p /tmp/.cache/modelscope && \
    mkdir -p /app/outputs && \
    mkdir -p /.config/matplotlib && \
    mkdir -p /.modelscope && \
    mkdir -p /tmp && \
    chmod -R 777 /tmp/.cache && \
    chmod -R 777 /app/outputs && \
    chmod -R 777 /.config && \
    chmod -R 777 /.modelscope && \
    chmod -R 777 /tmp

# requirements.txt 복사 및 설치
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# 모든 파일 복사
COPY . .

# 디렉토리 구조 확인 및 생성
RUN mkdir -p /app/model/third_party/Matcha-TTS

# 심볼릭 링크 생성 (cosyvoice와 matcha 모듈을 루트에서 접근 가능하게)
RUN ln -sf /app/model/cosyvoice /app/cosyvoice
RUN ln -sf /app/model/third_party/Matcha-TTS /app/matcha

# CosyVoice가 찾는 경로에 맞춰 pretrained_models 심볼릭 링크 생성
# ROOT_DIR이 /app/cosyvoice라면 ../../pretrained_models는 /app/pretrained_models가 됨
RUN ln -sf /app/pretrained_models /app/model/pretrained_models
RUN ln -sf /app/pretrained_models /app/cosyvoice/pretrained_models

# 모델 다운로드 (빌드 타임에 수행)
RUN python -c "\
from modelscope import snapshot_download;\
snapshot_download('iic/CosyVoice2-0.5B', local_dir='/app/pretrained_models/CosyVoice2-0.5B');\
snapshot_download('iic/CosyVoice-ttsfrd', local_dir='/app/pretrained_models/CosyVoice-ttsfrd')"

# 리소스 압축 해제
RUN cd /app/pretrained_models/CosyVoice-ttsfrd && \
    if [ -f "resource.zip" ]; then \
        echo "Extracting resource.zip..."; \
        unzip -o resource.zip && \
        chmod -R 755 resource/ && \
        echo "Resource extraction completed"; \
        ls -la resource/; \
    else \
        echo "resource.zip not found"; \
        ls -la .; \
    fi

# 디렉토리 구조 최종 확인
RUN echo "=== Final directory structure ===" && \
    ls -la /app/pretrained_models/ && \
    echo "=== CosyVoice-ttsfrd contents ===" && \
    ls -la /app/pretrained_models/CosyVoice-ttsfrd/ && \
    echo "=== Resource directory ===" && \
    ls -la /app/pretrained_models/CosyVoice-ttsfrd/resource/ || echo "resource directory not found"

# .whl 파일 설치 (빌드 타임에 수행)
RUN cd /app && \
    if [ -f "pretrained_models/CosyVoice-ttsfrd/ttsfrd_dependency-0.1-py3-none-any.whl" ]; then \
        pip install pretrained_models/CosyVoice-ttsfrd/ttsfrd_dependency-0.1-py3-none-any.whl; \
    else \
        echo "ttsfrd_dependency whl not found"; \
    fi

RUN cd /app && \
    if [ -f "pretrained_models/CosyVoice-ttsfrd/ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl" ]; then \
        pip install pretrained_models/CosyVoice-ttsfrd/ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl; \
    else \
        echo "ttsfrd core whl not found"; \
        ls -la pretrained_models/CosyVoice-ttsfrd/; \
    fi

# 포트 노출 (Hugging Face Spaces는 7860 사용)
EXPOSE 7860

# FastAPI app 실행 (모델은 startup시 자동 초기화)
CMD ["python", "app.py"]