mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-01 18:11:18 +08:00
* update cli.py update cli.py so that one can specify exp_manager uri in "qlib_init" and "experiment_name" in *.yaml file. * black cli.py * Resolving pre-commit-hook changes
77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
import sys
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import qlib
|
|
import fire
|
|
import ruamel.yaml as yaml
|
|
from qlib.config import C
|
|
from qlib.model.trainer import task_train
|
|
|
|
|
|
def get_path_list(path):
|
|
if isinstance(path, str):
|
|
return [path]
|
|
else:
|
|
return list(path)
|
|
|
|
|
|
def sys_config(config, config_path):
|
|
"""
|
|
Configure the `sys` section
|
|
|
|
Parameters
|
|
----------
|
|
config : dict
|
|
configuration of the workflow.
|
|
config_path : str
|
|
path of the configuration
|
|
"""
|
|
sys_config = config.get("sys", {})
|
|
|
|
# abspath
|
|
for p in get_path_list(sys_config.get("path", [])):
|
|
sys.path.append(p)
|
|
|
|
# relative path to config path
|
|
for p in get_path_list(sys_config.get("rel_path", [])):
|
|
sys.path.append(str(Path(config_path).parent.resolve().absolute() / p))
|
|
|
|
|
|
# workflow handler function
|
|
def workflow(config_path, experiment_name="workflow", uri_folder="mlruns"):
|
|
"""
|
|
This is a Qlib CLI entrance.
|
|
User can run the whole Quant research workflow defined by a configure file
|
|
- the code is located here ``qlib/workflow/cli.py`
|
|
"""
|
|
with open(config_path) as fp:
|
|
config = yaml.safe_load(fp)
|
|
|
|
# config the `sys` section
|
|
sys_config(config, config_path)
|
|
|
|
if "exp_manager" in config.get("qlib_init"):
|
|
qlib.init(**config.get("qlib_init"))
|
|
else:
|
|
exp_manager = C["exp_manager"]
|
|
exp_manager["kwargs"]["uri"] = "file:" + str(Path(os.getcwd()).resolve() / uri_folder)
|
|
qlib.init(**config.get("qlib_init"), exp_manager=exp_manager)
|
|
|
|
if "experiment_name" in config:
|
|
experiment_name = config["experiment_name"]
|
|
recorder = task_train(config.get("task"), experiment_name=experiment_name)
|
|
recorder.save_objects(config=config)
|
|
|
|
|
|
# function to run workflow by config
|
|
def run():
|
|
fire.Fire(workflow)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run()
|