共用方式為

使用 MLflow 运行查看训练结果

本文介绍了如何使用 MLflow 运行来查看与分析模型训练试验的结果,以及如何管理和组织运行。 有关 MLflow 试验的详细信息,请参阅使用 MLflow 试验组织训练运行

一个 MLflow 运行对应于模型代码的单次执行。 每个运行记录的信息包括启动运行的笔记本、运行创建的任何模型、保存为键值对的模型参数和指标、运行元数据标签,以及运行创建的任何项目或输出文件。

所有 MLflow 运行都会记录到活动试验中。 如果尚未将某个试验显式设置为活动试验,则会将运行记录到笔记本试验。

查看运行详细信息

可以从运行的试验详细信息页访问运行,或直接从创建运行的笔记本访问运行。

试验详细信息页的运行表中,单击运行名称。

从试验详细信息页,打开试验运行。

在笔记本的“试验运行”边栏中,单击运行名称。

从笔记本打开运行试验。

运行屏幕显示运行 ID、用于运行的参数、运行生成的指标,以及有关运行的详细信息,包括指向源笔记本的链接。 从运行中保存的项目可在“项目”选项卡中使用。

查看运行

用于预测的代码片段

如果从运行中记录模型,该模型就会出现在“项目”选项卡中,并附有代码片段,说明如何加载和使用该模型在 Spark 和 Pandas DataFrames 上进行预测。 在 MLflow 3 中,模型现在是其独特的第一类对象,而不是作为运行项目进行记录。 有关详细信息,请参阅 MLflow 3 入门

预测代码片段

查看用于运行的笔记本

若要查看创建了运行的笔记本的版本,请执行以下操作:

  • 在试验详细信息页上,单击“源”列中的链接。
  • 在运行页上,单击“源”旁边的链接。
  • 在笔记本的“试验运行”边栏中,单击试该验运行框中的“笔记本”图标 。

与该运行关联的笔记本版本会在主窗口中显示,并有一个高亮条显示运行日期和时间。

向运行中添加标记

标签是键值对,你可以创建这些键值对,并在以后使用这些键值对来搜索运行

  1. 运行页上的“详细信息”表中,单击“标记”旁边的“添加标记”。

    “详细信息”页上的“标记”按钮

  2. 添加/编辑标记对话将打开。 在“键”字段中,输入键的名称,然后单击“添加标记”

    添加标记。

  3. 在“值”字段中,输入变量的值。

  4. 单击加号,以保存刚输入的键值对。

    加号可用于保存键值对。

  5. 重复步骤 2 至步骤 4,以添加其他标记。

  6. 完成后,单击“保存标记”

编辑或删除运行的标记

  1. 运行页上“详细信息”表中,单击“铅笔”图标。现有标记旁边。

    标记表

  2. 添加/编辑标记对话将打开。

    1. 要删除标记,请单击该标记上的 X。

      删除标记。

    2. 要编辑标记,从下拉菜单中选择键,然后在“值”字段中编辑值。 单击加号来保存更改。

      编辑标记。

  3. 完成后,单击“保存标记”

重现运行的软件环境

通过单击“运行”页右侧的“重现运行”可重现运行所需的确切软件环境。 以下对话框随即出现:

“重现运行”对话框

单击“确认”使用默认设置时:

  • 笔记本将克隆到对话框中显示的位置。
  • 如果原始群集仍存在,则克隆的笔记本将附加到原始群集并启动该群集。
  • 如果原始群集不再存在,则会创建并启动与原始群集配置相同(包括任何已安装的库)的新群集。 笔记本将附加到新群集。

可为克隆的笔记本选择不同的位置,并检查群集配置和已安装的库:

  • 若要选择其他文件夹保存克隆的笔记本,请单击“编辑文件夹”。
  • 若要查看群集规格,请单击“查看规格”。若要仅克隆笔记本而不克隆群集,请取消选中此选项。
  • 如果原始群集不再存在,可通过单击“查看库”来查看原始群集上安装的库。 如果原始群集仍然存在,则此部分显示为灰色。

重命名运行

若要重命名运行,请单击 kebab 菜单 Kebab 菜单图标。 在运行页面右上角( “权限 ”按钮旁)并选择“ 重命名”。

从运行页重命名运行。

选择要显示的列

要控制试验详细信息页上运行表中显示的列,请单击“列”,然后从下拉菜单中进行选择。

筛选运行

可根据参数或指标值在试验详细信息页上的表中搜索运行。 你还可以按标记搜索运行。

  • 若要搜索与包含参数和指标值的表达式匹配的运行,请在搜索字段中输入查询并按 Enter。 查询的部分语法示例如下:

    metrics.r2 > 0.3

    params.elasticNetParam = 0.5

    params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3

    MIN(metrics.rmse) <= 1

    MAX(metrics.memUsage) > 0.9

    LATEST(metrics.memUsage) = 0 AND MIN(metrics.rmse) <= 1

    默认情况下,指标值是根据上次记录的值进行筛选的。 使用 MINMAX 可以分别根据最小或最大指标值搜索运行。 只有在 2024 年 8 月之后记录的运行才具有最小和最大指标值。

  • 要按标记搜索运行,请按以下格式输入标记:tags.<key>="<value>"。 字符串值必须用引号引起来,如下所示。

    tags.estimator_name="RandomForestRegressor"

    tags.color="blue" AND tags.size=5

    键和值都可以包含空格。 如果键包含空格,则必须将其括在反引号中,如下所示。

    tags.`my custom tag` = "my value"
    

还可根据运行状态(活动或已删除)筛选运行、创建运行的时间以及使用哪些数据集。 为此,请分别在“创建时间”、“状态”和“数据集”下拉菜单中做出选择。

筛选运行

下载运行

可从试验详细信息页下载运行,如下所示:

  1. 单击 “Kebab”菜单图标。 打开烤肉串菜单。

    “试验”页上,包含下载选项的 kebab 菜单。

  2. 要下载 CSV 格式的文件,其中包含显示的所有运行(最多 100 个),请选择“下载”<n>“运行”。 MLflow 会创建并下载一个文件,每行包含一个运行,每个运行包含以下字段:

    Start Time, Duration, Run ID, Name, Source Type, Source Name, User, Status, <parameter1>, <parameter2>, ..., <metric1>, <metric2>, ...
    
  3. 如果要下载超过 100 个运行,或想要以编程方式下载运行,请选择“下载所有运行”。 此时会打开一个对话框,其中显示可在笔记本中复制或打开的代码片段。 在笔记本单元格中运行此代码后,从单元格输出选择“下载所有行”

删除运行

可按照以下步骤从试验详细信息页中删除运行:

  1. 在试验中,通过单击运行左侧的复选框来选择一个或多个运行。

  2. 单击 “删除”

  3. 如果运行为父运行,则确定是否也要删除后代运行。 默认情况下选择此选项。

  4. 单击“删除”进行确认。 删除的运行保存 30 天。 若要显示删除的运行,请选择“状态”字段中的“已删除”。

基于创建时间批量删除运行

可以使用 Python 批量删除在某个 UNIX 时间戳处或之前创建的试验的运行。 使用 Databricks Runtime 14.1 或更高版本,可以调用 mlflow.delete_runs API 来删除运行并返回已删除的运行数。

以下是 mlflow.delete_runs 参数:

  • experiment_id:包含要删除的运行的试验 ID。
  • max_timestamp_millis:自删除运行的 UNIX 纪元以来的最大创建时间戳(以毫秒为单位)。 仅删除在此时间戳或之前创建的运行。
  • max_runs:可选。 一个正整数,表示要删除的最大运行数。 max_runs 允许的最大值为 10000。 如果未指定,则 max_runs 默认为 10000。
import mlflow

# Replace <experiment_id>, <max_timestamp_ms>, and <max_runs> with your values.
runs_deleted = mlflow.delete_runs(
  experiment_id=<experiment_id>,
  max_timestamp_millis=<max_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_deleted = mlflow.delete_runs(
  experiment_id="4183847697906956",
  max_timestamp_millis=1711990504000,
  max_runs=10
)

使用 Databricks Runtime 13.3 LTS 或更早版本,可以在 Azure Databricks Notebook 中运行以下客户端代码。

from typing import Optional

def delete_runs(experiment_id: str,
                max_timestamp_millis: int,
                max_runs: Optional[int] = None) -> int:
    """
    Bulk delete runs in an experiment that were created prior to or at the specified timestamp.
    Deletes at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to delete.
    :param max_timestamp_millis: The maximum creation timestamp in milliseconds
                                 since the UNIX epoch for deleting runs. Only runs
                                 created prior to or at this timestamp are deleted.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to delete. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs deleted.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request

    json_body = {"experiment_id": experiment_id, "max_timestamp_millis": max_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/delete-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_deleted"]

有关基于创建时间删除运行的参数和返回值规范,请参阅 Azure Databricks 试验 API 文档。

还原运行

可从 UI 还原以前删除的运行,如下所示:

  1. 在“试验”页上的“状态”字段中选择“已删除”以显示已删除的运行。

  2. 通过单击运行左侧的复选框来选择一个或多个运行。

  3. 请单击“还原”。

  4. 单击“还原”进行确认。 在“状态”字段中选择“活动”时,现在会显示还原的运行。

基于删除时间批量还原运行

还可以使用 Python 批量还原在某个 UNIX 时间戳或之后删除的试验的运行。 使用 Databricks Runtime 14.1 或更高版本,可以调用 mlflow.restore_runs API 来还原运行并返回已还原的运行数。

以下是 mlflow.restore_runs 参数:

  • experiment_id:包含要还原的运行的试验 ID。
  • min_timestamp_millis:自还原运行的 UNIX 纪元以来的最小删除时间戳(以毫秒为单位)。 仅还原在此时间戳或之后删除的运行。
  • max_runs:可选。 一个正整数,表示要还原的最大运行数。 max_runs 允许的最大值为 10000。 如果未指定,则 max_runs 默认为 10000。
import mlflow

# Replace <experiment_id>, <min_timestamp_ms>, and <max_runs> with your values.
runs_restored = mlflow.restore_runs(
  experiment_id=<experiment_id>,
  min_timestamp_millis=<min_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_restored = mlflow.restore_runs(
  experiment_id="4183847697906956",
  min_timestamp_millis=1711990504000,
  max_runs=10
)

使用 Databricks Runtime 13.3 LTS 或更早版本,可以在 Azure Databricks Notebook 中运行以下客户端代码。

from typing import Optional

def restore_runs(experiment_id: str,
                 min_timestamp_millis: int,
                 max_runs: Optional[int] = None) -> int:
    """
    Bulk restore runs in an experiment that were deleted at or after the specified timestamp.
    Restores at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to restore.
    :param min_timestamp_millis: The minimum deletion timestamp in milliseconds
                                 since the UNIX epoch for restoring runs. Only runs
                                 deleted at or after this timestamp are restored.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to restore. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs restored.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request
    json_body = {"experiment_id": experiment_id, "min_timestamp_millis": min_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/restore-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_restored"]

有关基于删除时间还原运行的参数和返回值规范,请参阅 Azure Databricks 试验 API 文档。

比较运行

可以比较单个试验或多个试验中的运行。 “ 比较运行 ”页以表格格式显示有关所选运行的信息。 还可以创建运行结果的可视化效果,以及运行信息、运行参数和指标的表。 请参阅 使用图形和图表比较 MLflow 运行和模型

“参数”和“指标”表显示所有选定运行中的运行参数和指标。 这些表中的列由紧靠其上的“运行详细信息”表标识。 为方便起见,可以通过切换 仅显示差异按钮 来隐藏所有选定运行中相同的参数和指标。

比较运行页表

比较单个试验中的运行

  1. 试验详细信息页上,通过单击运行左侧的复选框来选择两个或更多个运行,或者通过选中列顶部的框来选择所有运行。

  2. 单击“比较”。 此时将出现“比较 <N> 个运行”屏幕。

比较多个试验中的运行

  1. 试验页上,通过单击试验名称左侧的框来选择要比较的试验。

  2. 单击“比较 (n) 个”(n 是选择的试验数)。 此时将出现一个屏幕,其中显示了所选试验中的所有运行。

  3. 通过单击运行左侧的复选框来选择两个或更多个运行,或者通过选中列顶部的框来选择所有运行。

  4. 单击“比较”。 此时将出现“比较 <N> 个运行”屏幕。

在工作区之间复制运行

若要将 MLflow 运行导入或导出 Databricks 工作区,可以使用社区驱动的开放源代码项目 MLflow Export-Import