alexfremont commited on
Commit
db789ea
·
1 Parent(s): 1445bc9

Add API endpoint to unload models from memory without database deletion

Browse files
Files changed (1) hide show
  1. api/management.py +40 -0
api/management.py CHANGED
@@ -76,3 +76,43 @@ async def update_single_model(model_db_id: Any):
76
  if model_db_id in model_pipelines:
77
  del model_pipelines[model_db_id] # Assurer le déchargement en cas d'erreur imprévue
78
  raise HTTPException(status_code=500, detail=f"Internal server error while updating model {model_db_id}. Model has been unloaded.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  if model_db_id in model_pipelines:
77
  del model_pipelines[model_db_id] # Assurer le déchargement en cas d'erreur imprévue
78
  raise HTTPException(status_code=500, detail=f"Internal server error while updating model {model_db_id}. Model has been unloaded.")
79
+
80
+ @router.delete("/unload_model/{model_db_id}", summary="Unload a model from memory")
81
+ async def delete_single_model(model_db_id: Any):
82
+ """Décharge un modèle de la mémoire sans le supprimer de la base de données.
83
+ Ceci permet de libérer des ressources système.
84
+
85
+ Args:
86
+ model_db_id: L'ID du modèle à décharger.
87
+
88
+ Returns:
89
+ Un message de confirmation du déchargement.
90
+
91
+ Raises:
92
+ HTTPException: Si le modèle n'est pas trouvé en mémoire.
93
+ """
94
+ logger.info(f"Request to unload model {model_db_id} from memory")
95
+
96
+ if model_db_id not in model_pipelines:
97
+ raise HTTPException(status_code=404, detail=f"Model ID {model_db_id} is not currently loaded.")
98
+
99
+ try:
100
+ # Récupérer le nom du fichier pour le logging avant de supprimer
101
+ filename = model_pipelines[model_db_id]['metadata'].get('hf_filename', 'unknown')
102
+
103
+ # Supprimer le modèle de la mémoire
104
+ del model_pipelines[model_db_id]
105
+
106
+ # Force le garbage collector pour libérer la mémoire
107
+ import gc
108
+ gc.collect()
109
+
110
+ logger.info(f"Successfully unloaded model ID {model_db_id} ({filename}) from memory")
111
+ return {"message": f"Model {model_db_id} successfully unloaded from memory"}
112
+
113
+ except Exception as e:
114
+ logger.exception(f"Error unloading model {model_db_id}: {e}")
115
+ # Si une erreur se produit pendant le déchargement, on tente quand même de supprimer
116
+ if model_db_id in model_pipelines:
117
+ del model_pipelines[model_db_id]
118
+ raise HTTPException(status_code=500, detail=f"Internal server error while unloading model {model_db_id}")