snikhilesh commited on
Commit
6340326
·
verified ·
1 Parent(s): 060930d

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. Dockerfile +13 -10
  2. backend/model_loader.py +13 -30
  3. backend/requirements.txt +7 -9
Dockerfile CHANGED
@@ -1,29 +1,32 @@
1
- FROM python:3.10
2
 
3
  WORKDIR /app
4
 
5
- # Install system dependencies for PDF processing
6
- RUN apt-get update && apt-get install -y \
7
  tesseract-ocr \
8
  tesseract-ocr-eng \
9
  poppler-utils \
 
10
  git \
11
  && rm -rf /var/lib/apt/lists/*
12
 
13
  # Copy requirements and install Python packages
14
  COPY backend/requirements.txt requirements.txt
15
- RUN pip install --no-cache-dir -r requirements.txt
 
16
 
17
  # Copy application code
18
  COPY backend/ .
19
 
20
- # Set environment variables
21
- ENV TRANSFORMERS_CACHE=/app/.cache/huggingface
22
- ENV HF_HOME=/app/.cache/huggingface
23
- ENV PYTHONUNBUFFERED=1
 
24
 
25
- # Create cache directory
26
- RUN mkdir -p /app/.cache/huggingface
27
 
28
  EXPOSE 7860
29
 
 
1
+ FROM python:3.10-slim
2
 
3
  WORKDIR /app
4
 
5
+ # Install system dependencies for PDF processing and ML
6
+ RUN apt-get update && apt-get install -y --no-install-recommends \
7
  tesseract-ocr \
8
  tesseract-ocr-eng \
9
  poppler-utils \
10
+ libgomp1 \
11
  git \
12
  && rm -rf /var/lib/apt/lists/*
13
 
14
  # Copy requirements and install Python packages
15
  COPY backend/requirements.txt requirements.txt
16
+ RUN pip install --no-cache-dir --upgrade pip && \
17
+ pip install --no-cache-dir -r requirements.txt
18
 
19
  # Copy application code
20
  COPY backend/ .
21
 
22
+ # Set environment variables for HuggingFace and performance
23
+ ENV TRANSFORMERS_CACHE=/app/.cache/huggingface \
24
+ HF_HOME=/app/.cache/huggingface \
25
+ PYTHONUNBUFFERED=1 \
26
+ TOKENIZERS_PARALLELISM=false
27
 
28
+ # Create cache directory with proper permissions
29
+ RUN mkdir -p /app/.cache/huggingface && chmod -R 777 /app/.cache
30
 
31
  EXPOSE 7860
32
 
backend/model_loader.py CHANGED
@@ -6,25 +6,18 @@ Manages model loading, caching, and inference
6
  import os
7
  import logging
8
  from typing import Dict, Any, Optional, List
9
-
10
- # Lazy imports for ML libraries
11
- try:
12
- import torch
13
- from transformers import (
14
- AutoTokenizer,
15
- AutoModel,
16
- AutoModelForSequenceClassification,
17
- AutoModelForTokenClassification,
18
- pipeline
19
- )
20
- TRANSFORMERS_AVAILABLE = True
21
- except ImportError:
22
- TRANSFORMERS_AVAILABLE = False
23
- logger = logging.getLogger(__name__)
24
- logger.warning("Transformers not available - AI models will not load")
25
-
26
  from functools import lru_cache
27
 
 
 
 
 
 
 
 
 
 
 
28
  logger = logging.getLogger(__name__)
29
 
30
  # Get HF token from environment
@@ -38,13 +31,7 @@ class ModelLoader:
38
  """
39
 
40
  def __init__(self):
41
- if not TRANSFORMERS_AVAILABLE:
42
- logger.warning("Transformers library not available - using fallback mode")
43
- self.device = "cpu"
44
- self.loaded_models = {}
45
- self.model_configs = {}
46
- return
47
-
48
  self.device = "cuda" if torch.cuda.is_available() else "cpu"
49
  self.loaded_models = {}
50
  self.model_configs = self._get_model_configs()
@@ -117,10 +104,6 @@ class ModelLoader:
117
  """
118
  Load a model by key, with caching
119
  """
120
- if not TRANSFORMERS_AVAILABLE:
121
- logger.warning(f"Cannot load model {model_key} - transformers not available")
122
- return None
123
-
124
  try:
125
  # Check if already loaded
126
  if model_key in self.loaded_models:
@@ -266,8 +249,8 @@ class ModelLoader:
266
  self.loaded_models.clear()
267
  logger.info("Cleared all model caches")
268
 
269
- # Force garbage collection
270
- if TRANSFORMERS_AVAILABLE and torch.cuda.is_available():
271
  torch.cuda.empty_cache()
272
 
273
 
 
6
  import os
7
  import logging
8
  from typing import Dict, Any, Optional, List
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  from functools import lru_cache
10
 
11
+ # Required ML libraries - these MUST be installed
12
+ import torch
13
+ from transformers import (
14
+ AutoTokenizer,
15
+ AutoModel,
16
+ AutoModelForSequenceClassification,
17
+ AutoModelForTokenClassification,
18
+ pipeline
19
+ )
20
+
21
  logger = logging.getLogger(__name__)
22
 
23
  # Get HF token from environment
 
31
  """
32
 
33
  def __init__(self):
34
+ """Initialize the model loader with GPU support if available"""
 
 
 
 
 
 
35
  self.device = "cuda" if torch.cuda.is_available() else "cpu"
36
  self.loaded_models = {}
37
  self.model_configs = self._get_model_configs()
 
104
  """
105
  Load a model by key, with caching
106
  """
 
 
 
 
107
  try:
108
  # Check if already loaded
109
  if model_key in self.loaded_models:
 
249
  self.loaded_models.clear()
250
  logger.info("Cleared all model caches")
251
 
252
+ # Force garbage collection and clear GPU cache if available
253
+ if torch.cuda.is_available():
254
  torch.cuda.empty_cache()
255
 
256
 
backend/requirements.txt CHANGED
@@ -10,20 +10,18 @@ Pillow==10.2.0
10
  pytesseract==0.3.10
11
  PyMuPDF==1.23.8
12
 
13
- # Machine Learning - HuggingFace Models
14
- torch==2.2.0
15
- torchvision==0.17.0
16
- transformers==4.38.1
17
- accelerate==0.27.2
18
  sentencepiece==0.2.0
19
- protobuf==4.25.3
20
- safetensors==0.4.2
21
- huggingface-hub==0.21.4
22
 
23
  # Data Processing
24
  numpy==1.26.4
25
  pandas==2.2.0
26
- scikit-learn==1.4.1
27
 
28
  # Utilities
29
  requests==2.31.0
 
10
  pytesseract==0.3.10
11
  PyMuPDF==1.23.8
12
 
13
+ # Machine Learning - HuggingFace Models (optimized for Docker)
14
+ torch==2.4.0
15
+ transformers==4.45.0
16
+ accelerate==0.34.0
 
17
  sentencepiece==0.2.0
18
+ safetensors==0.4.5
19
+ huggingface-hub==0.25.0
20
+ scipy==1.14.1
21
 
22
  # Data Processing
23
  numpy==1.26.4
24
  pandas==2.2.0
 
25
 
26
  # Utilities
27
  requests==2.31.0