alexfremont commited on
Commit
1c5ef91
·
1 Parent(s): fa98542

Improve read on machine stats

Browse files
Files changed (1) hide show
  1. utils/system_monitor.py +54 -10
utils/system_monitor.py CHANGED
@@ -6,21 +6,65 @@ logger = logging.getLogger(__name__)
6
 
7
  def get_memory_usage() -> Dict[str, Any]:
8
  """Récupère les informations sur l'utilisation de la mémoire système.
 
9
 
10
  Returns:
11
  Dictionnaire contenant les informations de mémoire en Mo et pourcentages
12
  """
13
  try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  # Récupérer les informations de mémoire virtuelle
15
  virtual_memory = psutil.virtual_memory()
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  # Convertir les bytes en Mo pour être plus lisible
18
  memory_info = {
19
- "total": round(virtual_memory.total / (1024 * 1024), 2), # Mo
20
- "available": round(virtual_memory.available / (1024 * 1024), 2), # Mo
21
- "used": round(virtual_memory.used / (1024 * 1024), 2), # Mo
22
- "percent_used": virtual_memory.percent, # %
23
- "percent_free": 100 - virtual_memory.percent # %
24
  }
25
 
26
  return memory_info
@@ -28,11 +72,11 @@ def get_memory_usage() -> Dict[str, Any]:
28
  logger.error(f"Failed to get memory usage: {e}")
29
  return {
30
  "error": f"Failed to get memory usage: {e}",
31
- "total": 0,
32
- "available": 0,
33
- "used": 0,
34
- "percent_used": 0,
35
- "percent_free": 0
36
  }
37
 
38
  def get_loaded_models_memory(model_pipelines: Dict[str, Any]) -> Dict[str, Any]:
 
6
 
7
  def get_memory_usage() -> Dict[str, Any]:
8
  """Récupère les informations sur l'utilisation de la mémoire système.
9
+ Optimisé pour les environnements conteneurisés (Docker/Hugging Face Spaces).
10
 
11
  Returns:
12
  Dictionnaire contenant les informations de mémoire en Mo et pourcentages
13
  """
14
  try:
15
+ # Vérifier d'abord si nous sommes dans un conteneur Docker avec des limites cgroup
16
+ container_limit = None
17
+ try:
18
+ # Essayer de lire la limite de mémoire du cgroup (disponible dans les conteneurs)
19
+ with open('/sys/fs/cgroup/memory/memory.limit_in_bytes', 'r') as f:
20
+ container_limit = int(f.read().strip())
21
+ # Si c'est proche de la valeur maximale d'un entier 64-bit, alors c'est illimité
22
+ if container_limit > 2**60: # Une valeur très proche de la max
23
+ container_limit = None
24
+ except (IOError, FileNotFoundError):
25
+ # Essayer le chemin cgroup v2
26
+ try:
27
+ with open('/sys/fs/cgroup/memory.max', 'r') as f:
28
+ content = f.read().strip()
29
+ if content != 'max':
30
+ container_limit = int(content)
31
+ except (IOError, FileNotFoundError):
32
+ # Pas de limite cgroup lisible
33
+ pass
34
+
35
  # Récupérer les informations de mémoire virtuelle
36
  virtual_memory = psutil.virtual_memory()
37
 
38
+ # Déterminer la mémoire totale - utiliser la limite du conteneur si disponible
39
+ total_memory = container_limit if container_limit else virtual_memory.total
40
+
41
+ # Ajuster la valeur totale pour les environnements Hugging Face si toujours anormalement haute
42
+ # Cette instance Hugging Face a 32 Go de RAM
43
+ if total_memory > 100 * (1024**3): # Si la valeur semble trop élevée (>100GB)
44
+ # Force la valeur à 32GB pour le conteneur Hugging Face
45
+ total_memory = 32 * (1024**3) # 32 GB en octets
46
+
47
+ # Calculer les valeurs avec la mémoire totale ajustée
48
+ used_memory = virtual_memory.used
49
+ available_memory = min(virtual_memory.available, total_memory - used_memory)
50
+
51
+ # Vérifier pour plus de logique
52
+ if available_memory < 0:
53
+ available_memory = 0
54
+
55
+ # Calculer les pourcentages
56
+ try:
57
+ percent_used = (used_memory / total_memory) * 100 if total_memory > 0 else 0
58
+ except ZeroDivisionError:
59
+ percent_used = 0
60
+
61
  # Convertir les bytes en Mo pour être plus lisible
62
  memory_info = {
63
+ "total": round(total_memory / (1024 * 1024), 2), # Mo
64
+ "available": round(available_memory / (1024 * 1024), 2), # Mo
65
+ "used": round(used_memory / (1024 * 1024), 2), # Mo
66
+ "percent_used": round(percent_used, 1), # %
67
+ "percent_free": round(100 - percent_used, 1) # %
68
  }
69
 
70
  return memory_info
 
72
  logger.error(f"Failed to get memory usage: {e}")
73
  return {
74
  "error": f"Failed to get memory usage: {e}",
75
+ "total": 32 * 1024, # 32 GB par défaut en Mo
76
+ "available": 16 * 1024, # 16 GB par défaut en Mo
77
+ "used": 16 * 1024, # 16 GB par défaut en Mo
78
+ "percent_used": 50.0, # %
79
+ "percent_free": 50.0 # %
80
  }
81
 
82
  def get_loaded_models_memory(model_pipelines: Dict[str, Any]) -> Dict[str, Any]: