MLflow 跟踪快速入门

欢迎来到 MLflow!

本快速入门旨在提供一个快速指南,介绍 MLflow Tracking 中最核心的 API。特别是那些用于记录、注册和加载模型以进行推理的 API。

备注

对于更深入且基于教程的方法(如果这是你的风格),请参阅 MLflow 入门 教程。不过,我们建议你首先从这里开始,因为这个快速入门使用了 MLflow 跟踪中最常见和最常用的 API,并为文档中的其他教程打下了良好的基础。

你将学到什么

只需跟随这个快速入门几分钟,你将学到:

  • 如何**记录**参数、指标和模型

  • MLflow fluent API 的基础

  • 如何在记录时**注册**模型

  • 如何在 MLflow UI 中导航到模型

  • 如何为推理 加载 一个已记录的模型

如果你想以纯笔记本格式查看此快速入门,我们提供了一个可下载和查看的仅笔记本版本的快速入门:

步骤 1 - 获取 MLflow

MLflow 可以在 PyPI 上获取。

安装稳定版本

如果你还没有在系统上安装它,你可以通过以下方式安装:

pip install mlflow

安装候选版本(RC)

如果你渴望测试新功能并验证即将发布的 MLflow 版本是否能在你的基础设施中良好运行,安装最新的候选版本可能会引起你的兴趣。

备注

候选发布版本不推荐实际使用,它们仅用于测试验证。

要安装给定版本的 MLflow 最新发布候选版本,请参见以下使用 MLflow 2.14.0 作为示例:

# install the latest release candidate
pip install --pre mlflow

# or install a specific rc version
pip install mlflow==2.14.0rc0

步骤 2 - 启动跟踪服务器

使用托管的 MLflow 跟踪服务器

有关使用托管 MLflow 跟踪服务器的选项的详细信息,包括如何创建带有托管 MLflow 的免费 Databricks 社区版账户,请参阅 跟踪服务器选项指南

(可选)运行本地跟踪服务器

我们将启动一个本地的 MLflow 跟踪服务器,我们将连接到该服务器以记录此快速入门的数据。从终端运行:

mlflow server --host 127.0.0.1 --port 8080

备注

你可以选择任何你喜欢的端口,前提是它尚未被使用。

设置跟踪服务器URI(如果不使用Databricks托管的MLflow跟踪服务器)

如果你使用的是非Databricks提供的托管MLflow跟踪服务器,或者你正在运行一个本地跟踪服务器,请确保使用以下方式设置跟踪服务器的uri:

import mlflow

mlflow.set_tracking_uri(uri="http://<host>:<port>")

如果在您的笔记本或运行时环境中未设置此项,运行记录将被记录到您的本地文件系统中。

步骤 3 - 训练模型并准备用于记录的元数据

在本节中,我们将使用 MLflow 记录一个模型。步骤的快速概述如下:

  • 加载并准备鸢尾花数据集以进行建模。

  • 训练一个逻辑回归模型并评估其性能。

  • 准备模型超参数并计算用于记录的指标。

import mlflow
from mlflow.models import infer_signature

import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score


# Load the Iris dataset
X, y = datasets.load_iris(return_X_y=True)

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Define the model hyperparameters
params = {
    "solver": "lbfgs",
    "max_iter": 1000,
    "multi_class": "auto",
    "random_state": 8888,
}

# Train the model
lr = LogisticRegression(**params)
lr.fit(X_train, y_train)

# Predict on the test set
y_pred = lr.predict(X_test)

# Calculate metrics
accuracy = accuracy_score(y_test, y_pred)

步骤 4 - 将模型及其元数据记录到 MLflow

在下一步中,我们将使用我们训练的模型、为模型拟合指定的超参数,以及通过评估模型在测试数据上的性能计算出的损失指标,记录到MLflow中。

我们将采取的步骤是:

  • 启动一个 MLflow 运行 上下文,以开始一个新的运行,我们将在此运行中记录模型和元数据。

  • 记录 模型 参数 和性能 指标

  • 标记 运行以便于轻松检索。

  • 注册 模型到 MLflow 模型注册中心,同时 **记录**(保存)模型。

备注

虽然可以将整个代码包裹在 start_run 块中是有效的,但这**不推荐**。如果模型训练或其他与MLflow无关的操作出现问题,将会创建一个空记录或部分记录的运行,这将需要手动清理无效的运行。最好将训练执行保持在运行上下文块之外,以确保可记录内容(参数、指标、工件和模型)在记录之前完全实现。

# Set our tracking server uri for logging
mlflow.set_tracking_uri(uri="http://127.0.0.1:8080")

# Create a new MLflow Experiment
mlflow.set_experiment("MLflow Quickstart")

# Start an MLflow run
with mlflow.start_run():
    # Log the hyperparameters
    mlflow.log_params(params)

    # Log the loss metric
    mlflow.log_metric("accuracy", accuracy)

    # Set a tag that we can use to remind ourselves what this run was for
    mlflow.set_tag("Training Info", "Basic LR model for iris data")

    # Infer the model signature
    signature = infer_signature(X_train, lr.predict(X_train))

    # Log the model
    model_info = mlflow.sklearn.log_model(
        sk_model=lr,
        artifact_path="iris_model",
        signature=signature,
        input_example=X_train,
        registered_model_name="tracking-quickstart",
    )

步骤 5 - 将模型加载为 Python 函数 (pyfunc) 并使用它进行推理

在记录模型之后,我们可以通过以下方式进行推理:

  • 加载 使用 MLflow 的 pyfunc 风格模型。

  • 使用加载的模型在新数据上运行 预测

备注

我们使用的鸢尾花训练数据是一个 numpy 数组结构。然而,我们也可以将 Pandas DataFrame 提交给 predict 方法,如下所示。

# Load the model back for predictions as a generic Python Function model
loaded_model = mlflow.pyfunc.load_model(model_info.model_uri)

predictions = loaded_model.predict(X_test)

iris_feature_names = datasets.load_iris().feature_names

result = pd.DataFrame(X_test, columns=iris_feature_names)
result["actual_class"] = y_test
result["predicted_class"] = predictions

result[:4]

这段代码的输出将会是这样的:

萼片长度 (厘米)

萼片宽度 (厘米)

花瓣长度 (厘米)

花瓣宽度 (厘米)

实际类

预测类别

6.1

2.8

4.7

1.2

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

5.7

3.8

1.7

0.3

0

0

7.7

2.6

6.9

2.3

2

2

6.0

2.9

4.5

1.5

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

步骤 6 - 在 MLflow UI 中查看运行

为了查看我们运行的结果,我们可以导航到 MLflow UI。由于我们已经启动了位于 http://localhost:8080 的跟踪服务器,我们只需在浏览器中导航到该 URL。

打开网站时,您将看到一个类似于以下的屏幕:

MLflow UI 实验视图页面

主 MLflow 跟踪页面,显示已创建的实验

点击我们创建的实验名称(“MLflow 快速入门”),将会显示与该实验关联的运行列表。你应该会看到一个为运行生成的随机名称,并且在右侧的 Table 列表视图中不会显示其他内容。

点击运行名称将带你到运行页面,那里会显示我们记录的详细信息。下面的元素已被突出显示,以展示这些数据在用户界面中的记录方式和位置。

MLflow UI 运行视图页面

我们的运行视图页面

结论

恭喜你完成了 MLflow Tracking 快速入门!你现在应该对如何使用 MLflow Tracking API 记录模型有了基本的了解。

如果你对更深入的教程感兴趣,请参阅 开始使用 MLflow 教程,这是增加你对 MLflow 知识的一个很好的下一步!