fioriclass commited on
Commit
ed87211
·
1 Parent(s): 1a758de

correction config et yaml

Browse files
src/base_trainer.py CHANGED
@@ -121,9 +121,12 @@ class BaseTrainer(ABC):
121
  if self.config.model.params:
122
  mlflow.log_params(self.config.model.params)
123
 
124
- # Logue aussi les hyperparamètres du classifieur s'il offre get_params()
125
- if self.classifier and hasattr(self.classifier, "get_params"):
126
- mlflow.log_params(self.classifier.get_params())
 
 
 
127
 
128
  def _prepare_input_for_fit(
129
  self, X: Union[cp.ndarray,
 
121
  if self.config.model.params:
122
  mlflow.log_params(self.config.model.params)
123
 
124
+ # Les paramètres pertinents du modèle (ceux utilisés pour l'initialiser, ex: C, kernel pour SVM)
125
+ # sont déjà loggués via self.config.model.params ci-dessus, qui est correctement
126
+ # peuplé grâce à l'interpolation Hydra dans config.yaml.
127
+ # Éviter de logger self.classifier.get_params() car cela est redondant et
128
+ # inclut des objets internes non sérialisables comme le handle RAFT/GPU,
129
+ # causant l'apparition de "<pylibraft.common.handle.Handle object ...>" dans les logs MLflow.
130
 
131
  def _prepare_input_for_fit(
132
  self, X: Union[cp.ndarray,
src/conf/config.yaml CHANGED
@@ -1,11 +1,17 @@
1
- # conf/config.yaml
2
 
3
  defaults:
4
- - model
5
- - _self_
 
 
 
 
 
6
 
7
  model:
8
- type: "svm"
 
9
 
10
  data:
11
  path: "dataset/dataset.csv"
 
1
+ # src/conf/config.yaml
2
 
3
  defaults:
4
+ - model # Charge src/conf/model.yaml (qui définit la clé 'models')
5
+ # La ligne suivante utilise l'interpolation Hydra:
6
+ # 1. ${model.type} récupère la valeur de 'type' dans la section 'model' (ex: "svm")
7
+ # 2. ${models.svm} récupère le dictionnaire sous la clé 'svm' dans la section 'models' (chargée depuis model.yaml)
8
+ # 3. 'override /model/params:' place ce dictionnaire dans la clé 'params' de la section 'model'
9
+ - override /model/params: ${models.${model.type}}
10
+ - _self_ # Applique les valeurs définies dans ce fichier en dernier
11
 
12
  model:
13
+ type: "svm" # Définit quel modèle choisir
14
+ params: {} # Cible pour l'override, sera remplacé par les params de models.svm
15
 
16
  data:
17
  path: "dataset/dataset.csv"
src/main.py CHANGED
@@ -97,11 +97,17 @@ def main(cfg: DictConfig) -> None:
97
  Args:
98
  cfg: Configuration Hydra sous forme de DictConfig
99
  """
100
- # Conversion de la configuration Hydra en configuration Pydantic
101
- config_dict = OmegaConf.to_container(cfg, resolve=True)
102
- config = Config(**config_dict)
103
-
104
- logger.info(f"Configuration chargée: {config}")
 
 
 
 
 
 
105
 
106
  # Création du trainer approprié
107
  trainer = get_trainer(config)
@@ -109,31 +115,36 @@ def main(cfg: DictConfig) -> None:
109
  # Construction des composants (vectorizer, classifier, etc.)
110
  trainer.build_components()
111
 
 
 
 
 
 
 
 
 
 
 
112
 
 
 
113
 
 
 
 
114
  mlflow_decorator = MLflowDecorator(
115
  experiment_name=config.mlflow.experiment_name,
116
  tracking_uri=config.mlflow.tracking_uri
117
  )
118
- # Appliquer le décorateur aux méthodes clés
119
- train_with_mlflow = mlflow_decorator(trainer.train)
120
- evaluate_with_mlflow = mlflow_decorator(trainer.evaluate)
121
- log_params_with_mlflow = mlflow_decorator(trainer.log_parameters_to_mlflow)
122
- optimize_if_needed_with_mlflow = mlflow_decorator(trainer.optimize_if_needed)
123
-
124
- logger.info("Vérification et lancement de l'optimisation des hyperparamètres si nécessaire (avec MLflow)...")
125
- optimize_if_needed_with_mlflow()
126
-
127
- logger.info("Lancement de l'entraînement avec MLflow...")
128
- train_with_mlflow()
129
 
130
- logger.info("Lancement de l'évaluation avec MLflow...")
131
- evaluate_with_mlflow()
132
 
133
- logger.info("Logging des paramètres avec MLflow...")
134
- log_params_with_mlflow()
 
135
 
136
- logger.info("Entraînement, évaluation et logging des paramètres terminés avec succès via MLflow.")
137
 
138
 
139
  if __name__ == "__main__":
 
97
  Args:
98
  cfg: Configuration Hydra sous forme de DictConfig
99
  """
100
+ # La configuration Hydra 'cfg' est maintenant correctement structurée grâce aux defaults dans config.yaml.
101
+ # Conversion directe en configuration Pydantic.
102
+ try:
103
+ # Convertit directement cfg en dict et l'utilise pour instancier Config
104
+ config = Config(**OmegaConf.to_container(cfg, resolve=True))
105
+ except Exception as e:
106
+ logger.error(f"Erreur lors de la validation Pydantic de la configuration: {e}")
107
+ logger.error(f"Configuration après fusion Hydra: \n{OmegaConf.to_yaml(cfg)}")
108
+ raise
109
+
110
+ logger.info(f"Configuration Pydantic finale chargée: {config}")
111
 
112
  # Création du trainer approprié
113
  trainer = get_trainer(config)
 
115
  # Construction des composants (vectorizer, classifier, etc.)
116
  trainer.build_components()
117
 
118
+ # Définir la séquence d'opérations à exécuter dans un seul run MLflow
119
+ def run_pipeline(trainer_instance):
120
+ logger.info("Vérification et lancement de l'optimisation des hyperparamètres si nécessaire...")
121
+ trainer_instance.optimize_if_needed()
122
+
123
+ logger.info("Lancement de l'entraînement...")
124
+ trainer_instance.train()
125
+
126
+ logger.info("Lancement de l'évaluation...")
127
+ trainer_instance.evaluate()
128
 
129
+ logger.info("Logging des paramètres...")
130
+ trainer_instance.log_parameters_to_mlflow()
131
 
132
+ logger.info("Pipeline complet (optimisation, entraînement, évaluation, logging) terminé.")
133
+
134
+ # Initialiser le décorateur MLflow
135
  mlflow_decorator = MLflowDecorator(
136
  experiment_name=config.mlflow.experiment_name,
137
  tracking_uri=config.mlflow.tracking_uri
138
  )
 
 
 
 
 
 
 
 
 
 
 
139
 
140
+ # Appliquer le décorateur à la fonction pipeline complète
141
+ run_pipeline_with_mlflow = mlflow_decorator(run_pipeline)
142
 
143
+ # Exécuter le pipeline complet sous un seul run MLflow
144
+ logger.info("Lancement du pipeline complet avec MLflow...")
145
+ run_pipeline_with_mlflow(trainer)
146
 
147
+ logger.info("Pipeline MLflow terminé avec succès.")
148
 
149
 
150
  if __name__ == "__main__":
src/mlflow_integration/mlflow_decorator.py CHANGED
@@ -46,7 +46,7 @@ class MLflowDecorator:
46
  """
47
  Démarre explicitement un run MLflow.
48
  """
49
- mlflow.start_run()
50
 
51
  def _log_params(self, params: Dict[str, Any]) -> None:
52
  """
 
46
  """
47
  Démarre explicitement un run MLflow.
48
  """
49
+ mlflow.start_run(log_system_metrics=True)
50
 
51
  def _log_params(self, params: Dict[str, Any]) -> None:
52
  """