跳到主要内容

创建实验

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

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

查看 MLflow UI

为了查看 MLflow UI,我们只需要使用 Web 浏览器连接到 MLflow 跟踪服务器并导航到 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 的强大功能来简化对属于更大项目的实验的访问。

您现在可以继续学习本教程的下一部分,或者返回到教程列表