feat(gpu): Qdrant как векторный бэкенд под флагом — снимает SPOF FAISS
FAISS-индекс — файловый синглтон в RAM одного воркера (save на каждую запись, без блокировок, без HA, не горизонтален). Добавлен альтернативный бэкенд Qdrant с тем же classmethod-интерфейсом, выбор через VECTOR_BACKEND — аддитивно и безопасно: дефолт остаётся faiss, ничего не ломается, пока не переключат. - app/qdrant_manager.py — search/add_vectors/save(no-op)/total_vectors поверх qdrant-client (коллекция Cosine, id точки = doc_id, upsert идемпотентен); - app/vector_store.py — get_backend() по настройке; задачи search/plagiarism переведены на него (больше не импортируют FAISSManager напрямую); - app/migrate_faiss_to_qdrant.py — перелив существующих векторов (reconstruct из IndexIDMap2 → upsert), идемпотентно; - docker-compose.prod.yml — сервис qdrant под профилем `qdrant` (по умолчанию не поднимается, ресурсов не ест) + volume; README — раздел про переключение. Тесты (9) гоняют QdrantManager против ВСТРОЕННОГО Qdrant (qdrant-client :memory:, не моки) + диспетчеризацию бэкенда. Всего тестов: 82 (indexer 24, gost 24, gpu 34). Плюсы Qdrant активируются только после явного переключения + миграции. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ networks:
|
||||
volumes:
|
||||
es_prod_data:
|
||||
faiss_index_prod:
|
||||
qdrant_prod_data:
|
||||
|
||||
x-app-env: &app-env
|
||||
env_file: .env
|
||||
@@ -49,6 +50,21 @@ services:
|
||||
retries: 10
|
||||
start_period: 60s
|
||||
|
||||
# Qdrant — альтернативный векторный бэкенд (снимает SPOF файлового FAISS).
|
||||
# Опционален: поднимается только с профилем и активируется VECTOR_BACKEND=qdrant.
|
||||
# docker compose -f docker-compose.prod.yml --profile qdrant up -d qdrant
|
||||
# docker compose -f docker-compose.prod.yml exec worker-gpu python -m app.migrate_faiss_to_qdrant
|
||||
# Тег сервера при необходимости поднять до версии клиента (qdrant-client 1.19).
|
||||
qdrant:
|
||||
image: qdrant/qdrant:v1.12.4
|
||||
container_name: antiplagiator-qdrant
|
||||
profiles: ["qdrant"]
|
||||
volumes:
|
||||
- qdrant_prod_data:/qdrant/storage
|
||||
networks:
|
||||
- antiplagiator
|
||||
restart: unless-stopped
|
||||
|
||||
# ─── Приложение ────────────────────────────────────────────────────────────
|
||||
# RabbitMQ вынесен на отдельный сервер 192.168.20.82 (см. RABBITMQ_URL в .env)
|
||||
api:
|
||||
|
||||
Reference in New Issue
Block a user