mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-02 18:40:58 +08:00
Compare commits
2 Commits
v0.9.3
...
backtest_i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ac9dd7221 | ||
|
|
7efec6bbc4 |
@@ -18,3 +18,9 @@ class LoadObjectError(QlibException):
|
|||||||
"""Error type for Recorder when can not load object"""
|
"""Error type for Recorder when can not load object"""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ExpAlreadyExistError(Exception):
|
||||||
|
"""Experiment already exists"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
import mlflow
|
import mlflow
|
||||||
from filelock import FileLock
|
from filelock import FileLock
|
||||||
from mlflow.exceptions import MlflowException
|
from mlflow.exceptions import MlflowException, RESOURCE_ALREADY_EXISTS, ErrorCode
|
||||||
from mlflow.entities import ViewType
|
from mlflow.entities import ViewType
|
||||||
import os, logging
|
import os, logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -15,6 +15,7 @@ from .exp import MLflowExperiment, Experiment
|
|||||||
from ..config import C
|
from ..config import C
|
||||||
from .recorder import Recorder
|
from .recorder import Recorder
|
||||||
from ..log import get_module_logger
|
from ..log import get_module_logger
|
||||||
|
from ..utils.exceptions import ExpAlreadyExistError
|
||||||
|
|
||||||
logger = get_module_logger("workflow", logging.INFO)
|
logger = get_module_logger("workflow", logging.INFO)
|
||||||
|
|
||||||
@@ -94,6 +95,10 @@ class ExpManager:
|
|||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
An experiment object.
|
An experiment object.
|
||||||
|
|
||||||
|
Raise
|
||||||
|
-----
|
||||||
|
ExpAlreadyExistError
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError(f"Please implement the `create_exp` method.")
|
raise NotImplementedError(f"Please implement the `create_exp` method.")
|
||||||
|
|
||||||
@@ -200,7 +205,14 @@ class ExpManager:
|
|||||||
if pr.scheme == "file":
|
if pr.scheme == "file":
|
||||||
with FileLock(os.path.join(pr.netloc, pr.path, "filelock")) as f:
|
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
|
||||||
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:
|
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):
|
def create_exp(self, experiment_name: Optional[Text] = None):
|
||||||
assert experiment_name is not None
|
assert experiment_name is not None
|
||||||
# init experiment
|
# 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 = MLflowExperiment(experiment_id, experiment_name, self.uri)
|
||||||
experiment._default_name = self._default_exp_name
|
experiment._default_name = self._default_exp_name
|
||||||
|
|
||||||
return experiment
|
return experiment
|
||||||
|
|
||||||
def _get_exp(self, experiment_id=None, experiment_name=None):
|
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.
|
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 typing import Callable, Dict, List
|
||||||
from qlib.log import get_module_logger
|
from qlib.log import get_module_logger
|
||||||
from qlib.utils.serial import Serializable
|
from qlib.utils.serial import Serializable
|
||||||
|
|||||||
Reference in New Issue
Block a user