跳到主要内容

创建实验

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

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

查看 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. 元数据注释:实验可以携带元数据,有助于组织运行并将其与大型项目关联起来。

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

何时应定义实验?

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

示例:

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

  • 需求预测项目
    • 乳制品
      • 奶酪
        • 帕尔马干酪

        • 切达奶酪

      • 牛奶
        • 全脂

        • 2%

    • 农产品
      • 水果
        • 苹果

        • 樱桃

      • 蔬菜
        • 胡萝卜

在这里,农产品乳制品部门属于同一个总括项目,但它们依赖于不同的数据集,并且可能会产生不同的模型指标。将这些部门组合在一起肯定没有意义。

然而,将所有农产品组合在一起的诱惑可能会出现。将苹果、樱桃和胡萝卜等不同项目分组到一个实验中可能会稀释该实验中运行比较的有效性。因此,为您的实验划定清晰的界限以确保有意义的见解至关重要。

注意

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

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

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 的强大功能来简化对作为大型项目一部分的实验的访问。

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