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

记录并查看指标和日志文件

使用 MLflow 跟踪记录实时信息。 可以使用 MLflow 记录模型、指标和项目,因为它支持本地模式到云的可移植性。

重要

与 Azure 机器学习 SDK v1 不同,SDK v2 预览版中没有日志记录功能。

日志可帮助你诊断错误和警告,或跟踪参数和模型性能等性能指标。 本文介绍如何在以下场景中启用日志记录功能:

  • 记录训练运行指标
  • 交互式训练会话
  • Python 的原生 logging 设置
  • 来自其他源的日志记录

提示

本文说明如何监视模型训练过程。 如果你希望监视 Azure 机器学习的资源使用情况和事件,例如配额、已完成的训练运行或已完成的模型部署,请参阅监视 Azure 机器学习

先决条件

  • 若要使用 Azure 机器学习,必须有一个 Azure 订阅。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 试用免费版或付费版 Azure 机器学习

  • 必须有一个 Azure 机器学习工作区。 在安装、设置和使用 CLI (v2) 中创建了一个工作区。

  • 必须安装 aureml-coremlflowazure-mlflow 包。 如果还未安装,请使用以下命令将其安装到开发环境中:

    pip install azureml-core mlflow azureml-mlflow
    

数据类型

下表介绍如何记录特定的值类型:

记录的值 示例代码 说明
记录数值(int 或 float) mlflow.log_metric('my_metric', 1)
记录布尔值 mlflow.log_metric('my_metric', 0) 0 = True,1 = False
记录字符串 mlflow.log_text('foo', 'my_string') 记录为项目
记录 numpy 指标或 PIL 图像对象 mlflow.log_image(img, 'figure.png')
记录 matplotlib 绘图或图像文件 mlflow.log_figure(fig, "figure.png")

使用 MLflow 记录训练运行

要设置使用 MLflow 进行日志记录,请导入 mlflow 并设置跟踪 URI:

提示

使用在 Azure 机器学习计算实例上运行的笔记本时,无需设置跟踪 URI。

from azureml.core import Workspace
import mlflow

ws = Workspace.from_config()
# Set the tracking URI to the Azure ML backend
# Not needed if running on Azure ML compute instance
# or compute cluster
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

交互式运行

以交互方式训练时(例如在 Jupyter Notebook 中),使用以下模式:

  1. 创建或设置活动实验。
  2. 启动运行。
  3. 使用日志记录方法来记录指标和其他信息。
  4. 结束运行。

例如,以下代码片段演示了设置跟踪 URI、创建实验,然后在运行期间记录

from mlflow.tracking import MlflowClient

# Create a new experiment if one doesn't already exist
mlflow.create_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
mlflow_run = mlflow.start_run()
mlflow.log_metric('mymetric', 1)
mlflow.end_run()

提示

从技术上讲,不必调用 start_run(),因为如果某个运行不存在并且你调用了日志记录 API,则会创建一个新的运行。 在这种情况下,可以使用 mlflow.active_run() 检索运行。 但是,mlflow.active_run() 返回的 mlflow.ActiveRun 对象不包含参数、指标等项。有关详细信息,请参阅 mlflow.active_run()

还可以使用上下文管理器范例:

from mlflow.tracking import MlflowClient

# Create a new experiment if one doesn't already exist
mlflow.create_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

有关 MLflow 日志记录 API 的详细信息,请参阅 MLflow 参考

远程运行

对于远程训练运行,会自动设置跟踪 URI 和实验。 否则,记录运行的选项与交互式记录的选项相同:

  • 调用 mlflow.start_run(),记录信息,然后调用 mlflow.end_run()
  • 将上下文管理器范例与 mlflow.start_run() 一起使用。
  • 调用诸如 mlflow.log_metric() 之类的日志记录 API,它将启动一个运行(如果尚不存在运行)。

记录模型

要从训练运行中保存模型,请使用正在使用的框架的 log_model() API。 例如,mlflow.sklearn.log_model()。 对于 MLflow 不支持的框架,请参阅将自定义模型转换为 MLflow

查看运行信息

可以通过 MLflow.entities.Run 对象使用 MLflow 查看记录的信息。 训练作业完成后,可以使用 MlFlowClient() 进行检索:

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)

可以在运行对象的数据字段中查看该运行的指标、参数和标记。

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

注意

mlflow.entities.Run.data.metrics 下的指标字典只返回某个给定指标名称的最近记录的值。 例如,如果按顺序依次将 1、2、3、4 记录到名为 sample_metric 的指标,则在 sample_metric 的指标字典中只会存在 4。

若要获取为某个特定指标名称记录的所有指标,可以使用 MlFlowClient.get_metric_history()

在工作室 UI 中查看运行指标

可以在 Azure 机器学习工作室中浏览已完成的运行记录,包括记录的指标。

导航到“试验”选项卡。若要查看工作区中各个试验的所有运行,请选择“所有运行”选项卡。可应用顶部菜单栏中的“试验”筛选器来深入了解特定试验的运行。

对于各个试验视图,请选择“所有试验”选项卡。在“试验运行”仪表板中,可以看到为每次运行跟踪的指标和日志。

还可以编辑“运行列表”表,以选择多个运行并显示运行的最新记录值、最小记录值或最大记录值。 自定义自己的图表,以比较多个运行上的已记录指标值和聚合。 你可以在图表的 y 轴上绘制多个指标,并自定义 x 轴以绘制记录的指标。

查看并下载运行用的日志文件

日志文件是用于调试 Azure ML 工作负荷的重要资源。 提交训练作业后,向下钻取到特定运行以查看其日志和输出:

  1. 导航到“试验”选项卡。
  2. 选择特定运行的 runID。
  3. 选择页面顶部的“输出和日志”。
  4. 选择“全部下载”,将所有日志下载到 zip 文件夹中。
  5. 还可以通过选择日志文件并选择“下载”来下载单个日志文件

Screenshot of Output and logs section of a run.

user_logs 文件夹

此文件夹包含有关用户生成的日志的信息。 此文件夹默认打开,并选择 std_log.txt 日志。 std_log.txt 是代码日志(例如,打印语句)出现的位置。 此文件包含来自控制脚本和训练脚本的 stdout 日志和 stderr 日志,每个进程一个日志。 大多数情况下,你将监视此处的日志。

system_logs 文件夹

此文件夹包含 Azure 机器学习生成的日志,默认情况下将关闭。 系统生成的日志会根据运行时作业的阶段分组到不同的文件夹中。

其他文件夹

对于多个计算群集上的作业训练,将会针对每个节点 IP 提供日志。 每个节点的结构都与单节点作业相同。 对于总体执行、stderr 和 stdout 日志,还有一个额外的日志文件夹。

Azure 机器学习会在训练期间记录来自各种源的信息,例如运行训练作业的 AutoML 或 Docker 容器。 其中的许多日志没有详细的阐述。 如果遇到问题且联系了 Microsoft 支持部门,他们可以在排除故障时使用这些日志。

交互式日志记录会话

交互式日志记录会话通常用在笔记本环境中。 mlflow.start_run() 方法启动新的 MLflow 运行并将其设置为活动状态。 运行期间记录的任何指标都会添加到运行记录中。 mlflow.end_run() 方法结束当前的活动运行。

其他日志记录源

Azure 机器学习还可以在训练期间记录其他来源的信息,例如自动化机器学习运行或运行作业的 Docker 容器。 这些日志未进行记录,但如果你遇到问题并联系了 Microsoft 支持部门,他们可以在排除故障时使用这些日志。

有关在 Azure 机器学习设计器中记录指标的信息,请参阅如何在设计器中记录指标

后续步骤