Bellok commited on
Commit
e57e902
·
1 Parent(s): a10a16f
app.py CHANGED
@@ -26,12 +26,12 @@ from warbler_cda.pack_loader import PackLoader
26
  print("🚀 Initializing Warbler CDA...")
27
 
28
  # Initialize the system components
29
- print("⚙️ Creating embedding provider (ZeroGPU compatible)...")
30
  embedding_provider = EmbeddingProviderFactory.create_provider("sentence_transformer", {
31
- "num_workers": 1, # Single worker to avoid tokenizer parallelism issues
32
- "batch_size": 16, # Small batches for ZeroGPU stability
33
- "cache_dir": ".embedding_cache",
34
- "device": "cpu" # Force CPU to avoid ZeroGPU device conflicts
35
  })
36
  print(f"✅ Embedding provider: {embedding_provider.get_provider_info()['provider_id']}")
37
 
 
26
  print("🚀 Initializing Warbler CDA...")
27
 
28
  # Initialize the system components
29
+ print("⚙️ Creating embedding provider with multi-worker GPU acceleration...")
30
  embedding_provider = EmbeddingProviderFactory.create_provider("sentence_transformer", {
31
+ "num_workers": 4, # Restore multi-worker for speed (device test will handle ZeroGPU)
32
+ "batch_size": 64, # Larger batches for better throughput
33
+ "cache_dir": ".embedding_cache"
34
+ # Let device auto-detection handle ZeroGPU (will fall back to CPU if needed)
35
  })
36
  print(f"✅ Embedding provider: {embedding_provider.get_provider_info()['provider_id']}")
37
 
warbler_cda/embeddings/sentence_transformer_provider.py CHANGED
@@ -60,10 +60,25 @@ class SentenceTransformerEmbeddingProvider(EmbeddingProvider):
60
 
61
  import torch
62
 
63
- self.device = "cuda" if torch.cuda.is_available() else "cpu"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  self.model = SentenceTransformer(self.model_name, device=self.device)
65
  if self.model is not None:
66
  self.dimension = self.model.get_sentence_embedding_dimension()
 
67
 
68
  except ImportError:
69
  self.model = None
 
60
 
61
  import torch
62
 
63
+ # Handle ZeroGPU and other GPU environments
64
+ has_cuda = torch.cuda.is_available()
65
+ if has_cuda:
66
+ try:
67
+ # Test if we can actually use CUDA without conflicts
68
+ test_tensor = torch.tensor([1.0], device="cuda")
69
+ test_tensor.cpu() # Test device transfer
70
+ self.device = "cuda"
71
+ except RuntimeError as e:
72
+ # ZeroGPU or other GPU conflicts - fall back to CPU
73
+ print(f"CUDA available but has conflicts ({e}), using CPU")
74
+ self.device = "cpu"
75
+ else:
76
+ self.device = "cpu"
77
+
78
  self.model = SentenceTransformer(self.model_name, device=self.device)
79
  if self.model is not None:
80
  self.dimension = self.model.get_sentence_embedding_dimension()
81
+ print(f"Initialized {self.model_name} on {self.device}")
82
 
83
  except ImportError:
84
  self.model = None