docker / build (push) Failing after 39s
- Docker: Dockerfile (CPU), compose с FlareSolverr, настройка через DUB_* переменные, токен доступа к /predict, tools/pack_models.py, workflow Gitea Actions, docs/docker.md - Модель грузится офлайн (config.json рядом с весами); общий код вынесен в src/spans.py, сервису не нужны sklearn/matplotlib/pandas - Обучение: профили tiny2/base/large/modern, запуски в models/runs, реестр и честное сравнение на одной тестовой выборке (src/runs.py), пункт меню «Модели» - Датасет: язык и аудио-параметры дорожек, 18+ по строкам «Аудио», ручные метки по ссылкам, переиндексация сохранённого HTML, параллельная сборка, сбалансированная выборка - Тексты страниц (data/pages) больше не хранятся в git Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
40 lines
1.4 KiB
Docker
40 lines
1.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# DUB-AI: HTTP-сервис определения дорожек озвучки (FastAPI), CPU.
|
|
#
|
|
# python tools/pack_models.py --stage docker-models # положить модели в образ (необязательно)
|
|
# docker build -t dub-ai .
|
|
#
|
|
# Без шага pack_models образ собирается без моделей — тогда смонтируйте каталог: -v ./models:/app/models:ro
|
|
FROM python:3.12-slim
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
HF_HUB_OFFLINE=1 \
|
|
TRANSFORMERS_OFFLINE=1 \
|
|
TOKENIZERS_PARALLELISM=false \
|
|
DUB_HOST=0.0.0.0 \
|
|
DUB_PORT=8000 \
|
|
DUB_MODEL_DIR=/app/models/best \
|
|
DUB_SEGMENTER_DIR=/app/models/segmenter
|
|
|
|
WORKDIR /app
|
|
|
|
# torch без CUDA: образ в разы легче, на VPS GPU нет
|
|
RUN pip install torch==2.11.0 --index-url https://download.pytorch.org/whl/cpu
|
|
COPY requirements-service.txt .
|
|
RUN pip install -r requirements-service.txt
|
|
|
|
COPY src/ src/
|
|
COPY docker-models/models/ models/
|
|
|
|
RUN useradd --system --uid 10001 --no-create-home dub
|
|
USER dub
|
|
|
|
EXPOSE 8000
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=120s --retries=3 \
|
|
CMD python -c "import os,urllib.request as u; u.urlopen('http://127.0.0.1:%s/health' % os.environ.get('DUB_PORT','8000'), timeout=4)"
|
|
|
|
CMD ["python", "-m", "src.service"]
|