Files
jze9 9145de8e54
All checks were successful
Deploy / test (push) Successful in 3m9s
Deploy / deploy (push) Successful in 1m27s
docs(worker-gpu): объяснить, почему параллельность воркера жёстко равна 1
В Dockerfile стояло -c 1 без пояснения, и это выглядит как недосмотр: панель
отладки показывает «параллельно: 1» рядом с воркерами на 4, 8 и 16 процессов.

На самом деле поднимать нельзя: FAISS-индекс — синглтон в памяти процесса, при
-c N каждый форк получит свою копию, и save() каждого затрёт чужие векторы.
Потери были бы молчаливыми — как с 60 993 ложными отметками faiss_id.

Смысла в параллельности тоже нет: Ollama занимает все ядра сервера обработкой
одного запроса (2.29 req/s при конкурентности 1 против 2.48 при 16). Поднимать
-c уместно только вместе с VECTOR_BACKEND=qdrant.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 21:11:19 +05:00

39 lines
2.0 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FROM nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04
# Установить Python 3.11
RUN apt-get update && apt-get install -y --no-install-recommends \
python3.11 \
python3.11-dev \
python3-pip \
python3.11-distutils \
gcc \
g++ \
libpq-dev \
curl \
&& rm -rf /var/lib/apt/lists/*
# Сделать python3.11 дефолтным и поставить pip именно для 3.11 (на CUDA-базе
# python3-pip ставит pip для системного python3.10 — он не виден из python3.11)
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 && \
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --timeout 60 -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
COPY . .
# Директория для FAISS индекса (монтируется как volume)
RUN mkdir -p /data/index
# -c 1 обязателен, пока VECTOR_BACKEND=faiss: индекс — синглтон в памяти процесса
# (app/faiss_manager.py). При -c N Celery форкает N процессов, у каждого своя копия
# индекса, и save() каждого затирает чужие векторы в общем файле — эмбеддинги
# теряются молча. Параллельность тут всё равно не нужна: Ollama занимает все ядра
# сервера обработкой одного запроса (замер: 2.29 req/s при конкурентности 1 против
# 2.48 при 16). Поднимать -c имеет смысл только вместе с VECTOR_BACKEND=qdrant,
# который допускает конкурентную запись.
CMD ["celery", "-A", "app.celery_app", "worker", "-Q", "queue.gpu", "-c", "1", "-n", "gpu@%h", "--loglevel=info"]