Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
使用默认的 Python 日志记录包和 Azure 机器学习 Python SDK 特有的功能来记录实时信息。 你可以在本地进行记录,并将日志发送到门户中的工作区。
日志可帮助你诊断错误和警告,或跟踪参数和模型性能等性能指标。 本文介绍如何在以下场景中启用日志记录功能:
- 记录运行指标
- 交互式训练会话
- 使用 ScriptRunConfig 提交训练作业
- Python 的原生
logging
设置 - 来自其他源的日志记录
Tip
本文说明如何监视模型训练过程。 如果你希望监视 Azure 机器学习的资源使用情况和事件,例如配额、已完成的训练运行或已完成的模型部署,请参阅监视 Azure 机器学习。
可以记录多个数据类型,包括标量值、列表、表、图像、目录等。 有关不同数据类型的详细信息和 Python 代码示例,请查看 Run 类参考页。
使用日志记录 API 中的以下方法可影响指标可视化效果。 请注意这些记录的指标的服务限制。
记录的值 | 示例代码 | 门户中的格式 |
---|---|---|
记录一组数值 | run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) |
单变量折线图 |
使用重复使用的相同指标名称记录单个数值(例如在 for 循环中) | for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 |
单变量折线图 |
重复记录包含 2 个数字列的行 | run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) |
双变量折线图 |
记录包含 2 个数字列的表 | run.log_table(name='Sine Wave', value=sines) |
双变量折线图 |
日志图像 | run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') |
使用此方法在运行中记录图像文件或 matplotlib 图。 运行记录中可显示和比较这些图像 |
建议使用 MLflow 来记录模型、指标和项目,因为它是开源的,并且支持从本地移植到云。 下表和代码示例演示了如何使用 MLflow 来记录训练运行中的指标和项目。 详细了解 MLflow 的日志记录方法和设计模式。
请确保将 mlflow
和 azureml-mlflow
pip 包安装到工作区。
pip install mlflow
pip install azureml-mlflow
将 MLflow 跟踪 URI 设置为指向 Azure 机器学习后端,以确保将指标和项目记录到工作区。
from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient
ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
记录的值 | 示例代码 | 说明 |
---|---|---|
记录数值(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") |
可以使用 run.get_metrics()
查看训练的模型的指标。
from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)
metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.
metrics.get('metric-name')
# list of metrics in the order they were recorded
还可以通过运行对象的数据和信息属性,使用 MLflow 来访问运行信息。 有关详细信息,请参阅 MLflow.entities.Run 对象文档。
在该运行完成后,可以使用 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
Note
mlflow.entities.Run.data.metrics
下的指标字典只返回某个给定指标名称的最近记录的值。 例如,如果按顺序依次将 1、2、3、4 记录到名为 sample_metric
的指标,则在 sample_metric
的指标字典中只会存在 4。
若要获取为某个特定指标名称记录的所有指标,可以使用 MlFlowClient.get_metric_history()
。
可以在 Azure 机器学习工作室中浏览已完成的运行记录,包括记录的指标。
导航到“试验”选项卡。若要查看工作区中各个试验的所有运行,请选择“所有运行”选项卡。可应用顶部菜单栏中的“试验”筛选器来深入了解特定试验的运行。
对于各个试验视图,请选择“所有试验”选项卡。在“试验运行”仪表板中,可以看到为每次运行跟踪的指标和日志。
还可以编辑“运行列表”表,以选择多个运行并显示运行的最新记录值、最小记录值或最大记录值。 自定义自己的图表,以比较多个运行上的已记录指标值和聚合。 你可以在图表的 y 轴上绘制多个指标,并自定义 x 轴以绘制记录的指标。
日志文件是用于调试 Azure 机器学习工作负载的重要资源。 提交训练作业后,向下钻取到特定运行以查看其日志和输出:
- 导航到“试验”选项卡。
- 选择特定运行的 runID。
- 选择页面顶部的“输出和日志”。
- 选择“全部下载”,将所有日志下载到 zip 文件夹中。
- 还可以通过选择日志文件并选择“下载”来下载单个日志文件
此文件夹包含有关用户生成的日志的信息。 此文件夹默认打开,并选择 std_log.txt 日志。 std_log.txt 是代码日志(例如,打印语句)出现的位置。 此文件包含来自控制脚本和训练脚本的 stdout
日志和 stderr
日志,每个进程一个日志。 大多数情况下,你都将在此处监视日志。
此文件夹包含 Azure 机器学习生成的日志,默认情况下将关闭。 系统生成的日志会根据运行时作业的阶段分组到不同的文件夹中。
对于多个计算群集上的作业训练,将会针对每个节点 IP 提供日志。 每个节点的结构都与单节点作业相同。 对于总体执行、stderr 和 stdout 日志,还有一个额外的日志文件夹。
Azure 机器学习会在训练期间记录来自各种源的信息,例如运行训练作业的 AutoML 或 Docker 容器。 其中的许多日志没有详细的阐述。 如果遇到问题且联系了 Azure 支持部门,他们可以在排除故障时使用这些日志。
交互式日志记录会话通常用在笔记本环境中。 方法 Experiment.start_logging() 启动交互式日志记录会话。 试验中会话期间记录的任何指标都会添加到运行记录中。 方法 run.complete() 结束会话并将运行标记为已完成。
本部分介绍使用了 ScriptRunConfig 进行配置时,如何在创建的各次运行之内添加记录代码。 可以使用 ScriptRunConfig 类来封装用于可重复运行的脚本和环境。 还可以使用此选项来显示一个用于监视的 Jupyter Notebooks 视觉小组件。
此示例使用 run.log() 方法对 alpha 值执行参数扫描并捕获结果。
创建包含日志记录逻辑的训练脚本
train.py
。# Copyright (c) Microsoft. All rights reserved. # Licensed under the MIT license. from sklearn.datasets import load_diabetes from sklearn.linear_model import Ridge from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from azureml.core.run import Run import os import numpy as np import mylib # sklearn.externals.joblib is removed in 0.23 try: from sklearn.externals import joblib except ImportError: import joblib os.makedirs('./outputs', exist_ok=True) X, y = load_diabetes(return_X_y=True) run = Run.get_context() X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) data = {"train": {"X": X_train, "y": y_train}, "test": {"X": X_test, "y": y_test}} # list of numbers from 0.0 to 1.0 with a 0.05 interval alphas = mylib.get_alphas() for alpha in alphas: # Use Ridge algorithm to create a regression model reg = Ridge(alpha=alpha) reg.fit(data["train"]["X"], data["train"]["y"]) preds = reg.predict(data["test"]["X"]) mse = mean_squared_error(preds, data["test"]["y"]) run.log('alpha', alpha) run.log('mse', mse) model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha) # save model in the outputs folder so it automatically get uploaded with open(model_file_name, "wb") as file: joblib.dump(value=reg, filename=os.path.join('./outputs/', model_file_name)) print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))
提交要在用户管理的环境中运行的
train.py
脚本。 整个脚本文件夹都要提交,以便进行训练。from azureml.core import ScriptRunConfig src = ScriptRunConfig(source_directory='./', script='train.py', environment=user_managed_env)
run = exp.submit(src)
show_output
参数会启用详细日志记录,让你可以查看训练过程的详细信息,以及有关任何远程资源或计算目标的信息。 请使用以下代码在提交试验时启用详细日志记录。run = exp.submit(src, show_output=True)
还可以在生成的运行上的
wait_for_completion
函数中使用相同的参数。run.wait_for_completion(show_output=True)
SDK 中的某些日志可能包含一个错误,指示你将日志记录级别设置为“调试”。 若要设置日志记录级别,请在脚本中添加以下代码。
import logging
logging.basicConfig(level=logging.DEBUG)
Azure 机器学习还可以在训练期间记录其他来源的信息,例如自动化机器学习运行或运行作业的 Docker 容器。 这些日志未进行记录,但如果你遇到问题并联系了 Azure 支持部门,他们可以在排除故障时使用这些日志。
有关在 Azure 机器学习设计器中记录指标的信息,请参阅如何在设计器中记录指标
下面的笔记本展示了本文中的概念:
- how-to-use-azureml/training/train-on-local
- how-to-use-azureml/track-and-monitor-experiments/logging-api
阅读使用 Jupyter 笔记本探索此服务一文,了解如何运行笔记本。
请参阅以下文章,详细了解如何使用 Azure 机器学习:
- 查看教程使用 Azure 机器学习训练图像分类模型中的示例,了解如何注册和部署最佳模型。