1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-09 22:10:56 +08:00

fix mlflow bug

This commit is contained in:
Young
2020-11-29 13:00:35 +00:00
parent a3983bba6b
commit a939445da3
2 changed files with 10 additions and 6 deletions

View File

@@ -2,6 +2,7 @@
# Licensed under the MIT License. # Licensed under the MIT License.
import mlflow import mlflow
from mlflow.entities import ViewType
from mlflow.exceptions import MlflowException from mlflow.exceptions import MlflowException
from pathlib import Path from pathlib import Path
from .recorder import Recorder, MLflowRecorder from .recorder import Recorder, MLflowRecorder
@@ -226,7 +227,7 @@ class MLflowExperiment(Experiment):
if recorder_name is None: if recorder_name is None:
recorder_name = self._default_rec_name recorder_name = self._default_rec_name
logger.info(f"No valid recorder found. Create a new recorder with name {recorder_name}.") logger.info(f"No valid recorder found. Create a new recorder with name {recorder_name}.")
return self.create(recorder_name), True return self.create_recorder(recorder_name), True
def _get_recorder(self, recorder_id=None, recorder_name=None): def _get_recorder(self, recorder_id=None, recorder_name=None):
""" """
@@ -241,7 +242,7 @@ class MLflowExperiment(Experiment):
run = self.client.get_run(recorder_id) run = self.client.get_run(recorder_id)
recorder = MLflowRecorder(self.id, self._uri, mlflow_run=run) recorder = MLflowRecorder(self.id, self._uri, mlflow_run=run)
return recorder return recorder
except MlflowException as e: except MlflowException:
raise ValueError("No valid recorder has been found, please make sure the input recorder id is correct.") raise ValueError("No valid recorder has been found, please make sure the input recorder id is correct.")
elif recorder_name is not None: elif recorder_name is not None:
logger.warning( logger.warning(
@@ -269,15 +270,17 @@ class MLflowExperiment(Experiment):
if recorder_id is not None: if recorder_id is not None:
self.client.delete_run(recorder_id) self.client.delete_run(recorder_id)
else: else:
recorder = self._get_recorder_by_name(recorder_name) recorder = self._get_recorder(recorder_name=recorder_name)
self.client.delete_run(recorder.id) self.client.delete_run(recorder.id)
except MlflowException as e: except MlflowException as e:
raise Exception( raise Exception(
f"Error: {e}. Something went wrong when deleting recorder. Please check if the name/id of the recorder is correct." f"Error: {e}. Something went wrong when deleting recorder. Please check if the name/id of the recorder is correct."
) )
def list_recorders(self): UNLIMITED = 50000 # FIXME: Mlflow can only list 50000 records at most!!!!!!!
runs = self.client.search_runs(self.id, run_view_type=1)[::-1]
def list_recorders(self, max_results=UNLIMITED):
runs = self.client.search_runs(self.id, run_view_type=ViewType.ACTIVE_ONLY, max_results=max_results)[::-1]
recorders = dict() recorders = dict()
for i in range(len(runs)): for i in range(len(runs)):
recorder = MLflowRecorder(self.id, self._uri, mlflow_run=runs[i]) recorder = MLflowRecorder(self.id, self._uri, mlflow_run=runs[i])

View File

@@ -3,6 +3,7 @@
import mlflow import mlflow
from mlflow.exceptions import MlflowException from mlflow.exceptions import MlflowException
from mlflow.entities import ViewType
import os import os
from pathlib import Path from pathlib import Path
from contextlib import contextmanager from contextlib import contextmanager
@@ -324,7 +325,7 @@ class MLflowExpManager(ExpManager):
def list_experiments(self): def list_experiments(self):
# retrieve all the existing experiments # retrieve all the existing experiments
exps = self.client.list_experiments(view_type=1) exps = self.client.list_experiments(view_type=ViewType.ACTIVE_ONLY)
experiments = dict() experiments = dict()
for exp in exps: for exp in exps:
experiment = MLflowExperiment(exp.experiment_id, exp.name, self.uri) experiment = MLflowExperiment(exp.experiment_id, exp.name, self.uri)