跳到主要内容

使用 MLflow 客户端 API

在前一节中,我们启动了 MLflow Tracking Server 和 MLflow UI 的实例。在此阶段,我们将通过训练 ML 模型时使用的主要机制之一 MlflowClient 与 Tracking Server 进行交互。在本教程的其余部分,此客户端 API 将是您使用 MLflow 跟踪功能的主要界面,使您能够:

  • 启动新的 Experiment。
  • 在 Experiment 中启动 Runs。
  • 记录 Runs 的参数、指标和标签。
  • 记录链接到 Runs 的工件,例如模型、表格、图表等。

导入依赖项

为了使用 MLflowClient API,第一步涉及导入必要的模块。

from mlflow import MlflowClient
from pprint import pprint
from sklearn.ensemble import RandomForestRegressor

导入这些模块后,您现在可以配置客户端并转发有关跟踪服务器位置的具体信息。

配置 MLflow Tracking Client

默认情况下,除非对 MLFLOW_TRACKING_URI 环境变量进行任何修改,否则初始化 MlflowClient 会将您的本地存储指定为跟踪服务器。这意味着您的实验、数据、模型和相关属性将存储在活动执行目录中。

对于本指南,我们将使用文档前面部分初始化的跟踪服务器,而不是使用客户端记录到本地文件系统目录。

为了连接到我们在本教程前一节中创建的跟踪服务器,我们需要使用我们在启动服务器时分配给服务器的 URI。我们作为参数提交给 mlflow server 命令的两个组件是 hostport。 它们共同构成了我们将指定用于启动客户端实例的 tracking_uri 参数。

client = MlflowClient(tracking_uri="http://127.0.0.1:8080")

我们现在有了一个与跟踪服务器的客户端接口,可以向跟踪服务器发送数据并从中检索数据。

默认 Experiment

在我们向 Tracking Server 记录任何内容之前,让我们看看启动任何 MLflow Tracking Server 时存在的一个关键特性:默认 Experiment。

如果未显式声明 Experiment,则默认 Experiment 是一个占位符,用于封装所有运行信息。 在使用 MLflow 时,您将创建新的实验,以便组织项目、项目迭代或在分组的层次结构集合中以逻辑方式将大型建模活动组合在一起。 但是,如果您在使用 MLflow 跟踪功能之前忘记创建一个新的 Experiment,则默认 Experiment 是您的后备方案,以确保在执行运行时不会丢失您宝贵的跟踪数据。

让我们通过使用 mlflow.client.MlflowClient.search_experiments() API 来看看这个默认 Experiment 是什么样子。

搜索 Experiment

我们要做的第一件事是查看与服务器上的 Experiment 关联的元数据。 我们可以通过使用 mlflow.client.MlflowClient.search_experiments() API 来实现。 让我们发出一个搜索查询,看看结果是什么。

all_experiments = client.search_experiments()

print(all_experiments)
输出结果
[<Experiment: artifact_location='./mlruns/0', creation_time=None, experiment_id='0', last_update_time=None, lifecycle_stage='active', name='Default', tags={}>]

值得注意的是,search_experiments() API 的返回类型不是基本的集合结构。 相反,它是 Experiment 对象的列表。 MLflow 客户端 API 的许多返回值都返回包含与正在执行的任务关联的元数据属性的对象。 这是一个需要记住的重要方面,因为它使执行更复杂的操作序列变得更容易,这将在后面的教程中介绍。

对于返回的集合,我们可以使用推导式迭代这些对象,以访问 Default 实验的特定元数据属性。

为了熟悉从 MLflow API 返回的集合中访问元素,让我们从 search_experiments() 查询中提取 namelifecycle_stage,并将这些属性提取到 dict 中。

default_experiment = [
{"name": experiment.name, "lifecycle_stage": experiment.lifecycle_stage}
for experiment in all_experiments
if experiment.name == "Default"
][0]

pprint(default_experiment)
默认 Experiment 名称和阶段作为 dict
{'name': 'Default', 'lifecycle_stage': 'active'}

运行它

Exploring the Default Experiment

使用 MLflow Client 的 search_experiments() API 查看默认 Experiment

在下一步中,我们将创建我们的第一个实验,并深入了解可用于提供元数据信息的选项,这些信息有助于跟踪相关实验并组织实验中的运行,以便我们可以有效地比较不同参数的训练运行结果。

您现在可以继续到教程的下一节,或返回教程列表