diff --git a/qlib/model/base.py b/qlib/model/base.py index 12caf5f73..493981133 100644 --- a/qlib/model/base.py +++ b/qlib/model/base.py @@ -97,7 +97,7 @@ class ModelFT(Model): # Finetune model based on previous trained model with R.start(experiment_name="finetune model"): - recorder = R.get_recorder(rid, experiment_name="init models") + recorder = R.get_recorder(recorder_id=rid, experiment_name="init models") model = recorder.load_object("init_model") model.finetune(dataset, num_boost_round=10) diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index 63f63fb56..a14f60c01 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -333,7 +333,9 @@ class QlibRecorder: """ self.exp_manager.set_uri(uri) - def get_recorder(self, recorder_id=None, recorder_name=None, experiment_name=None) -> Recorder: + def get_recorder( + self, *, recorder_id=None, recorder_name=None, experiment_id=None, experiment_name=None + ) -> Recorder: """ Method for retrieving a recorder. @@ -386,7 +388,7 @@ class QlibRecorder: ------- A recorder instance. """ - return self.get_exp(experiment_name=experiment_name, create=False).get_recorder( + return self.get_exp(experiment_name=experiment_name, experiment_id=experiment_id, create=False).get_recorder( recorder_id, recorder_name, create=False, start=False ) diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index 7e39d3a32..84cc6a13a 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -352,15 +352,8 @@ class MLflowExpManager(ExpManager): ), "Please input at least one of experiment/recorder id or name before retrieving experiment/recorder." if experiment_id is not None: try: - experiment_id = int(experiment_id) - except ValueError as e: - msg = "The `experiment_id` for mlflow backend must be `int`" - logger.error(msg) - # We have to raise type error here - # - The error looks like type error - # - Value Error will be catched - raise TypeError(msg) - try: + # NOTE: the mlflow's experiment_id must be str type... + # https://www.mlflow.org/docs/latest/python_api/mlflow.tracking.html#mlflow.tracking.MlflowClient.get_experiment exp = self.client.get_experiment(experiment_id) if exp.lifecycle_stage.upper() == "DELETED": raise MlflowException("No valid experiment has been found.") diff --git a/qlib/workflow/task/manage.py b/qlib/workflow/task/manage.py index 01f79b1b4..41e243b43 100644 --- a/qlib/workflow/task/manage.py +++ b/qlib/workflow/task/manage.py @@ -272,7 +272,7 @@ class TaskManager: task = self.fetch_task(query=query, status=status) try: yield task - except Exception: + except (Exception, KeyboardInterrupt): # KeyboardInterrupt is not a subclass of Exception if task is not None: self.logger.info("Returning task before raising error") self.return_task(task, status=status) # return task as the original status