1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-11 06:46:56 +08:00

Merge pull request #404 from Derek-Wds/main

Support start exp with given exp & recorder id
This commit is contained in:
you-n-g
2021-04-30 16:46:46 +08:00
committed by GitHub
3 changed files with 47 additions and 8 deletions

View File

@@ -23,7 +23,10 @@ class QlibRecorder:
@contextmanager @contextmanager
def start( def start(
self, self,
*,
experiment_id: Optional[Text] = None,
experiment_name: Optional[Text] = None, experiment_name: Optional[Text] = None,
recorder_id: Optional[Text] = None,
recorder_name: Optional[Text] = None, recorder_name: Optional[Text] = None,
uri: Optional[Text] = None, uri: Optional[Text] = None,
resume: bool = False, resume: bool = False,
@@ -45,8 +48,12 @@ class QlibRecorder:
Parameters Parameters
---------- ----------
experiment_id : str
id of the experiment one wants to start.
experiment_name : str experiment_name : str
name of the experiment one wants to start. name of the experiment one wants to start.
recorder_id : str
id of the recorder under the experiment one wants to start.
recorder_name : str recorder_name : str
name of the recorder under the experiment one wants to start. name of the recorder under the experiment one wants to start.
uri : str uri : str
@@ -57,7 +64,14 @@ class QlibRecorder:
resume : bool resume : bool
whether to resume the specific recorder with given name under the given experiment. whether to resume the specific recorder with given name under the given experiment.
""" """
run = self.start_exp(experiment_name, recorder_name, uri, resume) run = self.start_exp(
experiment_id=experiment_id,
experiment_name=experiment_name,
recorder_id=recorder_id,
recorder_name=recorder_name,
uri=uri,
resume=resume,
)
try: try:
yield run yield run
except Exception as e: except Exception as e:
@@ -65,7 +79,9 @@ class QlibRecorder:
raise e raise e
self.end_exp(Recorder.STATUS_FI) self.end_exp(Recorder.STATUS_FI)
def start_exp(self, experiment_name=None, recorder_name=None, uri=None, resume=False): def start_exp(
self, *, experiment_id=None, experiment_name=None, recorder_id=None, recorder_name=None, uri=None, resume=False
):
""" """
Lower level method for starting an experiment. When use this method, one should end the experiment manually Lower level method for starting an experiment. When use this method, one should end the experiment manually
and the status of the recorder may not be handled properly. Here is the example code: and the status of the recorder may not be handled properly. Here is the example code:
@@ -79,8 +95,12 @@ class QlibRecorder:
Parameters Parameters
---------- ----------
experiment_id : str
id of the experiment one wants to start.
experiment_name : str experiment_name : str
the name of the experiment to be started the name of the experiment to be started
recorder_id : str
id of the recorder under the experiment one wants to start.
recorder_name : str recorder_name : str
name of the recorder under the experiment one wants to start. name of the recorder under the experiment one wants to start.
uri : str uri : str
@@ -93,7 +113,14 @@ class QlibRecorder:
------- -------
An experiment instance being started. An experiment instance being started.
""" """
return self.exp_manager.start_exp(experiment_name, recorder_name, uri, resume) return self.exp_manager.start_exp(
experiment_id=experiment_id,
experiment_name=experiment_name,
recorder_id=recorder_id,
recorder_name=recorder_name,
uri=uri,
resume=resume,
)
def end_exp(self, recorder_status=Recorder.STATUS_FI): def end_exp(self, recorder_status=Recorder.STATUS_FI):
""" """

View File

@@ -39,12 +39,14 @@ class Experiment:
output["recorders"] = list(recorders.keys()) output["recorders"] = list(recorders.keys())
return output return output
def start(self, recorder_name=None, resume=False): def start(self, *, recorder_id=None, recorder_name=None, resume=False):
""" """
Start the experiment and set it to be active. This method will also start a new recorder. Start the experiment and set it to be active. This method will also start a new recorder.
Parameters Parameters
---------- ----------
recorder_id : str
the id of the recorder to be created.
recorder_name : str recorder_name : str
the name of the recorder to be created. the name of the recorder to be created.
resume : bool resume : bool
@@ -238,14 +240,14 @@ class MLflowExperiment(Experiment):
def __repr__(self): def __repr__(self):
return "{name}(id={id}, info={info})".format(name=self.__class__.__name__, id=self.id, info=self.info) return "{name}(id={id}, info={info})".format(name=self.__class__.__name__, id=self.id, info=self.info)
def start(self, recorder_name=None, resume=False): def start(self, *, recorder_id=None, recorder_name=None, resume=False):
logger.info(f"Experiment {self.id} starts running ...") logger.info(f"Experiment {self.id} starts running ...")
# Get or create recorder # Get or create recorder
if recorder_name is None: if recorder_name is None:
recorder_name = self._default_rec_name recorder_name = self._default_rec_name
# resume the recorder # resume the recorder
if resume: if resume:
recorder, _ = self._get_or_create_rec(recorder_name=recorder_name) recorder, _ = self._get_or_create_rec(recorder_id=recorder_id, recorder_name=recorder_name)
# create a new recorder # create a new recorder
else: else:
recorder = self.create_recorder(recorder_name) recorder = self.create_recorder(recorder_name)

View File

@@ -33,7 +33,10 @@ class ExpManager:
def start_exp( def start_exp(
self, self,
*,
experiment_id: Optional[Text] = None,
experiment_name: Optional[Text] = None, experiment_name: Optional[Text] = None,
recorder_id: Optional[Text] = None,
recorder_name: Optional[Text] = None, recorder_name: Optional[Text] = None,
uri: Optional[Text] = None, uri: Optional[Text] = None,
resume: bool = False, resume: bool = False,
@@ -45,8 +48,12 @@ class ExpManager:
Parameters Parameters
---------- ----------
experiment_id : str
id of the active experiment.
experiment_name : str experiment_name : str
name of the active experiment. name of the active experiment.
recorder_id : str
id of the recorder to be started.
recorder_name : str recorder_name : str
name of the recorder to be started. name of the recorder to be started.
uri : str uri : str
@@ -298,7 +305,10 @@ class MLflowExpManager(ExpManager):
def start_exp( def start_exp(
self, self,
*,
experiment_id: Optional[Text] = None,
experiment_name: Optional[Text] = None, experiment_name: Optional[Text] = None,
recorder_id: Optional[Text] = None,
recorder_name: Optional[Text] = None, recorder_name: Optional[Text] = None,
uri: Optional[Text] = None, uri: Optional[Text] = None,
resume: bool = False, resume: bool = False,
@@ -308,11 +318,11 @@ class MLflowExpManager(ExpManager):
# Create experiment # Create experiment
if experiment_name is None: if experiment_name is None:
experiment_name = self._default_exp_name experiment_name = self._default_exp_name
experiment, _ = self._get_or_create_exp(experiment_name=experiment_name) experiment, _ = self._get_or_create_exp(experiment_id=experiment_id, experiment_name=experiment_name)
# Set up active experiment # Set up active experiment
self.active_experiment = experiment self.active_experiment = experiment
# Start the experiment # Start the experiment
self.active_experiment.start(recorder_name, resume) self.active_experiment.start(recorder_id=recorder_id, recorder_name=recorder_name, resume=resume)
return self.active_experiment return self.active_experiment