你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 MLflow 跟踪 ML 实验和模型

跟踪是指保存所有试验相关信息的过程,你可能会发现这些信息与你运行的每个实验相关。 此类元数据因项目而异,但可能包括:

  • 代码
  • 环境详细信息(操作系统版本、Python 包)
  • 输入数据
  • 参数配置
  • 模型
  • 评估指标
  • 评估可视化效果(混淆矩阵、重要性绘图)
  • 评估结果(包括一些评估预测)

处理作业时,Azure 机器学习会自动跟踪其中一些元素(包括代码、环境和输入和输出数据)。 但模型生成器需要检测模型、参数和指标等其他内容,因为它特定于特定的方案。

在本文中,你将了解如何使用 MLflow 跟踪 Azure 机器学习工作区中的试验和运行。

注意

若要跟踪在 Azure Databricks 或 Azure Synapse Analytics 上运行的试验,请参阅专用文章使用 MLflow 和 Azure 机器学习跟踪 Azure Databricks ML 试验使用 MLflow 和 Azure 机器学习跟踪 Azure Synapse Analytics ML 试验

跟踪试验的好处

强烈建议机器学习从业者通过跟踪试验来进行检测,无论他们是使用 Azure 机器学习中的作业进行训练,还是在笔记本中以交互方式进行训练。 优势包括:

  • 所有 ML 试验都组织在一个位置,让你能够搜索和筛选试验以查找信息,并向下钻取以查看之前尝试的确切内容。
  • 只需少量的额外工作即可比较试验、分析结果和调试模型训练。
  • 重现或重新运行试验以验证结果。
  • 通过查看每个人正在执行的操作、共享试验结果以及以编程方式访问试验数据来改善协作。

为什么使用 MLflow

Azure 机器学习工作区与 MLflow 兼容,这意味着可以通过 Azure 机器学习工作区使用 MLflow 跟踪运行、指标、参数和项目。 通过使用 MLflow 进行跟踪,无需更改训练例程即可使用 Azure 机器学习或注入任何特定于云的语法,这是该方法的主要优势之一。

有关所有受支持的 MLflow 和 Azure 机器学习功能,包括 MLflow 项目支持(预览版)和模型部署,请参阅 MLflow 和 Azure 机器学习

先决条件

  • 安装 Mlflow SDK 包 mlflow 和适用于 MLflow 的 Azure 机器学习插件 azureml-mlflow

    pip install mlflow azureml-mlflow
    

    提示

    可以使用 mlflow-skinny 包,它是一个不带 SQL 存储、服务器、UI 或数据科学依赖项的轻型 MLflow 包。 对于主要需要用到跟踪和日志记录功能,但不需要导入整个 MLflow 功能套件(包括部署)的用户,建议使用它。

  • 你需要一个 Azure 机器学习工作区。 可以按照此教程创建一个

  • 如果要执行远程跟踪(在 Azure 机器学习外部运行的跟踪试验),请将 MLflow 配置为指向 Azure 机器学习工作区的跟踪 URI,如为 Azure 机器学习配置 MLflow 中所述。

配置试验

MLflow 在试验和运行中组织信息(在 Azure 机器学习中,运行称为作业)。 默认情况下,运行将记录到系统自动创建的名为默认的试验中。 可以配置进行跟踪的试验。

以交互方式训练时(例如在 Jupyter Notebook 中),使用 MLflow 命令 mlflow.set_experiment()。 例如,以下代码片段演示如何配置试验,然后在作业期间进行记录:

experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)

配置运行

Azure 机器学习跟踪 MLflow 所称运行中的任何训练作业。 使用运行捕获作业执行的所有处理。

以交互方式工作时,在你尝试记录需要活动运行的信息时,MLflow 将立即开始跟踪训练例程。 例如,当你记录指标、记录参数,或在启用 Mlflow 的自动日志记录功能后启动训练循环时。 但显式启动运行通常很有帮助,特别是在要捕获字段“持续时间”中试验总时间的情况下。 要显式启动运行,请使用 mlflow.start_run()

无论是否手动启动运行,最终都需要停止运行,以通知 MLflow 试验运行已完成,并将其状态标记为“已完成”。 为此,请执行所有 mlflow.end_run()。 强烈建议手动启动运行,以便在处理笔记本时不会忘记结束它们。

mlflow.start_run()

# Your code

mlflow.end_run()

为了帮助你避免忘记结束运行,使用上下文管理器范例通常会很有帮助:

with mlflow.start_run() as run:
    # Your code

使用 mlflow.start_run() 启动新运行时,指示随后将在 Azure 机器学习用户界面中转换为运行名称,并帮助你更快识别运行的参数 run_name 可能会非常有趣:

with mlflow.start_run(run_name="hello-world-example") as run:
    # Your code

自动日志记录

可以手动使用 MLflow 记录指标、参数和文件。 但也可以依赖于 MLflow 自动日志记录功能。 MLflow 支持的每个机器学习框架决定了自动跟踪的内容。

若要启用自动日志记录,请在训练代码之前插入以下代码:

mlflow.autolog()

查看工作区中的指标和项目

在工作区中跟踪 MLflow 日志记录中的指标和项目。 若要随时查看它们,请在 Azure 机器学习工作室中导航到你的工作区,并在该工作区中按名称找到试验。

“指标”视图的屏幕截图。

选择记录的指标以在右侧呈现图表。 可以通过应用平滑处理、更改颜色或在单个图形上绘制多个指标来自定义图表。 还可以根据需要调整布局的大小和重新排列布局。 创建所需视图后,可以将其保存以备将来使用,并使用直接链接与队友共享。

还可以使用 MLflow SDK 访问或以编程方式查询指标、参数和项目。 按如下所述使用 mlflow.get_run ()

import mlflow

run = mlflow.get_run("<RUN_ID>")

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

print(metrics, params, tags)

提示

对于指标,上一个示例将仅返回给定指标的最后一个值。 如果要检索给定指标的所有值,请使用 mlflow.get_metric_history 方法,如从运行中获取参数和指标中所述。

要下载已记录的项目(如文件和模型),可以使用 mlflow.artifacts.download_artifacts()

mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")

要详细了解如何使用 MLflow 在 Azure 机器学习中检索或比较试验与运行中的信息,请查看使用 MLflow 查询 & 比较试验和运行

示例笔记本

如果要查找有关如何在 Jupyter 笔记本中使用 MLflow 的示例,请参阅示例存储库 使用 MLflow (Jupyter Notebooks)

限制

连接到 Azure 机器学习时,MLflow API 中提供的某些方法可能不可用。 有关支持和不支持的操作的详细信息,请阅读用于查询运行和试验的支持矩阵

后续步骤