Compartir a través de

使用 TensorBoard 和 Azure 机器学习可视化试验作业与指标

适用于:适用于 Python 的 Azure 机器学习 SDK v1

重要

本文提供有关使用 Azure 机器学习 SDK v1 的信息。 SDK v1 自 2025 年 3 月 31 日起弃用。 对它的支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。

建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 CLI 和 Python SDK v2? 以及 SDK v2 参考

本文介绍如何使用主要 Azure 机器学习 SDK 中的 tensorboard,在 TensorBoard 中查看试验作业和指标。 检查完试验作业后,可以更好地优化和重新训练机器学习模型。

TensorBoard 是一套 Web 应用程序,用于检查和了解试验的结构与性能。

如何在 Azure 机器学习试验中启动 TensorBoard 取决于试验类型:

  • 如果您的实验能够原生地生成 TensorBoard 能够处理的日志文件,比如 PyTorch、Chainer 和 TensorFlow 实验,那么您可以直接从实验的作业历史记录中启动 TensorBoard

  • 对于无法本机输出 TensorBoard 可读取文件的实验(例如 Scikit-learn 或 Azure 机器学习实验),请使用export_to_tensorboard()方法将作业历史记录导出为 TensorBoard 日志,并从那里启动 TensorBoard。

提示

本文档中的信息主要面向需要监视模型训练过程的数据科学家与开发人员。 如果你是一名管理员,希望监视 Azure 机器学习中的资源使用情况和事件,例如配额、已完成的训练作业或已完成的模型部署,请参阅 “监视 Azure 机器学习”。

先决条件

  • 若要启动 TensorBoard 并查看试验作业历史记录,试验需要以前启用日志记录来跟踪其指标和性能。
  • 本文档中的代码可在以下任一环境中运行:
    • Azure 机器学习计算实例 - 无需下载或安装
      • 完成 创建资源,以开始 创建预加载 SDK 和示例存储库的专用笔记本服务器。
      • 在笔记本服务器上的 samples 文件夹中,导航到以下目录,找到两个已完成的和已扩展的笔记本:
        • >SDK v1 > how-to-use-azureml > track-and-monitor-experiments > tensorboard > export-run-history-to-tensorboard export-run-history-to-tensorboard.ipynb
        • >SDK v1 > how-to-use-azureml > track-and-monitor-experiments > tensorboard > tensorboard tensorboard.ipynb
    • 你自己的 Jupyter 笔记本服务器

选项 1:直接在 TensorBoard 中查看作业历史记录

此选项适用于原生输出 TensorBoard 可处理日志文件的实验,例如 PyTorch、Chainer 和 TensorFlow 实验。 如果这不是你的实验适用的情况,请改用该方法export_to_tensorboard()

以下示例代码在远程计算目标“Azure 机器学习计算”上使用 TensorFlow 存储库中的 MNIST 演示试验。 接下来,我们配置并启动用于训练 TensorFlow 模型的作业,然后针对此 TensorFlow 试验启动 TensorBoard。

设置试验名称并创建项目文件夹

在此处为试验命名,并创建其文件夹。

from os import path, makedirs
experiment_name = 'tensorboard-demo'

# experiment folder
exp_dir = './sample_projects/' + experiment_name

if not path.exists(exp_dir):
    makedirs(exp_dir)

下载 TensorFlow 演示试验代码

TensorFlow 的存储库包含 MNIST 演示以及丰富的 TensorBoard 检测工具。 我们不需要更改此演示的任何代码,才能使用 Azure 机器学习。 在以下代码中,我们将下载 MNIST 代码,并将其保存到新建的试验文件夹中。

import requests
import os

tf_code = requests.get("https://raw.githubusercontent.com/tensorflow/tensorflow/r1.8/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py")
with open(os.path.join(exp_dir, "mnist_with_summaries.py"), "w") as file:
    file.write(tf_code.text)

在整个 MNIST 代码文件 mnist_with_summaries.py 中,请注意有调用 tf.summary.scalar()tf.summary.histogram()tf.summary.FileWriter() 等的行。这些方法将试验的关键指标归组、记录和标记到作业历史记录中。 tf.summary.FileWriter() 尤为重要,因为它序列化您记录的实验指标数据,使 TensorBoard 可以从中生成可视化。

配置试验

下面,我们将配置试验,并设置日志和数据的目录。 这些日志会被上传到作业历史记录中,供 TensorBoard 稍后访问。

注意

对于此 TensorFlow 示例,需要在本地计算机上安装 TensorFlow。 此外,TensorBoard 模块(即 TensorFlow 包含的模块)必须可供此笔记本的内核访问,因为 TensorBoard 在本地计算机上运行。

import azureml.core
from azureml.core import Workspace
from azureml.core import Experiment

ws = Workspace.from_config()

# create directories for experiment logs and dataset
logs_dir = os.path.join(os.curdir, "logs")
data_dir = os.path.abspath(os.path.join(os.curdir, "mnist_data"))

if not path.exists(data_dir):
    makedirs(data_dir)

os.environ["TEST_TMPDIR"] = data_dir

# Writing logs to ./logs results in their being uploaded to the job history,
# and thus, made accessible to our TensorBoard instance.
args = ["--log_dir", logs_dir]

# Create an experiment
exp = Experiment(ws, experiment_name)

为试验创建群集

我们为此实验创建 AmlCompute 群集,但是可以在任何环境中创建试验,你仍然可以针对试验作业历史记录启动 TensorBoard。

from azureml.core.compute import ComputeTarget, AmlCompute

cluster_name = "cpu-cluster"

cts = ws.compute_targets
found = False
if cluster_name in cts and cts[cluster_name].type == 'AmlCompute':
   found = True
   print('Found existing compute target.')
   compute_target = cts[cluster_name]
if not found:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2', 
                                                           max_nodes=4)

    # create the cluster
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

compute_target.wait_for_completion(show_output=True, min_node_count=None)

# use get_status() to get a detailed status for the current cluster. 
# print(compute_target.get_status().serialize())

配置和提交训练作业

通过创建 ScriptRunConfig 对象来配置训练作业。

from azureml.core import ScriptRunConfig
from azureml.core import Environment

# Here we will use the TensorFlow 2.2 curated environment
tf_env = Environment.get(ws, 'AzureML-TensorFlow-2.2-GPU')

src = ScriptRunConfig(source_directory=exp_dir,
                      script='mnist_with_summaries.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_env)
run = exp.submit(src)

启动 TensorBoard

可以在运行期间或者在运行完成后启动 TensorBoard。 在下面的步骤中,我们将创建一个 TensorBoard 对象实例 tb,该实例使用在 run 中加载的实验任务历史,然后通过 start() 方法启动 TensorBoard。

TensorBoard 构造函数采用运行数组,因此请务必将其作为单元素数组传入。

from azureml.tensorboard import Tensorboard

tb = Tensorboard([run])

# If successful, start() returns a string with the URI of the instance.
tb.start()

# After your job completes, be sure to stop() the streaming otherwise it will continue to run. 
tb.stop()

注意

虽然此示例使用了 TensorFlow,但 TensorBoard 可以同样轻松地与 PyTorch 或 Chainer 配合使用。 TensorFlow 必须在运行 TensorBoard 的计算机上可用,但在执行 PyTorch 或 Chainer 计算的计算机上不是必需的。

选项 2:将历史记录导出为日志以在 TensorBoard 中查看

以下代码设置一个示例试验,使用 Azure 机器学习作业历史记录 API 开始日志记录过程,然后将试验作业历史记录导出到 TensorBoard 可用的日志中,以进行可视化。

设置试验

以下代码设置新试验,并将作业目录命名为 root_run

from azureml.core import Workspace, Experiment
import azureml.core

# set experiment name and job name
ws = Workspace.from_config()
experiment_name = 'export-to-tensorboard'
exp = Experiment(ws, experiment_name)
root_run = exp.start_logging()

在这里,我们将加载糖尿病数据集(scikit-learn 附带的内置小型数据集),并将其拆分为测试和训练集。

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
X, y = load_diabetes(return_X_y=True)
columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
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}
}

运行试验并记录指标

对于此代码,我们将训练一个线性回归模型,并在运行历史记录中记录关键指标、alpha 系数 alpha 和均方误差 mse

from tqdm import tqdm
alphas = [.1, .2, .3, .4, .5, .6 , .7]
# try a bunch of alpha values in a Linear Regression (aka Ridge regression) mode
for alpha in tqdm(alphas):
  # create child runs and fit lines for the resulting models
  with root_run.child_run("alpha" + str(alpha)) as run:
 
   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"])
   # End train and eval

# log alpha, mean_squared_error and feature names in run history
   root_run.log("alpha", alpha)
   root_run.log("mse", mse)

将作业导出到 TensorBoard

使用 SDK 的 export_to_tensorboard() 方法,可以将 Azure 机器学习试验的作业历史记录导出到 TensorBoard 日志中,以便可以通过 TensorBoard 查看它们。

在以下代码中,我们将在当前工作目录中创建 logdir 文件夹。 在此文件夹中,我们将从中导出试验作业历史记录和日志 root_run ,然后将该作业标记为已完成。

from azureml.tensorboard.export import export_to_tensorboard
import os

logdir = 'exportedTBlogs'
log_path = os.path.join(os.getcwd(), logdir)
try:
    os.stat(log_path)
except os.error:
    os.mkdir(log_path)
print(logdir)

# export job history for the project
export_to_tensorboard(root_run, logdir)

root_run.complete()

注意

还可以通过指定运行 export_to_tensorboard(run_name, logdir) 的名称,将特定的运行导出到 TensorBoard

启动和停止 TensorBoard

导出此试验的作业历史记录后,可以使用 start() 方法启动 TensorBoard。

from azureml.tensorboard import Tensorboard

# The TensorBoard constructor takes an array of jobs, so be sure to pass it in as a single-element array here
tb = Tensorboard([], local_root=logdir, port=6006)

# If successful, start() returns a string with the URI of the instance.
tb.start()

完成后,请务必调用 TensorBoard 对象的 stop() 方法。 否则,TensorBoard 将继续运行,直到关闭笔记本内核。

tb.stop()

后续步骤

在本教程中,你创建了两个实验,并学习了如何针对其作业历史记录运行 TensorBoard,以识别潜在的优化和重新训练领域。