跳到主要内容

MLflow 跟踪快速入门

欢迎使用 MLflow!

本快速入门的目的是提供一份关于 MLflow 跟踪最核心、最基本 API 的快速指南。具体来说,这些 API 支持模型的日志记录、注册和加载以进行推理。

注意

如果您的学习方式倾向于更深入的教程(如果这是您的风格),请参阅MLflow 入门教程。不过,我们建议您从本快速入门开始,因为它使用了 MLflow 跟踪中最常见和最常用的 API,可作为文档中其他教程的良好基础。

您将学到什么

只需几分钟遵循本快速入门,您将学到

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

如果您想查看本教程的 Jupyter Notebook 版本,请点击以下链接

查看 Notebook

步骤 1 - 获取 MLflow

MLflow 可通过 PyPI 获取。

安装稳定版

如果您的系统尚未安装 MLflow,您可以使用以下命令安装它:

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 相关操作无关的代码部分存在问题,将会创建一个空运行或部分记录的运行,这将需要手动清理无效运行。最好将训练执行保持在运行上下文块之外,以确保可记录的内容(参数、指标、artifact 和模型)在记录之前完全实例化。

# 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 数组结构。然而,我们也可以向 `predict` 方法提交 Pandas DataFrame,如下所示。

# 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”)将显示与该实验关联的运行列表。您应该会看到为运行生成的随机名称,并且在右侧的 `Table` 列表视图中不会显示其他内容。

点击运行名称将带您进入运行页面,其中将显示我们已记录的详细信息。下方已突出显示元素,以展示此数据在 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 的良好下一步!