File size: 2,095 Bytes
5fc69e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# ----------- ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ -----------
FROM python:3.10-slim

# ----------- ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ -----------
WORKDIR /app

# ----------- ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์„ค์น˜ -----------
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    && rm -rf /var/lib/apt/lists/*

# ----------- ์˜์กด์„ฑ ์„ค์น˜ -----------
# requirements ๋จผ์ € ๋ณต์‚ฌ โ†’ ์บ์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅ
COPY requirements.txt /app/requirements.txt

# PyTorch CPU ๋ฒ„์ „ ์„ค์น˜ (GPU ํ•„์š” ์—†์Œ)
RUN pip install --no-cache-dir torch==2.0.1+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html \
    && pip install --no-cache-dir -r /app/requirements.txt

# ----------- ์ฝ”๋“œ ๋ณต์‚ฌ -----------
# ์˜์กด์„ฑ ์„ค์น˜ ํ›„ ์ฝ”๋“œ ๋ณต์‚ฌ โ†’ requirements ๋ณ€๊ฒฝ ์—†๋Š” ํ•œ ์บ์‹œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
COPY . /app/

# ----------- ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ -----------
# transformers ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ํ›„ ์ด๋ฏธ์ง€์— ํฌํ•จ
RUN python -c "from transformers import AutoTokenizer, AutoModel; \
    models = { \
        'emotion': ('tae898/emoberta-base-ko', './models/emotion-classification-model'), \
        'fallback': ('skt/ko-gpt-trinity-1.2B-v0.5', './models/fallback-npc-model'), \
        'embedder': ('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2', './models/sentence-embedder') \
    }; \
    import os; \
    os.makedirs('./models/emotion-classification-model', exist_ok=True); \
    os.makedirs('./models/fallback-npc-model', exist_ok=True); \
    os.makedirs('./models/sentence-embedder', exist_ok=True); \
    for key, (name, path) in models.items(): \
        AutoModel.from_pretrained(name, cache_dir=path); \
        AutoTokenizer.from_pretrained(name, cache_dir=path)"

# ----------- ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • -----------
ENV EMOTION_MODEL_DIR=/app/models/emotion-classification-model
ENV FALLBACK_MODEL_DIR=/app/models/fallback-npc-model
ENV EMBEDDER_MODEL_DIR=/app/models/sentence-embedder

# ----------- ํฌํŠธ ์„ค์ • -----------
EXPOSE 8000

# ----------- ์‹คํ–‰ ๋ช…๋ น -----------
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "${PORT:-8000}"]