• 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

    1. import os
    2. from random import random, randint
    3. from mlflow import log_metric, log_param, log_artifacts
    4. if __name__ == "__main__":
    5. # 给参数打日志 (key-value 对), 参数1:随机整形
    6. log_param("param1", randint(0, 100))
    7. # Log a metric; metrics can be updated throughout the run
    8. log_metric("foo", random())
    9. log_metric("foo", random() + 1)
    10. log_metric("foo", random() + 2)
    11. # 当前目录下创建outputs文件夹,并写text.txt。
    12. if not os.path.exists("outputs"):
    13. os.makedirs("outputs")
    14. with open("outputs/test.txt", "w") as f:
    15. f.write("hello world2!")
    16. 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目录下会有不少官方的例子可以学习。

    1. # The data set used in this example is from http://archive.ics.uci.edu/ml/datasets/Wine+Quality
    2. # P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis.
    3. # Modeling wine preferences by data mining from physicochemical properties. In Decision Support Systems, Elsevier, 47(4):547-553, 2009.
    4. import os
    5. import warnings
    6. import sys
    7. import pandas as pd
    8. import numpy as np
    9. from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
    10. from sklearn.model_selection import train_test_split
    11. from sklearn.linear_model import ElasticNet
    12. import mlflow
    13. import mlflow.sklearn
    14. def eval_metrics(actual, pred):
    15. rmse = np.sqrt(mean_squared_error(actual, pred))
    16. mae = mean_absolute_error(actual, pred)
    17. r2 = r2_score(actual, pred)
    18. return rmse, mae, r2
    19. if __name__ == "__main__":
    20. warnings.filterwarnings("ignore")
    21. np.random.seed(40)
    22. # Read the wine-quality csv file (make sure you're running this from the root of MLflow!)
    23. wine_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "wine-quality.csv")
    24. data = pd.read_csv(wine_path)
    25. # Split the data into training and test sets. (0.75, 0.25) split.
    26. train, test = train_test_split(data)
    27. # The predicted column is "quality" which is a scalar from [3, 9]
    28. train_x = train.drop(["quality"], axis=1)
    29. test_x = test.drop(["quality"], axis=1)
    30. train_y = train[["quality"]]
    31. test_y = test[["quality"]]
    32. alpha = float(sys.argv[1]) if len(sys.argv) > 1 else 0.5
    33. l1_ratio = float(sys.argv[2]) if len(sys.argv) > 2 else 0.5
    34. with mlflow.start_run():
    35. lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
    36. lr.fit(train_x, train_y)
    37. predicted_qualities = lr.predict(test_x)
    38. (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)
    39. print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio))
    40. print(" RMSE: %s" % rmse)
    41. print(" MAE: %s" % mae)
    42. print(" R2: %s" % r2)
    43. mlflow.log_param("alpha", alpha)
    44. mlflow.log_param("l1_ratio", l1_ratio)
    45. mlflow.log_metric("rmse", rmse)
    46. mlflow.log_metric("r2", r2)
    47. mlflow.log_metric("mae", mae)
    48. mlflow.sklearn.log_model(lr, "model")

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

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

  • 相关阅读:
    观测云产品更新|DCA Web 端上线;新增全局的查看器自动刷新配置;新增全局黑名单功能;新增自定义功能菜单等
    WPF使用Iconfont字符串的操作方法
    边缘计算网关
    ISE的仿真库编译步骤——基于Omapl138/TMS320C6748+FPGA核心板
    招聘丨云扩等你一起奔赴超自动化未来
    数字颠倒输出
    c++小学生入门课程(一)
    Android入门第4天-开发第一个Android
    原生Javascript(数组操作方法总结)-更新
    交互设计工具排行榜,你必须知道!
  • 原文地址:https://blog.csdn.net/weixin_38175458/article/details/126323734