安装MLflow

运行如下命令,安装mlflow

  1. pip install mlflow

MLflow在MacOS上工作。如果在MacOS上使用默认系统Python遇到问题,请尝试使用brew install Python通过自制程序包管理器安装Python 3。(在本例中,安装MLflow现在是pip3安装MLflow)。
要使用某些MLflow模块和功能(ML模型持久性/推理、工件存储选项等),您可能需要安装额外的库。例如,mlflow.tensorflow模块需要安装tensorflow。参见https://github.com/mlflow/mlflow/blob/master/EXTRA_DEPENDENCIES.rst了解更多细节
现在,我们建议您按照本教程进行演练,了解如何在日常工作流程中利用MLflow。

下载快速入门代码

通过git clone https://github.com/mlflow/mlflow克隆MLflow下载快速入门代码,并cd到存储库的示例子目录中。我们将使用这个工作目录来运行《快速入门》。
我们避免直接从MLflow的克隆中运行,因为这样做会导致本教程从源代码中使用MLflow,而不是从MLflow的PyPi安装中使用。

使用Tracking API

MLflow Tracking API允许您记录数据科学代码中的指标和工件(文件),并查看运行历史。你可以写一个简单的Python脚本(这个例子也包含在quickstart/mlflow_tracking.py中)来尝试它:

  1. import os
  2. from random import random, randint
  3. from mlflow import log_metric, log_param, log_artifacts
  4. if __name__ == "__main__":
  5. # Log a parameter (key-value pair)
  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. # Log an artifact (output file)
  12. if not os.path.exists("outputs"):
  13. os.makedirs("outputs")
  14. with open("outputs/test.txt", "w") as f:
  15. f.write("hello world!")
  16. log_artifacts("outputs")

查看Tracking UI

默认情况下,无论你在哪里运行你的程序,跟踪API都会将数据写入文件到本地。/mlruns目录中。然后你可以运行MLflow的Tracking UI:

  1. mlflow ui

http://localhost:5000查看。

如果在MLflow UI或错误日志中看到消息[CRITICAL] WORKER TIMEOUT,请尝试使用http://localhost:5000而不是[http://127.0.0.1:5000](http://127.0.0.1:5000)。

运行MLflow项目

MLflow允许您将代码及其依赖项打包为一个项目,该项目可以在其他数据上以可重复的方式运行。每个项目都包含它的代码和一个MLproject文件,该文件定义了它的依赖项(例如,Python环境),以及可以在项目中运行哪些命令和它们使用的参数。
您可以轻松地使用mlflow run命令运行现有的项目,该命令可以从本地目录或GitHub URI运行项目:

  1. mlflow run sklearn_elasticnet_wine -P alpha=0.5
  2. mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0

在教程中有一个示例项目,包括一个指定其依赖项的MLproject文件。如果您还没有配置跟踪服务器,项目将跟踪API数据记录在本地mlruns目录中,这样您就可以使用mlflow ui查看这些运行。

默认情况下,mlflow run使用conda安装所有依赖项。要在不使用conda的情况下运行项目,可以为mlflow运行提供——no-conda选项。在这种情况下,必须确保Python环境中已经安装了必要的依赖项。

保存和服务模型

MLflow包括通用的MLmodel格式,用于以不同风格保存来自各种工具的模型。例如,许多模型可以作为Python函数,因此MLmodel文件可以声明每个模型应该如何解释为Python函数,以便让各种工具为其提供服务。MLflow还包括用于在本地运行这些模型并将它们导出到Docker容器或商业服务平台的工具。
为了说明这个功能,mlflow.sklearn包可以将scikit-learn模型记录为MLflow产品,然后再次加载它们以便服务。在sklearn_logistic_regression/train.py中有一个训练应用程序示例,你可以按如下方式运行:

  1. python sklearn_logistic_regression/train.py

当您运行该示例时,它将为该实验输出一个MLflow运行ID。如果查看mlflow ui,还会看到运行保存了一个模型文件夹,其中包含一个MLmodel描述文件和一个pickle的scikit-learn模型。您可以将运行ID和工件目录中的模型路径(这里是“模型”)传递给各种工具。例如,MLflow为基于python的模型提供了一个简单的REST服务器:

  1. mlflow models serve -m runs:/<RUN_ID>/model

默认情况下,服务器运行在端口5000上。如果该端口已经被使用,使用-port选项指定一个不同的端口。例如:mlflow models serve -m runs://model —port 1234

启动服务器后,可以向它传递一些示例数据并查看预测结果。
下面的例子使用curl将一个json序列化的熊猫数据帧以拆分的方向发送到模型服务器。有关pyfunc模型服务器接受的输入数据格式的更多信息,请参阅MLflow部署工具文档

  1. curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:5000/invocations

返回

  1. [1, 0]

登录到远程跟踪服务器

在上面的示例中,MLflow将数据记录到它所运行的机器的本地文件系统中。要集中管理结果或跨团队共享结果,可以配置MLflow以记录到远程跟踪服务器。要访问远程跟踪服务器:

在远程机器上启动跟踪服务器

您可以通过将MLFLOW_TRACKING_URI环境变量设置为服务器的URI来登录远程跟踪服务器,或者在程序的开始添加以下内容:

  1. import mlflow
  2. mlflow.set_tracking_uri("http://YOUR-SERVER:4040")
  3. mlflow.set_experiment("my-experiment")

登录到Databricks社区版

注册Databricks Community Edition,这是一项免费服务,包含托管跟踪服务器。注意,Community Edition是用于快速试验的,而不是用于生产用例。注册后,运行databricks configure为MLflow创建一个凭据文件,并指定https://community.cloud.databricks.com作为主机。
要登录到Community Edition服务器,将MLFLOW_TRACKING_URI环境变量设置为“databricks”,或在程序的开始添加以下内容:

  1. import mlflow
  2. mlflow.set_tracking_uri("databricks")
  3. # Note: on Databricks, the experiment name passed to set_experiment must be a valid path
  4. # in the workspace, like '/Users/<your-username>/my-experiment'. See
  5. # https://docs.databricks.com/user-guide/workspace.html for more info.
  6. mlflow.set_experiment("/my-experiment")