跳到主要内容

MLflow 跟踪快速入门

欢迎使用 MLflow!

本快速入门的目的是为 MLflow 跟踪最重要的核心 API 提供快速指南。具体来说,是那些能够记录、注册和加载模型以进行推理的 API。

注意

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

您将学到什么

只需几分钟,你就可以通过本快速入门学习到

  • 如何记录参数、指标和模型
  • MLflow 流式 API 的基础知识
  • 如何在记录期间注册模型
  • 如何在 MLflow UI 中导航到模型
  • 如何加载已记录的模型以进行推理
注意

如果你更喜欢查看本教程的 Jupyter Notebook 版本,请点击以下链接

查看 Notebook

步骤 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==3.1.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>")

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

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

在本节中,我们将使用 MLflow 记录模型。以下是这些步骤的快速概述

  • 加载并准备 Iris 数据集以进行建模。
  • 训练逻辑回归模型并评估其性能。
  • 准备模型超参数并计算用于记录的指标。
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)

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

# Log the model, which inherits the parameters and metric
model_info = mlflow.sklearn.log_model(
sk_model=lr,
name="iris_model",
signature=signature,
input_example=X_train,
registered_model_name="tracking-quickstart",
)

# Set a tag that we can use to remind ourselves what this model was for
mlflow.set_logged_model_tags(
model_info.model_id, {"Training Info": "Basic LR model for iris data"}
)

步骤 5 - 将模型作为 Python 函数 (pyfunc) 加载并用于推理

记录模型后,我们可以通过以下方式执行推理

  • 使用 MLflow 的 pyfunc 风格加载模型。
  • 使用加载的模型在新数据上运行预测
注意

我们使用的 iris 训练数据是 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]

此代码的输出将类似于以下内容

萼片长度 (cm)萼片宽度 (cm)花瓣长度 (cm)花瓣宽度 (cm)实际类别预测类别
6.12.84.71.211
5.73.81.70.300
7.72.66.92.322
6.02.94.51.511

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

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

打开网站后,你将看到一个类似于以下的屏幕

MLflow UI Experiment view page

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

点击我们创建的实验名称(“MLflow Quickstart”)将显示与该实验关联的运行列表。你应该会在右侧的“表格”列表视图中看到为运行生成的随机名称,而没有其他内容。

点击运行名称将带你进入运行页面,其中将显示我们已记录的详细信息。下面的元素已突出显示,以显示此数据在 UI 中的记录方式和位置。

MLflow UI Run view page

我们运行的运行视图页面

切换到实验页面中的“模型”选项卡,以查看实验下所有已记录的模型,你可以在其中看到我们刚刚创建的已记录模型(“iris_model”)的条目。

MLflow UI Experiment view page models tab

MLflow 跟踪页面的模型选项卡,显示所有已创建模型的列表

点击模型名称将带你进入“已记录模型”页面,其中包含有关已记录模型及其元数据的详细信息。

MLflow UI Model view page

我们已记录模型的模型视图页面

结论

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

如果你对更深入的教程感兴趣,请参阅MLflow 入门教程,作为提高 MLflow 知识的良好下一步!