Spaces:
Sleeping
Sleeping
File size: 1,494 Bytes
3670fc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import torch
import logging
from transformers import BertTokenizer, BertForSequenceClassification
logger = logging.getLogger(__name__)
class ModelManager:
"""Lazy loading model manager"""
_instance = None
_model = None
_tokenizer = None
_device = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
@property
def model(self):
if self._model is None:
self._load_model()
return self._model
@property
def tokenizer(self):
if self._tokenizer is None:
self._load_model()
return self._tokenizer
@property
def device(self):
if self._device is None:
self._device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
return self._device
def _load_model(self):
"""Load model and tokenizer"""
try:
self._device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
self._tokenizer = BertTokenizer.from_pretrained("entropy25/sentimentanalysis")
self._model = BertForSequenceClassification.from_pretrained("entropy25/sentimentanalysis")
self._model.to(self._device)
logger.info(f"Model loaded on {self._device}")
except Exception as e:
logger.error(f"Model loading failed: {e}")
raise |