Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
·
1c5ef91
1
Parent(s):
fa98542
Improve read on machine stats
Browse files- 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(
|
20 |
-
"available": round(
|
21 |
-
"used": round(
|
22 |
-
"percent_used":
|
23 |
-
"percent_free": 100 -
|
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":
|
32 |
-
"available":
|
33 |
-
"used":
|
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]:
|