Spaces:
Sleeping
Sleeping
Commit ·
9d0c7d0
1
Parent(s): 1c5dbef
замена на облегченную модель
Browse files- README.md +2 -2
- embedding-service/Dockerfile +11 -8
- embedding-service/main.py +9 -2
- embedding-service/requirements-prod.txt +13 -0
- embedding-service/requirements.txt +2 -1
- render.yaml +5 -3
README.md
CHANGED
|
@@ -7,8 +7,8 @@
|
|
| 7 |
### API Документация (Swagger)
|
| 8 |
FastAPI автоматически генерирует интерактивную документацию:
|
| 9 |
|
| 10 |
-
- **Swagger UI**: `http://localhost:8082/docs` (локально) или `https://
|
| 11 |
-
- **ReDoc**: `http://localhost:8082/redoc`
|
| 12 |
- **OpenAPI Schema**: `http://localhost:8082/openapi.json`
|
| 13 |
|
| 14 |
В Swagger UI можно:
|
|
|
|
| 7 |
### API Документация (Swagger)
|
| 8 |
FastAPI автоматически генерирует интерактивную документацию:
|
| 9 |
|
| 10 |
+
- **Swagger UI**: `http://localhost:8082/docs` (локально) или `https://matching-uebb.onrender.com/docs`
|
| 11 |
+
- **ReDoc**: `http://localhost:8082/redoc` (локально) или `https://matching-uebb.onrender.com/redoc`
|
| 12 |
- **OpenAPI Schema**: `http://localhost:8082/openapi.json`
|
| 13 |
|
| 14 |
В Swagger UI можно:
|
embedding-service/Dockerfile
CHANGED
|
@@ -2,19 +2,22 @@ FROM python:3.11-slim
|
|
| 2 |
|
| 3 |
WORKDIR /app
|
| 4 |
|
| 5 |
-
#
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
# Copy application
|
| 10 |
COPY main.py .
|
| 11 |
|
| 12 |
-
# Pre-download model during build (faster cold starts)
|
| 13 |
-
RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')"
|
| 14 |
-
|
| 15 |
# Expose port
|
| 16 |
EXPOSE 8082
|
| 17 |
|
| 18 |
-
# Run with uvicorn
|
| 19 |
-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8082"]
|
| 20 |
|
|
|
|
| 2 |
|
| 3 |
WORKDIR /app
|
| 4 |
|
| 5 |
+
# Устанавливаем переменные окружения для оптимизации
|
| 6 |
+
ENV PYTHONUNBUFFERED=1
|
| 7 |
+
ENV TRANSFORMERS_CACHE=/tmp/transformers_cache
|
| 8 |
+
ENV SENTENCE_TRANSFORMERS_HOME=/tmp/sentence_transformers
|
| 9 |
+
ENV PIP_NO_CACHE_DIR=1
|
| 10 |
+
|
| 11 |
+
# Install dependencies (используем production requirements)
|
| 12 |
+
COPY requirements-prod.txt .
|
| 13 |
+
RUN pip install --no-cache-dir -r requirements-prod.txt
|
| 14 |
|
| 15 |
# Copy application
|
| 16 |
COPY main.py .
|
| 17 |
|
|
|
|
|
|
|
|
|
|
| 18 |
# Expose port
|
| 19 |
EXPOSE 8082
|
| 20 |
|
| 21 |
+
# Run with uvicorn (ограничиваем workers для экономии памяти)
|
| 22 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8082", "--workers", "1"]
|
| 23 |
|
embedding-service/main.py
CHANGED
|
@@ -19,7 +19,7 @@ from dotenv import load_dotenv
|
|
| 19 |
load_dotenv()
|
| 20 |
|
| 21 |
# Конфигурация
|
| 22 |
-
MODEL_NAME = os.getenv("EMBEDDING_MODEL", "sentence-transformers/paraphrase-multilingual-MiniLM-
|
| 23 |
EMBEDDING_DIMENSIONS = int(os.getenv("EMBEDDING_DIMENSIONS", "384"))
|
| 24 |
|
| 25 |
# Глобальная модель (загружается при старте)
|
|
@@ -38,7 +38,14 @@ async def lifespan(app: FastAPI):
|
|
| 38 |
"""Загрузка модели при старте приложения."""
|
| 39 |
global model
|
| 40 |
print(f"Loading embedding model: {MODEL_NAME}")
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
print(f"Model loaded successfully. Embedding dimensions: {model.get_sentence_embedding_dimension()}")
|
| 43 |
yield
|
| 44 |
# Cleanup
|
|
|
|
| 19 |
load_dotenv()
|
| 20 |
|
| 21 |
# Конфигурация
|
| 22 |
+
MODEL_NAME = os.getenv("EMBEDDING_MODEL", "sentence-transformers/paraphrase-multilingual-MiniLM-L6-v2")
|
| 23 |
EMBEDDING_DIMENSIONS = int(os.getenv("EMBEDDING_DIMENSIONS", "384"))
|
| 24 |
|
| 25 |
# Глобальная модель (загружается при старте)
|
|
|
|
| 38 |
"""Загрузка модели при старте приложения."""
|
| 39 |
global model
|
| 40 |
print(f"Loading embedding model: {MODEL_NAME}")
|
| 41 |
+
# Оптимизация для минимального потребления памяти
|
| 42 |
+
model = SentenceTransformer(MODEL_NAME, device='cpu')
|
| 43 |
+
# Используем half precision для экономии памяти (если доступно)
|
| 44 |
+
try:
|
| 45 |
+
model.half()
|
| 46 |
+
print("Model converted to half precision (float16)")
|
| 47 |
+
except Exception as e:
|
| 48 |
+
print(f"Could not convert to half precision: {e}")
|
| 49 |
print(f"Model loaded successfully. Embedding dimensions: {model.get_sentence_embedding_dimension()}")
|
| 50 |
yield
|
| 51 |
# Cleanup
|
embedding-service/requirements-prod.txt
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Production requirements - оптимизировано для минимального потребления памяти
|
| 2 |
+
fastapi==0.104.1
|
| 3 |
+
uvicorn[standard]==0.24.0
|
| 4 |
+
sentence-transformers==2.2.2
|
| 5 |
+
numpy==1.24.4
|
| 6 |
+
pydantic==2.5.3
|
| 7 |
+
python-dotenv==1.0.0
|
| 8 |
+
|
| 9 |
+
# PyTorch CPU-only версия (значительно меньше памяти)
|
| 10 |
+
--extra-index-url https://download.pytorch.org/whl/cpu
|
| 11 |
+
torch==2.1.0+cpu
|
| 12 |
+
torchvision==0.16.0+cpu
|
| 13 |
+
|
embedding-service/requirements.txt
CHANGED
|
@@ -4,5 +4,6 @@ sentence-transformers>=2.2.2
|
|
| 4 |
numpy>=1.24.0
|
| 5 |
pydantic>=2.5.0
|
| 6 |
python-dotenv>=1.0.0
|
| 7 |
-
torch>=2.0.0
|
|
|
|
| 8 |
|
|
|
|
| 4 |
numpy>=1.24.0
|
| 5 |
pydantic>=2.5.0
|
| 6 |
python-dotenv>=1.0.0
|
| 7 |
+
torch>=2.0.0,<2.2.0
|
| 8 |
+
--extra-index-url https://download.pytorch.org/whl/cpu
|
| 9 |
|
render.yaml
CHANGED
|
@@ -5,14 +5,16 @@ services:
|
|
| 5 |
region: frankfurt # или oregon для США
|
| 6 |
plan: free # бесплатный план, можно изменить на starter
|
| 7 |
rootDir: embedding-service
|
| 8 |
-
buildCommand: pip install --no-cache-dir -r requirements.txt
|
| 9 |
-
startCommand: uvicorn main:app --host 0.0.0.0 --port $PORT
|
| 10 |
healthCheckPath: /health
|
| 11 |
envVars:
|
| 12 |
- key: EMBEDDING_MODEL
|
| 13 |
-
value: sentence-transformers/paraphrase-multilingual-MiniLM-
|
| 14 |
- key: EMBEDDING_DIMENSIONS
|
| 15 |
value: 384
|
| 16 |
- key: PYTHON_VERSION
|
| 17 |
value: 3.11.0
|
|
|
|
|
|
|
| 18 |
|
|
|
|
| 5 |
region: frankfurt # или oregon для США
|
| 6 |
plan: free # бесплатный план, можно изменить на starter
|
| 7 |
rootDir: embedding-service
|
| 8 |
+
buildCommand: pip install --no-cache-dir -r requirements-prod.txt
|
| 9 |
+
startCommand: uvicorn main:app --host 0.0.0.0 --port $PORT --workers 1
|
| 10 |
healthCheckPath: /health
|
| 11 |
envVars:
|
| 12 |
- key: EMBEDDING_MODEL
|
| 13 |
+
value: sentence-transformers/paraphrase-multilingual-MiniLM-L6-v2
|
| 14 |
- key: EMBEDDING_DIMENSIONS
|
| 15 |
value: 384
|
| 16 |
- key: PYTHON_VERSION
|
| 17 |
value: 3.11.0
|
| 18 |
+
- key: TRANSFORMERS_CACHE
|
| 19 |
+
value: /tmp/transformers_cache
|
| 20 |
|