1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-06-06 14:01:28 +08:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Dong Zhou
5ac9dd7221 temporarily fix create exp conflicts for remote mlflow 2021-11-12 05:16:17 +00:00
you-n-g
7efec6bbc4 Fix private import 2021-11-08 09:52:55 +08:00
3 changed files with 28 additions and 5 deletions

View File

@@ -18,3 +18,9 @@ class LoadObjectError(QlibException):
"""Error type for Recorder when can not load object"""
pass
class ExpAlreadyExistError(Exception):
"""Experiment already exists"""
pass

View File

@@ -4,7 +4,7 @@
from urllib.parse import urlparse
import mlflow
from filelock import FileLock
from mlflow.exceptions import MlflowException
from mlflow.exceptions import MlflowException, RESOURCE_ALREADY_EXISTS, ErrorCode
from mlflow.entities import ViewType
import os, logging
from pathlib import Path
@@ -15,6 +15,7 @@ from .exp import MLflowExperiment, Experiment
from ..config import C
from .recorder import Recorder
from ..log import get_module_logger
from ..utils.exceptions import ExpAlreadyExistError
logger = get_module_logger("workflow", logging.INFO)
@@ -94,6 +95,10 @@ class ExpManager:
Returns
-------
An experiment object.
Raise
-----
ExpAlreadyExistError
"""
raise NotImplementedError(f"Please implement the `create_exp` method.")
@@ -200,7 +205,14 @@ class ExpManager:
if pr.scheme == "file":
with FileLock(os.path.join(pr.netloc, pr.path, "filelock")) as f:
return self.create_exp(experiment_name), True
return self.create_exp(experiment_name), True
# NOTE: for other schemes like http, we double check to avoid create exp conflicts
try:
return self.create_exp(experiment_name), True
except ExpAlreadyExistError:
return (
self._get_exp(experiment_id=experiment_id, experiment_name=experiment_name),
False,
)
def _get_exp(self, experiment_id=None, experiment_name=None) -> Experiment:
"""
@@ -345,10 +357,15 @@ class MLflowExpManager(ExpManager):
def create_exp(self, experiment_name: Optional[Text] = None):
assert experiment_name is not None
# init experiment
experiment_id = self.client.create_experiment(experiment_name)
try:
experiment_id = self.client.create_experiment(experiment_name)
except MlflowException as e:
if e.error_code == ErrorCode.Name(RESOURCE_ALREADY_EXISTS):
raise ExpAlreadyExistError()
raise e
experiment = MLflowExperiment(experiment_id, experiment_name, self.uri)
experiment._default_name = self._default_exp_name
return experiment
def _get_exp(self, experiment_id=None, experiment_name=None):

View File

@@ -5,7 +5,7 @@
Collector module can collect objects from everywhere and process them such as merging, grouping, averaging and so on.
"""
from libs.qlib.qlib.log import TimeInspector
from qlib.log import TimeInspector
from typing import Callable, Dict, List
from qlib.log import get_module_logger
from qlib.utils.serial import Serializable