Spaces:
Sleeping
Sleeping
File size: 7,691 Bytes
66a0674 | 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | # Makefile pour la génération et gestion du modèle ML
.PHONY: help model train validate clean info backup restore test
# Variables
PYTHON = python
MODEL_FILE = model.pkl
MODEL_INFO = model_info.json
BACKUP_DIR = backup
TIMESTAMP = $(shell date +%Y%m%d_%H%M%S)
# Couleurs pour l'affichage
GREEN = \033[0;32m
YELLOW = \033[0;33m
RED = \033[0;31m
NC = \033[0m
# Help - Affiche l'aide
help: ## Affiche cette aide
@echo "$(GREEN)Makefile pour la gestion du modele ML$(NC)"
@echo ""
@echo "$(YELLOW)Generation du modele:$(NC)"
@echo " $(YELLOW)model $(NC) Alias pour train"
@echo " $(YELLOW)train $(NC) Genere le modele ML via model.py"
@echo " $(YELLOW)retrain $(NC) Force la regeneration du modele"
@echo " $(YELLOW)setup $(NC) Configuration et generation complete"
@echo ""
@echo "$(YELLOW)Validation et tests:$(NC)"
@echo " $(YELLOW)validate $(NC) Valide l'existence et l'integrite du modele"
@echo " $(YELLOW)test $(NC) Lance les tests de validation du modele"
@echo " $(YELLOW)test-prediction $(NC) Test une prediction simple"
@echo ""
@echo "$(YELLOW)Gestion et maintenance:$(NC)"
@echo " $(YELLOW)info $(NC) Affiche les informations detaillees du modele"
@echo " $(YELLOW)model-size $(NC) Affiche la taille des fichiers du modele"
@echo " $(YELLOW)backup $(NC) Sauvegarde le modele actuel"
@echo " $(YELLOW)restore $(NC) Restaure le dernier modele sauvegarde"
@echo " $(YELLOW)list-backups $(NC) Liste toutes les sauvegardes disponibles"
@echo " $(YELLOW)clean $(NC) Supprime les fichiers du modele actuel"
@echo " $(YELLOW)clean-all $(NC) Supprime tout (modele + sauvegardes)"
@echo ""
@echo "$(YELLOW)Environnement et verifications:$(NC)"
@echo " $(YELLOW)check-deps $(NC) Verifie les dependances Python"
@echo " $(YELLOW)check-db $(NC) Verifie la connexion a la base de donnees"
# Génération du modèle
model: train ## Alias pour train
train: ## Génère le modèle ML via model.py
@echo "$(GREEN)Generation du modele de Machine Learning...$(NC)"
@if [ ! -f "$(MODEL_FILE)" ]; then \
echo "$(YELLOW)Aucun modele existant trouve. Generation d'un nouveau modele...$(NC)"; \
else \
echo "$(YELLOW)Un modele existant a ete trouve. Sauvegarde avant regeneration...$(NC)"; \
$(MAKE) backup; \
fi
$(PYTHON) model.py
@echo "$(GREEN)✅ Modele genere avec succes!$(NC)"
@if [ -f "$(MODEL_INFO)" ]; then \
echo "$(YELLOW)Informations du modele:$(NC)"; \
cat $(MODEL_INFO) | head -10; \
fi
retrain: clean train ## Force la régénération du modèle
# Validation et tests
validate: ## Valide l'existence et l'intégrité du modèle
@echo "$(GREEN)Validation du modele...$(NC)"
@if [ ! -f "$(MODEL_FILE)" ]; then \
echo "$(RED)❌ Fichier modele manquant: $(MODEL_FILE)$(NC)"; \
exit 1; \
else \
echo "$(GREEN)✅ Fichier modele trouve: $(MODEL_FILE)$(NC)"; \
fi
@if [ ! -f "$(MODEL_INFO)" ]; then \
echo "$(RED)❌ Fichier d'information manquant: $(MODEL_INFO)$(NC)"; \
exit 1; \
else \
echo "$(GREEN)✅ Fichier d'information trouve: $(MODEL_INFO)$(NC)"; \
fi
@echo "$(GREEN)✅ Modele valide avec succes!$(NC)"
test: validate ## Lance les tests de validation du modèle
@echo "$(GREEN)Test de chargement du modele...$(NC)"
@$(PYTHON) -c "import joblib; model = joblib.load('$(MODEL_FILE)'); print('✅ Modele charge avec succes'); print(f'Type: {type(model).__name__}'); import json; info = json.load(open('$(MODEL_INFO)')); print(f'Accuracy: {info.get(\"accuracy\", \"N/A\")}'); print(f'Features: {len(info.get(\"features\", []))} variables')"
test-prediction: validate ## Test une prédiction simple
@echo "$(GREEN)Test de prediction...$(NC)"
@$(PYTHON) -c "import joblib; import json; import numpy as np; model = joblib.load('$(MODEL_FILE)'); info = json.load(open('$(MODEL_INFO)')); features = info['features']; test_data = np.random.random((1, len(features))); pred = model.predict(test_data); print(f'✅ Prediction test reussie: {pred[0]:.4f}')"
# Gestion et maintenance
info: ## Affiche les informations détaillées du modèle
@echo "$(GREEN)Informations du modele:$(NC)"
@if [ -f "$(MODEL_INFO)" ]; then \
cat $(MODEL_INFO); \
else \
echo "$(RED)❌ Fichier d'information non trouve$(NC)"; \
exit 1; \
fi
model-size: ## Affiche la taille des fichiers du modèle
@echo "$(GREEN)Taille des fichiers:$(NC)"
@if [ -f "$(MODEL_FILE)" ]; then \
ls -lh $(MODEL_FILE) | awk '{print "Modele: " $$5 " (" $$9 ")"}'; \
fi
@if [ -f "$(MODEL_INFO)" ]; then \
ls -lh $(MODEL_INFO) | awk '{print "Info: " $$5 " (" $$9 ")"}'; \
fi
backup: ## Sauvegarde le modèle actuel
@echo "$(GREEN)Sauvegarde du modele...$(NC)"
@mkdir -p $(BACKUP_DIR)
@if [ -f "$(MODEL_FILE)" ]; then \
cp $(MODEL_FILE) $(BACKUP_DIR)/model_$(TIMESTAMP).pkl; \
echo "$(GREEN)✅ Modele sauvegarde: $(BACKUP_DIR)/model_$(TIMESTAMP).pkl$(NC)"; \
fi
@if [ -f "$(MODEL_INFO)" ]; then \
cp $(MODEL_INFO) $(BACKUP_DIR)/model_info_$(TIMESTAMP).json; \
echo "$(GREEN)✅ Info sauvegardee: $(BACKUP_DIR)/model_info_$(TIMESTAMP).json$(NC)"; \
fi
restore: ## Restaure le dernier modèle sauvegardé
@echo "$(GREEN)Restauration du dernier modele...$(NC)"
@if [ ! -d "$(BACKUP_DIR)" ]; then \
echo "$(RED)❌ Aucune sauvegarde trouvee$(NC)"; \
exit 1; \
fi
@LATEST_MODEL=$$(ls -t $(BACKUP_DIR)/model_*.pkl 2>/dev/null | head -1); \
LATEST_INFO=$$(ls -t $(BACKUP_DIR)/model_info_*.json 2>/dev/null | head -1); \
if [ -n "$$LATEST_MODEL" ]; then \
cp "$$LATEST_MODEL" $(MODEL_FILE); \
echo "$(GREEN)✅ Modele restaure: $$LATEST_MODEL$(NC)"; \
fi; \
if [ -n "$$LATEST_INFO" ]; then \
cp "$$LATEST_INFO" $(MODEL_INFO); \
echo "$(GREEN)✅ Info restauree: $$LATEST_INFO$(NC)"; \
fi
list-backups: ## Liste toutes les sauvegardes disponibles
@echo "$(GREEN)Sauvegardes disponibles:$(NC)"
@if [ -d "$(BACKUP_DIR)" ]; then \
ls -la $(BACKUP_DIR)/ | grep -E '\.(pkl|json)$$' | awk '{print $$9 " (" $$5 " bytes, " $$6 " " $$7 " " $$8 ")"}' || echo "$(YELLOW)Aucune sauvegarde trouvee$(NC)"; \
else \
echo "$(YELLOW)Aucun dossier de sauvegarde$(NC)"; \
fi
clean: ## Supprime les fichiers du modèle actuel
@echo "$(GREEN)Nettoyage des fichiers du modele...$(NC)"
@if [ -f "$(MODEL_FILE)" ]; then \
rm $(MODEL_FILE); \
echo "$(GREEN)✅ $(MODEL_FILE) supprime$(NC)"; \
fi
@if [ -f "$(MODEL_INFO)" ]; then \
rm $(MODEL_INFO); \
echo "$(GREEN)✅ $(MODEL_INFO) supprime$(NC)"; \
fi
clean-all: clean ## Supprime tout (modèle + sauvegardes)
@echo "$(GREEN)Nettoyage complet...$(NC)"
@if [ -d "$(BACKUP_DIR)" ]; then \
rm -rf $(BACKUP_DIR); \
echo "$(GREEN)✅ Dossier de sauvegarde supprime$(NC)"; \
fi
# Environnement et dépendances
check-deps: ## Vérifie les dépendances Python
@echo "$(GREEN)Verification des dependances...$(NC)"
@$(PYTHON) -c "import sklearn, pandas, numpy, joblib; print('✅ Toutes les dependances sont disponibles')" || (echo "$(RED)❌ Dependances manquantes$(NC)" && exit 1)
check-db: ## Vérifie la connexion à la base de données
@echo "$(GREEN)Verification de la connexion DB...$(NC)"
@$(PYTHON) -c "from sqlalchemy import create_engine; import os; engine = create_engine(os.getenv('DATABASE_URL', 'postgresql://user:password@localhost/dbname')); engine.connect(); print('✅ Connexion DB reussie')" || (echo "$(RED)❌ Erreur de connexion DB$(NC)" && exit 1)
# Workflow complet
setup: check-deps check-db train ## Configuration et génération complète
@echo "$(GREEN)✅ Setup complet termine!$(NC)"
# Commande par défaut
.DEFAULT_GOAL := help |