В 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>
39 lines
2.0 KiB
Docker
39 lines
2.0 KiB
Docker
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"]
|