跟踪机器学习训练运行

可以通过 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 运行才能记录到笔记本试验中。 从任何笔记本启动的或从 API 启动的 MLflow 运行可以记录到工作区试验中。 若要了解如何查看已记录的运行,请参阅查看笔记本试验查看工作区试验

将 MLflow 运行记录到笔记本

获取笔记本

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

试验

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

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

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

View experiment

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

创建试验

创建工作区试验

此部分介绍如何使用 Azure Databricks UI 创建工作区试验。 也可使用 MLflow API

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

  1. 单击 Workspace Icon 侧栏中的 "工作区"。

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

  3. 执行下列操作之一:

    • 在任何文件夹旁边,单击 Menu Dropdown 文本右侧,然后选择 " 创建 Menu Dropdown MLflow 试验"。

      Create experiment

    • 在工作区或用户文件夹中,单击 Down Caret 并选择 " 创建 Down Caret 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. 单击“创建”。 出现空实验。

创建笔记本试验

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

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

注意

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

查看试验

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

访问试验页的其他方法:

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

查看工作区试验

  1. 单击 Workspace Icon 侧栏中的 "工作区"。
  2. 转到包含该试验的文件夹。
  3. 单击试验名称。

查看笔记本试验

在笔记本工具栏中,单击 " 试验 " 图标 Experiment icon

Notebook toolbar

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

View run parameters and metrics

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

  • 若要查看实验,请单击 External Link试验运行旁边的最右侧。
  • 若要显示 运行,请 External Link 在运行的日期和时间旁边单击 "下一步"。

管理试验

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

从 "试验" 页或 "试验" 页重命名试验

重要

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

若要从 "试验" 或 " 试验" 页重命名实验,请单击 three button icon 并选择 " 重命名"。

从工作区菜单重命名试验

  1. 单击 Workspace Icon 侧栏中的 "工作区"。
  2. 转到包含该试验的文件夹。
  3. 单击 Menu Dropdown 试验右侧的,然后选择 " 重命名"。

复制试验名称

若要复制实验名称,请单击 Copy Icon 试验页顶部的。 可在 MLflow 命令 set_experiment 中使用此名称来设置活动 MLflow 试验。

Experiment name icon

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

删除笔记本试验

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

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

  1. 单击 Workspace Icon 侧栏中的 "工作区"。
  2. 转到包含该试验的文件夹。
  3. 单击 Menu Dropdown 试验右侧的,然后选择 " 移到回收站"。

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

重要

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

若要从 "试验" 或 " 试验" 页中删除实验,请单击 three button icon 并选择 " 删除"。

删除笔记本试验时,笔记本也会被删除。

更改试验权限

若要更改你在 试验页中拥有的实验的权限,请单击 three button icon 并选择 " 权限"。

若要更改试验 中实验的权限,请单击 " 权限"。

Experiment page permissions button

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

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

查看运行

你可以从其父实验页面或直接从创建运行的笔记本访问运行。

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

从笔记本的 " External Link 试验运行" 边栏中,单击 "运行日期和时间" 旁边的 "下一步"。

" 运行" 屏幕 将显示用于运行的参数、运行所生成的指标以及任何标记或注释。 若要显示此运行的 注释参数指标标记 ,请单击 right-pointing arrow 标签的左侧。

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

View run

用于预测的代码段

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

predict code snippets

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

查看创建运行的 笔记本的版本

  • 在 "试验" 页上,单击 " " 列中的链接。
  • 在 "运行" 页上,单击 " " 旁边的链接。
  • 从笔记本的 "试验运行" 边栏中,单击此Notebook Version Icon 试验运行的框中的笔记本图标。

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

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

向运行添加标记

标记是可以创建的键值对,稍后用于 搜索运行

  1. 在 " 运行" 页上,单击 " Tag icon 如果尚未打开"。 显示标记表。

    tag table

  2. 单击 " 名称 " 和 " " 字段,并键入标记的键和值。

  3. 单击“添加”。

    add tag

编辑或删除运行的标记

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

tag actions

重现运行的软件环境

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

Reproduce run dialog

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

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

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

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

管理运行

重命名运行

若要重命名运行,请单击 three button icon "运行" 页右上角的 " 重命名"。

筛选运行

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

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

    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"
    

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

Filter runs

比较运行

  1. 在试验中,通过单击运行左侧的复选框来选择两个或多个运行。
  2. 单击“比较”。 此时会显示“比较 <N> 个运行”屏幕。
  3. 执行下列操作之一:
    • 选择指标名称以显示指标图形。

    • 从“X 轴”和“Y 轴”下拉列表中选择参数和指标来生成散点图。

      Scatter plot

下载运行

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

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

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

删除运行

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

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

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

以编程方式分析 MLflow 运行

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

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

示例

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