docs(worker-gpu): объяснить, почему параллельность воркера жёстко равна 1
All checks were successful
Deploy / test (push) Successful in 3m9s
Deploy / deploy (push) Successful in 1m27s

В 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>
This commit is contained in:
jze9
2026-08-31 21:11:19 +05:00
parent 780a0a1061
commit 9145de8e54

View File

@@ -28,4 +28,11 @@ COPY . .
# Директория для FAISS индекса (монтируется как volume) # Директория для FAISS индекса (монтируется как volume)
RUN mkdir -p /data/index 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"] CMD ["celery", "-A", "app.celery_app", "worker", "-Q", "queue.gpu", "-c", "1", "-n", "gpu@%h", "--loglevel=info"]