你当前正在访问 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-core、mlflow和azure-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 中),使用以下模式:
- 创建或设置活动实验。
- 启动运行。
- 使用日志记录方法来记录指标和其他信息。
- 结束运行。
例如,以下代码片段演示了设置跟踪 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 工作负荷的重要资源。 提交训练作业后,向下钻取到特定运行以查看其日志和输出:
- 导航到“试验”选项卡。
- 选择特定运行的 runID。
- 选择页面顶部的“输出和日志”。
- 选择“全部下载”,将所有日志下载到 zip 文件夹中。
- 还可以通过选择日志文件并选择“下载”来下载单个日志文件
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 机器学习设计器中记录指标的信息,请参阅如何在设计器中记录指标。