跳到主要内容

创建实验

在上一节中,我们熟悉了 MLflow Client 及其 search_experiments API。在深入创建实验并向其添加元数据标签之前,我们先简要了解一下 MLflow UI。

在本教程的第一部分,我们从命令提示符启动了 MLflow Tracking Server,指定主机为 127.0.0.1,端口为 8080。我们去 UI 看看默认实验(Default Experiment)是什么样的。

查看 MLflow UI

要查看 MLflow UI,我们只需使用网络浏览器连接到 MLflow Tracking Server 并导航到 http://127.0.0.1:8080。导航到 MLflow UI 的 URL 后,您将看到没有运行数据的默认实验。

A freshly initialized MLflow UI

默认的 MLflow UI

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

关于标签与实验的注意事项

虽然 MLflow 确实提供了默认实验,但它主要用作未指定活动实验就启动运行的“包罗万象”的安全网。然而,不建议日常使用。相反,为特定集合的运行创建独特的实验具有许多优点,我们将在下面探讨。

定义独特实验的好处

  1. 增强组织性:实验允许您对相关运行进行分组,从而更轻松地跟踪和比较它们。这在管理大量运行时尤其有用,例如在大型项目中。

  2. 元数据标注:实验可以携带元数据,帮助组织运行并将其与更大型的项目关联。

考虑以下场景:我们模拟参与一个大型需求预测项目。该项目涉及为连锁杂货店的各个部门构建预测模型,每个部门都有大量产品。我们这里的重点是“农产品”部门,该部门有几个不同的商品,每个商品都需要自己的预测模型。组织这些模型对于确保轻松导航和比较至关重要。

何时应该定义实验?

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

示例:

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

  • 需求预测项目
    • 乳制品
      • 奶酪
        • 帕玛森干酪

        • 切达干酪

      • 牛奶
        • 全脂

        • 2%

    • 农产品
      • 水果
        • 苹果

        • 樱桃

      • 蔬菜
        • 胡萝卜

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

然而,可能会有人想要将所有农产品分组在一起。将苹果、樱桃和胡萝卜等不同商品归入一个实验可能会稀释该实验内运行比较的有效性。因此,为您的实验划定明确的边界以确保获得有意义的见解至关重要。

注意

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

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

Tags, experiments, and runs relationships

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

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

# 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
)

在下一节中,我们将探讨这些标签的用途、它们在 UI 中的可见性,以及如何利用 `tags` 的强大功能来简化对作为大型项目一部分的实验的访问。