跳到主要内容

创建实验

在上一个部分,我们熟悉了 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

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

关于标签与实验的说明

虽然 MLflow 确实提供了一个默认实验,但它主要用作没有指定活动实验的运行的“兜底”安全网。然而,不建议常规使用。相反,为特定运行集合创建唯一的实验提供了许多优势,如下文所述。

定义唯一实验的好处

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

  2. 元数据注解:实验可以携带元数据,有助于组织和将运行与更大的项目关联起来。

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

何时应定义实验?

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

示例:

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

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

        • 切达

      • 牛奶
        • 全脂

        • 2%

    • 农产品
      • 水果
        • 苹果

        • 樱桃

      • 蔬菜
        • 胡萝卜

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

然而,可能会出现将所有农产品产品组合在一起的诱惑。将苹果、樱桃和胡萝卜等各种商品组合在一个实验下,可能会稀释该实验内运行比较的有效性。因此,划定实验的清晰界限对于确保有意义的见解至关重要。

注意

虽然本例中的业务产品层级不一定需要包含在标签中,但没有任何东西可以阻止您这样做。您可以应用的标签数量没有限制。前提是使用的键在实验和运行中保持一致,以使搜索能够正常运行,可以应用任意数量的跟踪模型与您的特定业务规则之间的映射。

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

Tags, experiments, and runs relationships

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

创建带有有意义标签的 Apples 实验

# 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 的强大功能来简化对属于更大项目的实验的访问。

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