使用 MLflow 客户端 API
在上一节中,我们启动了 MLflow 追踪服务器和 MLflow UI 的实例。在此阶段,我们将通过您在训练 ML 模型时将使用的主要机制之一:MlflowClient
,与追踪服务器进行交互。在本教程中,此客户端 API 将是您使用 MLflow 追踪功能的主要接口,使您能够:
- 启动新实验。
- 在实验中启动运行。
- 记录运行的参数、指标和标签。
- 记录与运行相关的工件,例如模型、表格、图表等。
导入依赖项
为了使用 MLflowClient API,第一步是导入必要的模块。
from mlflow import MlflowClient
from pprint import pprint
from sklearn.ensemble import RandomForestRegressor
导入这些模块后,您现在可以配置客户端并传递有关追踪服务器位置的详细信息。
配置 MLflow 追踪客户端
默认情况下,在不修改 MLFLOW_TRACKING_URI
环境变量的情况下,初始化 MlflowClient 会将您的本地存储指定为追踪服务器。这意味着您的实验、数据、模型和相关属性将存储在活动执行目录中。
就本指南而言,我们将使用文档中前面初始化过的追踪服务器,而不是使用客户端将日志记录到本地文件系统目录。
为了连接到我们在本教程上一节中创建的追踪服务器,我们需要使用启动服务器时为其分配的 URI。我们作为参数提交给 mlflow server
命令的两个组件是 host
和 port
。它们组合起来形成了我们将指定以启动客户端实例的 tracking_uri
参数。
client = MlflowClient(tracking_uri="http://127.0.0.1:8080")
我们现在有一个客户端接口到追踪服务器,既可以向追踪服务器发送数据,也可以从追踪服务器检索数据。
默认实验
在我们开始将任何内容记录到追踪服务器之前,让我们看一下启动任何 MLflow 追踪服务器时存在的一个关键功能:默认实验。
默认实验是一个占位符,用于封装所有运行信息,如果未声明显式实验。在使用 MLflow 时,您将创建新实验以组织项目、项目迭代,或将大型建模活动逻辑地分组到一个分组的分层集合中。但是,如果您在使用 MLflow 追踪功能之前忘记创建新实验,默认实验是一个备用方案,可确保在执行运行时不会丢失宝贵的追踪数据。
让我们通过使用 mlflow.client.MlflowClient.search_experiments()
API 来看看这个默认实验是什么样的。
搜索实验
我们要做的第一件事是查看服务器上与实验相关的元数据。我们可以通过使用 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()
查询中提取 name
和 lifecycle_stage
,并将这些属性提取到字典中。
default_experiment = [
{"name": experiment.name, "lifecycle_stage": experiment.lifecycle_stage}
for experiment in all_experiments
if experiment.name == "Default"
][0]
pprint(default_experiment)
{'name': 'Default', 'lifecycle_stage': 'active'}
运行它
在下一步中,我们将创建我们的第一个实验,并深入探讨可用的选项,以提供元数据信息,帮助跟踪相关实验并在实验中组织我们的运行,以便我们可以有效地比较不同参数的训练运行结果。