跟踪机器学习训练运行

可以通过 MLflow 跟踪组件记录与训练机器学习模型相关的源属性、参数、指标、标记和项目。 若要开始使用 MLflow,请尝试 MLflow 快速入门教程之一。

MLflow 跟踪基于两个概念,即试验和运行:

  • MLflow 试验是组织的基本构成单位,并且是对 MLflow 运行的访问控制;所有 MLflow 运行都属于一个试验。 可以通过试验来可视化、搜索和比较运行,以及下载运行项目和元数据以便在其他工具中进行分析。
  • 一个 MLflow 运行对应于模型代码的单次执行。 每个运行都记录以下信息:
    • :启动了此运行的笔记本的名称,或者此运行的项目名称和入口点。
    • 版本:如果从笔记本运行,则为笔记本修订版本;如果从 MLflow 项目运行,则为 Git 提交哈希。
    • 开始与结束时间:运行的开始时间和结束时间。
    • 参数:保存为键值对的模型参数。 键和值都是字符串。
    • 指标:保存为键值对的模型评估指标。 值为数字。 每个指标都可以在整个运行过程中更新(例如,用于跟踪模型的损失函数如何聚合),而 MLflow 会记录指标的历史记录并将其可视化。
    • 标记:运行保存为键值对的元数据。 可以在运行过程中和运行完成后更新标记。 键和值都是字符串。
    • 项目:任意格式的输出文件。 例如,可以将图像、模型(例如,pickle 格式的 scikit-learn 模型)和数据文件(例如,Parquet 文件)记录为项目。

MLflow 跟踪 API 可记录模型运行中的参数、指标、标记和项目。 跟踪 API 可与 MLflow 跟踪服务器通信。 使用 Databricks 时,Databricks 托管的跟踪服务器会记录数据。 托管的 MLflow 跟踪服务器具有 Python API、Java API 和 R API。

若要了解如何控制对试验的访问,请参阅 MLflow 试验权限更改试验权限

注意

MLflow 安装在 Databricks Runtime ML 群集上。 若要在 Databricks Runtime 群集上使用 MLflow,必须安装 mlflow 库。 请参阅在群集上安装库,获取相关说明。 MLflow 要安装的特定包有:

  • 对于 Python,请选择“库源”PyPI,并在“包”字段内输入
  • 对于 R,请选择“库源”CRAN,并在“包”字段内输入
  • 对于 Scala,请安装以下两个包:
    • 选择“库源”Maven,并在“坐标”字段内输入
    • 选择“库源”PyPI,并在“包”字段内输入

本文内容:

在何处记录 MLflow 运行

所有 MLflow 运行都会记录到活动试验中,可以使用以下任一方法对其进行设置:

如果未设置活动试验,则会将运行记录到笔记本试验

若要将试验结果记录到工作区(非正在运行该试验的工作区)中远程托管的 MLflow 跟踪服务器,使用 mlflow.set_tracking_uri() 设置用于引用远程工作区的跟踪 URI,并使用 mlflow.set_experiment() 设置远程工作区中的试验的路径。

mlflow.set_tracking_uri(<uri_of_remote_workspace>)
mlflow.set_experiment("path to experiment in remote workspace")

示例笔记本

此笔记本演示了如何将运行记录到笔记本试验和工作区试验。 只有在笔记本中启动的 MLflow 运行才能记录到笔记本试验中。 从任何笔记本启动的或从 API 启动的 MLflow 运行可以记录到工作区试验中。 若要了解如何查看已记录的运行,请参阅查看笔记本试验查看工作区试验

将 MLflow 运行记录到笔记本

获取笔记本

可以使用 MLflow Python、Java 或 Scala 以及 R API 来启动运行并记录运行数据。 有关详细信息,请参阅 MLflow 快速入门笔记本

试验

有两种类型的试验:工作区和笔记本。

  • 可通过 Databricks 机器学习 UI 或 MLflow API 创建工作区试验。 工作区试验不与任何笔记本关联,任何笔记本都可以使用试验 ID 或试验名称将运行记录到这些试验中。
  • 笔记本试验与特定笔记本相关联。 如果在使用 mlflow.start_run() 启动运行时没有活动的试验,Azure Databricks 会自动创建笔记本试验。

若要查看工作区中的所有试验,请在边栏中单击 “试验”图标“试验”。 仅当你是机器学习角色用户时,才会显示此图标。 单击表中任意试验的名称以显示其试验页:

查看试验

试验页列出与试验关联的所有运行。 单击表中试验的“开始时间”,可打开与试验关联的任何运行的运行页。 使用“源”列,可访问创建运行的笔记本版本。 还可按指标或参数设置搜索和筛选运行。

创建试验

创建工作区试验

此部分介绍如何使用 Azure Databricks UI 创建工作区试验。 还可以将 MLflow APIDatabricks Terraform 提供程序databricks_mlflow_experiment 一起使用。

有关将运行记录到工作区试验的说明,请参阅示例笔记本

  1. 单击边栏中的 工作区图标“工作区”。

  2. 转到要在其中创建试验的文件夹。

  3. 执行下列操作之一:

    • 在任何文件夹旁边,单击文本右侧的 菜单下拉列表,然后选择“创建”>“MLflow 试验”。

      创建试验

    • 在工作区或用户文件夹中,单击 向下插入符号t,然后选择“创建”>“MLflow 试验”。

  4. 在“创建 MLflow 试验”对话框中,输入试验的名称,还可以选择输入项目位置。 如果未指定项目位置,则项目会存储在 dbfs:/databricks/mlflow-tracking/<experiment-id> 中。

    Azure Databricks 支持 DBFS 和 Azure Blob 存储项目位置。

    若要将项目存储在 Azure Blob 存储中,请指定 wasbs://<container>@<storage-account>.blob.core.windows.net/<path> 格式的 URI。 存储在 Azure Blob 存储中的项目不会显示在 MLflow UI 中;必须使用 Blob 存储客户端下载它们。

    注意

    如果将一个项目存储在 DBFS 以外的位置,则该项目不会显示在 MLflow UI 中。 存储在 DBFS 以外位置的模型无法在模型注册表中进行注册。

  5. 单击“创建”。 将显示一个空试验。

还可以使用 Databricks Terraform 提供程序databricks_mlflow_experiment 创建试验。

创建笔记本试验

在笔记本中使用 mlflow.start_run() 命令时,运行会将指标和参数记录到活动试验中。 如果没有活动的试验,Azure Databricks 会创建笔记本试验。 笔记本试验的名称和 ID 与相应笔记本的名称和 ID 相同。 笔记本 ID 是笔记本 URL 和 ID 末尾的数字标识符。

有关将运行记录到笔记本试验的说明,请参阅示例笔记本

注意

如果使用 API(例如,Python 中的 MlflowClient.tracking.delete_experiment())删除笔记本试验,则笔记本本身会被移到回收站文件夹中。

查看试验

你有权访问的每个试验都将显示在试验页上。 可以在此页中查看任何试验。 单击试验名称,以显示试验页

访问试验页的其他方法:

  • 可以从工作区菜单访问工作区试验的试验页。
  • 可以从笔记本访问笔记本试验的试验页。

查看工作区试验

  1. 单击边栏中的 工作区图标“工作区”。
  2. 转到包含该试验的文件夹。
  3. 单击试验名称。

查看笔记本试验

在笔记本工具栏中,单击“试验”图标 “试验”图标

笔记本工具栏

此时会出现“试验运行”边栏,其中显示与笔记本试验有关的每个运行的摘要,包括运行参数和指标。 边栏顶部的信息是笔记本最近一次记录运行的试验(笔记本试验或工作区试验)的名称。

查看运行参数和指标

从边栏中,可导航到“试验”页面,也可直接导航到运行。

  • 若要查看试验,请单击最右边“试验运行”旁的 外部链接
  • 若要显示运行,请单击运行日期和时间旁边的 外部链接

管理试验

可以在试验页试验页或工作区菜单中重命名、删除或管理所拥有的试验的权限。

从实验页重命名实验

重要

此功能目前以公共预览版提供。

若要从试验页试验页重命名试验,请单击 三个按钮图标并选择“重命名”。

从工作区菜单重命名试验

  1. 单击边栏中的 工作区图标“工作区”。
  2. 转到包含该试验的文件夹。
  3. 单击试验右侧的 菜单下拉列表,然后选择“重命名”。

复制试验名称

若要复制试验名称,请在试验页顶部单击 “复制”图标。 可在 MLflow 命令 set_experiment 中使用此名称来设置活动 MLflow 试验。

试验名称图标

还可从笔记本中的试验边栏复制试验名称。

删除笔记本试验

笔记本试验是笔记本的一部分,不能单独删除。 如果删除笔记本,则也会删除相关的笔记本试验。 如果使用 API(例如,Python 中的 MlflowClient.tracking.delete_experiment())或 UI 删除笔记本试验,则也会删除笔记本。

从工作区菜单中删除工作区试验

  1. 单击边栏中的 工作区图标“工作区”。
  2. 转到包含该试验的文件夹。
  3. 单击试验右侧的 菜单下拉列表,然后选择“移至回收站”。

从试验页中删除工作区或笔记本试验

重要

此功能目前以公共预览版提供。

若要从试验页试验页删除试验,请单击 三个按钮图标并选择“删除”。

在删除笔记本实验时,该笔记本也会被删除。

更改试验权限

若要从试验页更改试验权限,请单击“共享”。

“试验页面权限”按钮

可以从试验页更改你拥有的试验的权限。 在“操作”列单击 三按钮图标,然后选择“权限”。

有关试验权限的详细信息,请参阅 MLflow 试验权限

在工作区之间复制试验

若要在工作区之间迁移 MLflow 试验,可以使用社区驱动的开放源代码项目 MLflow Export-Import

借助这些工具,你可以:

  • 与同一或另一跟踪服务器中的其他数据科学家共享和协作。 例如,可以将另一个用户的试验克隆到你的工作区。
  • 将 MLflow 试验和运行从本地跟踪服务器复制到 Databricks 工作区。
  • 将任务关键型试验和模型备份到另一个 Databricks 工作区。

运行

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

查看运行

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

试验页的运行表中,单击运行的开始时间。

在笔记本的“试验运行”边栏中,单击运行的日期和时间旁边的 外部链接 图标。

运行屏幕显示了用于运行的参数、运行所生成的指标以及任何标记或注释。 若要显示此运行的“注释”、“参数”、“指标”或“标记”,请单击标签左侧的 向右箭头

你还可以在此屏幕中访问从运行中保存的项目。

查看运行

用于预测的代码片段

如果从运行中记录模型,则该模型会显示在本页的“项目”部分。 若要显示代码片段,以便说明如何加载并使用模型来对 Spark 和 pandas DataFrames 进行预测,请单击模型名称。

预测代码片段

查看用于运行的笔记本或 Git 项目

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

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

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

如果已从 Git 项目以远程方式启动了运行,则请单击“Git 提交”字段中的链接,以打开运行中所用项目的特定版本。 “源”字段中的链接可打开用于运行的 Git 项目的主分支。

向运行中添加标记

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

  1. 运行页面中,单击 标记图标(如果尚未打开)。 此时将显示标记表。

    标记表

  2. 单击“名称”和“值”字段,然后键入标签的键和值。

  3. 单击“添加”。

    添加标记

编辑或删除运行的标记

若要编辑或删除现有标记,请使用“操作”列中的图标。

标记操作

重现运行的软件环境

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

“重现运行”对话框

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

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

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

  • 若要选择其他文件夹保存克隆的笔记本,请单击“编辑文件夹”。
  • 若要查看群集规格,请单击“查看规格”。若要仅克隆笔记本而不克隆群集,请取消选中此选项。
  • 若要查看原始群集上安装的库,请单击“查看库”。 如果无需考虑安装的库是否与原始群集上的库相同,请取消选中此选项。

管理运行

重命名运行

若要重命名运行,请单击运行页右上角的 三个按钮图标,然后选择“重命名”。

筛选运行

可基于参数或指标值搜索运行。 你还可以按标记搜索运行。

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

    metrics.r2 > 0.3

    params.elasticNetParam = 0.5

    params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3

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

    tags.estimator_name="RandomForestRegressor"

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

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

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

还可根据运行状态(“活动”或“已删除”)以及模型版本是否与运行关联来筛选运行。 要执行此操作,请单击搜索框右侧的“筛选器”。 随即将显示“状态”和“链接模型”下拉菜单 。 从下拉菜单进行选择。

筛选运行

比较运行

可以比较单个试验或多个试验中的运行。 “比较运行”页以图形和表格格式显示有关所选运行的信息。

比较单个试验中的运行
  1. 试验页上,通过单击运行左侧的复选框来选择两个或更多个运行,或者通过选中列顶部的框来选择所有运行。
  2. 单击“比较”。 此时将出现“比较 <N> 个运行”屏幕。
比较多个试验中的运行
  1. 试验页上,通过单击试验名称左侧的框来选择要比较的试验。
  2. 单击“比较 (n) 个”(n 是选择的试验数)。 此时将出现一个屏幕,其中显示了所选试验中的所有运行。
  3. 通过单击运行左侧的复选框来选择两个或更多个运行,或者通过选中列顶部的框来选择所有运行。
  4. 单击“比较”。 此时将出现“比较 <N> 个运行”屏幕。
使用“比较运行”页

“比较运行”页显示运行结果的可视化效果,以及运行信息、运行参数和指标的表。

若要创建可视化效果,请执行以下操作:

  1. 选择绘图类型(“平行坐标图”、“散点图”或“等高线图”)。

  2. 对于“平行坐标图”,请选择要绘制的参数和指标。 对于“散点图”或“等高线图”,请选择要在每个轴上显示的参数或指标。

    比较运行页可视化效果

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

比较运行页表

下载运行

  1. 选择一个或多个运行。

  2. 单击“下载 CSV”。 包含以下字段的 CSV 文件下载:

    Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
    

删除运行

  1. 在试验中,通过单击运行左侧的复选框来选择一个或多个运行。
  2. 单击 “删除”
  3. 如果运行为父运行,则确定是否也要删除后代运行。 默认情况下选择此选项。
  4. 单击“删除”进行确认,或单击“取消”进行取消。 删除的运行保存 30 天。 若要显示删除的运行,请选择“状态”字段中的“已删除”。

在工作区之间复制运行

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

从 Azure Databricks 外部访问 MLflow 跟踪服务器

你还可以从 Azure Databricks 外部写入和读取跟踪服务器,例如,使用 MLflow CLI 来这样做。

以编程方式分析 MLflow 运行

可使用以下两个数据帧 API 以编程方式访问 MLflow 运行数据:

此示例演示如何使用 MLflow Python 客户端生成一个仪表板。该仪表板可直观显示一段时间内的评估指标更改、跟踪特定用户启动的运行的数目,以及度量所有用户的运行总数:

示例

以下笔记本演示了如何在 MLflow 中训练多种类型的模型和跟踪训练数据,以及如何在 Delta Lake 中存储跟踪数据。