File size: 2,719 Bytes
ae44122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Базовый образ с Python 3.10 выбран для совместимости с современными версиями
# библиотек машинного обучения и с окружением Hugging Face Spaces.
FROM python:3.10-slim

# Переменные отключают TensorFlow внутри transformers.
# Приложение использует PyTorch, а TensorFlow для модели классификации не требуется.
ENV USE_TF=0 \
    USE_TORCH=1 \
    TRANSFORMERS_NO_TF=1 \
    TOKENIZERS_PARALLELISM=false \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    HF_HOME=/home/user/.cache/huggingface \
    TRANSFORMERS_CACHE=/home/user/.cache/huggingface/transformers \
    SENTENCE_TRANSFORMERS_HOME=/home/user/.cache/torch/sentence_transformers \
    PORT=7860

# Рабочая папка приложения внутри контейнера.
WORKDIR /app

# Устанавливаем системные библиотеки, необходимые для scikit-learn, scipy и PyTorch.
RUN apt-get update \
    && apt-get install -y --no-install-recommends libgomp1 \
    && rm -rf /var/lib/apt/lists/*

# Сначала копируем файл зависимостей, чтобы Docker мог переиспользовать слой установки
# при изменении только кода приложения.
COPY requirements.txt .

# Устанавливаем CPU-версию PyTorch отдельно, чтобы контейнер не загружал лишние
# графические зависимости. Затем устанавливаем остальные библиотеки приложения.
RUN pip install --upgrade pip \
    && pip install torch==2.3.1 --index-url https://download.pytorch.org/whl/cpu \
    && pip install -r requirements.txt

# Копируем код приложения, шаблоны, стили и папки для модели и результатов.
COPY . .

# Создаем непривилегированного пользователя. Такой запуск безопаснее, чем работа от root.
RUN useradd -m -u 1000 user \
    && chown -R user:user /app /home/user
USER user

# Hugging Face Docker Spaces по умолчанию направляет внешний трафик на порт 7860.
EXPOSE 7860

# Gunicorn запускает Flask-приложение как сервер для размещения.
# Один рабочий процесс выбран из-за модели смысловых векторов, которая занимает память.
CMD ["gunicorn", "-c", "gunicorn_conf.py", "app:app"]