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

使用 MLflow 跟踪 ML 实验和模型

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

跟踪是保存运行的试验的相关信息的过程。 保存的信息(元数据)因项目而异,它可能包含:

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

在 Azure 机器学习中使用作业时,Azure 机器学习会自动跟踪有关试验的一些信息,例如代码、环境和输入和输出数据。 但是,对于其他模型、参数和指标等,模型生成器需要配置跟踪,因为它们特定于特定方案。

注意

若要跟踪在 Azure Databricks 上运行的试验,请参阅使用 MLflow 和 Azure 机器学习跟踪 Azure Databricks ML 试验。 若要了解如何跟踪在 Azure Synapse Analytics 上运行的试验,请参阅使用 MLflow 和 Azure 机器学习跟踪 Azure Synapse Analytics ML 试验

跟踪试验的好处

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

  • 将所有机器学习试验整理到一个位置。 然后,可以搜索和筛选试验并向下钻取以查看之前运行的试验的详细信息。
  • 只需少量的额外工作即可比较试验、分析结果和调试模型训练。
  • 重现或重新运行试验以验证结果。
  • 提升协作,因为你可以看到其他团队成员正在执行的操作、共享试验结果并以编程方式访问试验数据。

为什么使用 MLflow 来跟踪试验?

Azure 机器学习工作区与 MLflow 兼容,这意味着可以在 Azure 机器学习工作区中使用 MLflow 跟踪运行、指标、参数和工件。 使用 MLflow 进行跟踪的主要优点是,无需更改训练例程来配合 Azure 机器学习使用或注入任何特定于云的语法。

有关所有受支持的 MLflow 和 Azure 机器学习功能的详细信息,请参阅 MLflow 和 Azure 机器学习

限制

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

先决条件

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

    pip install mlflow azureml-mlflow
    

    提示

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

  • 一个 Azure 机器学习工作区。 若要创建工作区,请参阅创建机器学习资源教程。 查看在工作区中执行 MLflow 操作所需的访问权限

  • 如果要执行远程跟踪(即跟踪在 Azure 机器学习外部运行的试验),请将 MLflow 配置为指向 Azure 机器学习工作区的跟踪 URI。 有关如何将 MLflow 连接到工作区的详细信息,请参阅为 Azure 机器学习配置 MLflow

配置试验

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

对于交互式训练(如 Jupyter 笔记本中),请使用 MLflow 命令 mlflow.set_experiment()。 例如,以下代码片段会配置一个试验:

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

配置运行

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

以交互方式工作时,在你尝试记录需要活动运行的信息时,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() 启动新运行时,指定 run_name 参数可能会很有用,该参数之后会在 Azure 机器学习用户界面中转换为运行的名称,并帮助你更快地识别运行:

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

启用 MLflow 自动日志记录

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

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

mlflow.autolog()

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

在工作区中跟踪 MLflow 日志记录中的指标和项目。 可以随时在工作室中查看和访问它们,也可以通过 MLflow SDK 以编程方式访问它们。

在工作室中查看指标和工件:

  1. 转到 Azure 机器学习工作室

  2. 导航到你的工作区。

  3. 在工作区中按名称查找试验。

  4. 选择记录的指标以在右侧呈现图表。 可以通过应用平滑处理、更改颜色或在单个图形上绘制多个指标来自定义图表。 还可以根据需要调整布局的大小和重新排列布局。

  5. 创建了所需视图后,将其保存以备将来使用,并使用直接链接与队友共享。

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

若要通过 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 查询和比较试验和运行