mirror of
https://github.com/microsoft/qlib.git
synced 2026-06-06 14:01:28 +08:00
Compare commits
2 Commits
v0.8.5
...
backtest_i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ac9dd7221 | ||
|
|
7efec6bbc4 |
@@ -18,3 +18,9 @@ class LoadObjectError(QlibException):
|
||||
"""Error type for Recorder when can not load object"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class ExpAlreadyExistError(Exception):
|
||||
"""Experiment already exists"""
|
||||
|
||||
pass
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user