Calcifer0323 commited on
Commit
9d0c7d0
·
1 Parent(s): 1c5dbef

замена на облегченную модель

Browse files
README.md CHANGED
@@ -7,8 +7,8 @@
7
  ### API Документация (Swagger)
8
  FastAPI автоматически генерирует интерактивную документацию:
9
 
10
- - **Swagger UI**: `http://localhost:8082/docs` (локально) или `https://your-service.onrender.com/docs`
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
- # Install dependencies
6
- COPY requirements.txt .
7
- RUN pip install --no-cache-dir -r requirements.txt
 
 
 
 
 
 
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-L12-v2")
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
- model = SentenceTransformer(MODEL_NAME)
 
 
 
 
 
 
 
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 && python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')"
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-L12-v2
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