Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files- Dockerfile +13 -10
- backend/model_loader.py +13 -30
- 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
|
|
|
|
| 16 |
|
| 17 |
# Copy application code
|
| 18 |
COPY backend/ .
|
| 19 |
|
| 20 |
-
# Set environment variables
|
| 21 |
-
ENV TRANSFORMERS_CACHE=/app/.cache/huggingface
|
| 22 |
-
|
| 23 |
-
|
|
|
|
| 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
|
| 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
|
| 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.
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
accelerate==0.27.2
|
| 18 |
sentencepiece==0.2.0
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 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
|