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>
This commit is contained in:
@@ -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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user