qlib的工作流管理:mlflow机器学习生命周期管理平台

mlflow不是机器学习框架,而是与机器学习框架无关的机器学习过程管理平台。

它是轻量极,侵入性比较低。

我把它单独拿出来是因为qlib平台的workflow工作流是使用mlflow来管理的。

https://www.mlflow.org/

MLflow Documentation — MLflow 1.28.0 documentation

用来管理机器学习生命周期的平台,我们平常使用的sklearn和pytorch都兼容。

01 安装

pip install mlflow

依赖包还比较多,numpy, scipy, 还有整个flask技术栈,这个是给mlflow ui用的。

Installing collected packages: numpy, zipp, importlib-resources, MarkupSafe, typing-extensions, importlib-metadata, Mako, greenlet, sqlalchemy, alembic, pyyaml, pytz, pyparsing, packaging, click, pyjwt, oauthlib, charset-normalizer, idna, urllib3, certifi, requests, tabulate, six, databricks-cli, gunicorn, smmap, gitdb, gitpython, Werkzeug, itsdangerous, Jinja2, Flask, sqlparse, querystring-parser, scipy, cloudpickle, protobuf, entrypoints, websocket-client, docker, python-dateutil, pandas, prometheus-client, prometheus-flask-exporter, mlflow

02 mlflow UI

mlflow ui

打开本机的5000端口,可以看到精美的界面:

 目前还没有在运行的实验与模型。

03 hello mlflow

import os
from random import random, randint
from mlflow import log_metric, log_param, log_artifacts

if __name__ == "__main__":
    # 给参数打日志 (key-value 对), 参数1:随机整形
    log_param("param1", randint(0, 100))

    # Log a metric; metrics can be updated throughout the run
    log_metric("foo", random())
    log_metric("foo", random() + 1)
    log_metric("foo", random() + 2)

    # 当前目录下创建outputs文件夹,并写text.txt。
    if not os.path.exists("outputs"):
        os.makedirs("outputs")
    with open("outputs/test.txt", "w") as f:
        f.write("hello world2!")
    log_artifacts("outputs")

写入三种日志: 参数,metric-指标,artifacts一些输出文件。

param,metric都是key-value的形式写入。

artifacts是备份文件夹。

04 tutorial

到github上下载代码:

GitHub - mlflow/mlflow: Open source platform for the machine learning lifecycle

github如果不稳定,可以通过gitee下载:

MLflow: MLflow 是由 Apache Spark 技术团队开源的一个机器学习平台,主打开放性: 开放接口:可与任意 ML 库、算法、部署工具或编程语言一起使用

pip install mlflow[extras]

这里会安装sklearn。

 或者单独安装sklearn:

pip install scikit-learn

在examples目录下会有不少官方的例子可以学习。

# The data set used in this example is from http://archive.ics.uci.edu/ml/datasets/Wine+Quality
# P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis.
# Modeling wine preferences by data mining from physicochemical properties. In Decision Support Systems, Elsevier, 47(4):547-553, 2009.

import os
import warnings
import sys

import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet

import mlflow
import mlflow.sklearn


def eval_metrics(actual, pred):
    rmse = np.sqrt(mean_squared_error(actual, pred))
    mae = mean_absolute_error(actual, pred)
    r2 = r2_score(actual, pred)
    return rmse, mae, r2



if __name__ == "__main__":
    warnings.filterwarnings("ignore")
    np.random.seed(40)

    # Read the wine-quality csv file (make sure you're running this from the root of MLflow!)
    wine_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "wine-quality.csv")
    data = pd.read_csv(wine_path)

    # Split the data into training and test sets. (0.75, 0.25) split.
    train, test = train_test_split(data)

    # The predicted column is "quality" which is a scalar from [3, 9]
    train_x = train.drop(["quality"], axis=1)
    test_x = test.drop(["quality"], axis=1)
    train_y = train[["quality"]]
    test_y = test[["quality"]]

    alpha = float(sys.argv[1]) if len(sys.argv) > 1 else 0.5
    l1_ratio = float(sys.argv[2]) if len(sys.argv) > 2 else 0.5

    with mlflow.start_run():
        lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
        lr.fit(train_x, train_y)

        predicted_qualities = lr.predict(test_x)

        (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)

        print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio))
        print("  RMSE: %s" % rmse)
        print("  MAE: %s" % mae)
        print("  R2: %s" % r2)

        mlflow.log_param("alpha", alpha)
        mlflow.log_param("l1_ratio", l1_ratio)
        mlflow.log_metric("rmse", rmse)
        mlflow.log_metric("r2", r2)
        mlflow.log_metric("mae", mae)

        mlflow.sklearn.log_model(lr, "model")

sklearn里fit, predict之后,把参数,结果指标还是模型一并保存。

相当于帮我们管理整个实验过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值