我是靠谱客的博主 含蓄冥王星,最近开发中收集的这篇文章主要介绍Spark机器学习工具链-MLflow使用教程Spark机器学习工具链-MLflow使用教程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Spark机器学习工具链-MLflow使用教程

  • 本文翻译自 https://www.mlflow.org/docs/latest/concepts.html
  • 本文地址 https://my.oschina.net/u/2306127/blog/1825690,by openthings, 2018.06.07.

参考:

  • mlflow项目由Databricks创建。
    • 官方主页 https://www.mlflow.org/
    • 官方文档 https://www.mlflow.org/docs/latest/index.html
  • 基于Kubernetes的机器学习系统,https://my.oschina.net/u/2306127/blog/1822919
  • Kubeflow-机器学习工作流框架,https://my.oschina.net/u/2306127/blog/1807785
  • Spark机器学习工具链-MLflow,https://my.oschina.net/u/2306127/blog/1825638

什么是我们构建的?

在本教程中,我们将演示一个案例,展示数据科学家使用MLFlow端到端地构建一个线性回归模型。如何使用MLflow打包代码,其中代码训练该模型以一种可重用和重复生产的模型格式保存。最后,使用MLflow创建简单的 HTTP server,可以用来进行预测。

我们使用一个数据集来预测酒类质量,基于酒的量化指标如“fixed acidity”, “pH”, “residual sugar”, 等等。数据集来自于 UCI’s machine learning repository. [Ref]。

你首先需要?

本教程中,我们使用MLflow, conda, 和位于example/tutorial的示范代码,在 MLflow repository。下载相关代码,如下:

git clone https://github.com/databricks/mlflow

训练模型

要做的第一件事是训练一个线性回归模型,有两个hyperparameters: alpha 和 l1_ratio。

使用的代码位于 example/tutorial/train.py,如下

# 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")

在这里,我们使用pandas、numpy和 sklearn APIs 创建简单的机器学习模型。除此之外,我们使用 MLflow tracking APIs记录每一次训练的信息,如 hyperparameters alpha 和 l1_ratio 用于训练的度量,如 root mean square error,用于评估该模型。另外,我们序列化该模型model,以MLflow可以部署的格式保存。

运行代码:

python example/tutorial/train.py

试验其他的 alpha 和 l1_ratio,通过将其作为参数传入train.py,如下:

python example/tutorial/train.py <alpha> <l1_ratio>

运行后,MLflow 记录了相关信息,在目录 mlruns中。

比较模型

下一步,我们使用 MLflow UI 来比较刚才产生的模型。运行mlflow ui在同样的工作目录(包含 mlruns),在浏览器打开 http://localhost:5000。

此页面中,可以看到所产生的度量指标,如下:

_images/tutorial-compare.png

从此页面可以看到,较低的 alpha 更适合我们的模型。我们可以使用搜索快速过滤出模型。例如,查询 metrics.rmse < 0.8 将返回所有 root mean squared error 小于 0.8的。更复杂的操作,可以下载 CSV的表格,并使用喜欢的软件来分析。

打包训练代码

现在,我们有了编写好的训练代码,希望将其打包从而让其他的数据科学家可以容易地重用这个模型,或者将其放到远程服务器运行。为了打包,我们使用 MLflow Projects conventions指定代码的依赖和入口点。在 example/tutorial/MLproject 文件中,我们指定project的依赖在 Conda environment file ,名为 conda.yaml, 我们的这个项目有一个入口点,接受两个参数:alpha 和 l1_ratio。如下:

# example/tutorial/MLproject
name: tutorial
conda_env: conda.yaml
entry_points:
main:
parameters:
alpha: float
l1_ratio: {type: float, default: 0.1}
command: "python train.py {alpha} {l1_ratio}"
# example/tutorial/conda.yaml
name: tutorial
channels:
- defaults
dependencies:
- numpy=1.14.3
- pandas=0.22.0
- scikit-learn=0.19.1
- pip:
- mlflow

为了运行该项目,简单地调用 mlflow run example/tutorial -P alpha=0.42。运行命令后, MLflow将在新的conda环境中运行训练代码,并且使用在 conda.yaml中指定的依赖软件和模块。

Projects can also be run directly from Github if the repository has a MLproject file in the root. We’ve duplicated this tutorial to the https://github.com/databricks/mlflow-example repository which can be run with mlflow run git@github.com:databricks/mlflow-example.git -P alpha=0.42.

服务模型

现在,我们将 MLproject打包并且识别出最好的model,是时候使用 MLflow Models来部署这个模型了。一个MLflow Model是机器学习模型封装的标准格式,可以用于后续一系列的处理工具。例如,通过real-time serving提供 REST API 或在Spark上的批处理智能推理。

在我们的训练代码中,训练出线性回归模型后,我们启动 MLflow 中的一个函数,保存模型为运行部件。

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

为了浏览这个 artifact,我们再次使用UI。点击页面中的列表,如下。

_images/tutorial-artifact.png

在下面,我们看到对 mlflow.sklearn.log_model 的调用产生了两个文件,在/Users/mlflow/mlflow-prototype/mlruns/0/7c1a0d5c42844dcdb8f5191146925174/artifacts/model。第一个 MLmodel 是元数据文件,告诉MLflow如何载入模型。第二个文件 model.pkl 是我们训练的线性回归模型的序列化。

在这个例子中,我们演示使用 MLmodel 格式通过MLflow部署一个本地的REST server,用于进行预测。

部署上服务器,运行:

mlflow sklearn serve /Users/mlflow/mlflow-prototype/mlruns/0/7c1a0d5c42844dcdb8f5191146925174/artifacts/model -p 1234

注意:

该版本Python必须与运行mlflow sklearn的一致。否则,可能会报错: UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 1: ordinal not in range(128) or raise ValueError, "unsupported pickle protocol: %d".

预测服务调用,运行:

curl -X POST -H "Content-Type:application/json" --data '[{"fixed acidity": 6.2, "volatile acidity": 0.66, "citric acid": 0.48, "residual sugar": 1.2, "chlorides": 0.029, "free sulfur dioxide": 29, "total sulfur dioxide": 75, "density": 0.98, "pH": 3.33, "sulphates": 0.39, "alcohol": 12.8}]' http://127.0.0.1:1234/invocations
# RESPONSE
# {"predictions": [6.379428821398614]}

更多资源

感谢完成这个教程,更多的参考 MLflow Tracking、MLflow Projects、MLflow Models等内容。

转载于:https://my.oschina.net/u/2306127/blog/1825690

最后

以上就是含蓄冥王星为你收集整理的Spark机器学习工具链-MLflow使用教程Spark机器学习工具链-MLflow使用教程的全部内容,希望文章能够帮你解决Spark机器学习工具链-MLflow使用教程Spark机器学习工具链-MLflow使用教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部