创建实验

在上一节中,我们熟悉了 MLflow 客户端及其 search_experiments API。在我们开始创建实验并向其中添加元数据标签之前,让我们简要地看一下 MLflow UI。

在本教程的第一部分,我们从命令提示符启动了 MLflow 跟踪服务器,将主机指定为 127.0.0.1,端口指定为 8080。让我们转到用户界面,看看默认实验是什么样子的。

查看 MLflow UI

为了查看 MLflow UI,我们只需使用网络浏览器连接到 MLflow 跟踪服务器并导航至 http://127.0.0.1:8080。一旦导航到 MLflow UI 的 URL,您将看到默认实验且没有运行数据。

一个新初始化的 MLflow UI

默认的 MLflow UI

如你所见,没有记录任何运行,只有默认实验(ID 为 0)存在。这种情况不会持续太久,因为我们即将添加一个新实验。

标签与实验的注意事项

虽然 MLflow 确实提供了一个默认实验,但它主要作为在没有指定活动实验的情况下启动运行的’兜底’安全网。然而,不建议常规使用。相反,为特定运行集合创建唯一实验提供了许多优势,我们将在下面探讨。

定义独特实验的好处:

1. Enhanced Organization: Experiments allow you to group related runs, making it easier to track and compare them. This is especially helpful when managing numerous runs, as in large-scale projects.

2. Metadata Annotation: Experiments can carry metadata that aids in organizing and associating runs with larger projects.

考虑以下场景:我们正在模拟参与一个大型的需求预测项目。这个项目涉及为连锁杂货店的各个部门构建预测模型,每个部门都有众多产品。我们的重点是’生鲜’部门,该部门有几种不同的商品,每种商品都需要自己的预测模型。组织这些模型变得至关重要,以确保易于导航和比较。

何时应该定义一个实验?

创建实验的指导原则是输入数据的一致性。如果多次运行使用相同的输入数据集(即使它们使用不同的部分),它们在逻辑上属于同一个实验。对于其他层次分类,建议使用标签。

示例:

考虑以下模型的结构,映射到业务产品层次结构:

Demand Forecasting Project
Dairy
Cheese
Parmesan
Cheddar
Milk
Whole
2%
Produce
Fruit
Apples
Cherries
Vegetables
Carrots

在这里,producedairy 部门是同一个总体项目的一部分,但它们依赖于不同的数据集,并且可能会产生不同的模型指标。将这些部门分组在一起显然没有意义。

然而,可能会产生将所有产品归类在一起的诱惑。将苹果、樱桃和胡萝卜等不同物品归入单一实验可能会削弱该实验内运行比较的有效性。因此,为您的实验划定明确的界限以确保有意义的见解至关重要。

备注

虽然在这种情况下,业务产品层次结构不需要显式地捕获在标签内,但没有任何东西阻止你这样做。你可以应用的标签数量没有限制。只要使用的键在实验和运行中保持一致,以确保搜索功能正常工作,就可以应用任意数量的跟踪模型与特定业务规则之间的映射。

为了有效地应用这些边界,如下图所示,应使用标签。

标签、实验和运行关系

大型项目建模运行的有效分组

创建带有意义标签的苹果实验

# Provide an Experiment description that will appear in the UI
experiment_description = (
    "This is the grocery forecasting project. "
    "This experiment contains the produce models for apples."
)

# Provide searchable tags that define characteristics of the Runs that
# will be in this Experiment
experiment_tags = {
    "project_name": "grocery-forecasting",
    "store_dept": "produce",
    "team": "stores-ml",
    "project_quarter": "Q3-2023",
    "mlflow.note.content": experiment_description,
}

# Create the Experiment, providing a unique name
produce_apples_experiment = client.create_experiment(
    name="Apple_Models", tags=experiment_tags
)

在下一节中,我们将看看这些标签的用途,哪些标签在用户界面中可见,以及我们如何利用 tags 的力量来简化访问属于更大项目一部分的实验。