跟踪和比较教程 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

跟踪和比较教程

本教程演示了如何使用 Amazon SageMaker Studio 直观地跟踪和比较模型训练实验中的试验。本教程的基础是 MNIST 手写数字分类实验笔记本。

旨在使得能够在 MNIST 笔记本打开的情况下,在 Studio 的旁边查看本主题。在您遍历单元格时,本文档中的这一部分会突出显示相关代码并向您说明如何在 Studio 中观察结果。为简洁起见,已编辑一些代码段。

要清除笔记本创建的资源,请参阅清理 Amazon SageMaker 实验资源

有关展示 Studio 的其他功能的教程,请参阅 Amazon SageMaker Studio 导览

先决条件

  • MNIST 示例笔记本和配套 mnist.py 文件的本地副本。这两个文件都可从 aws/amazon-sagemaker-examples sagemaker_experiments/mnist-handwritten-digits-classification-experiment存储库中的 文件夹获得。要下载文件,请选择每个链接,右键单击 Raw (原始) 按钮,然后选择 Save as (另存为)

  • 要登录到 AWS SSO Studio 的 IAM 或 SageMaker 账户。有关更多信息,请参阅注册 Amazon SageMaker Studio

在 Studio 中打开笔记本

打开 笔记本

  1. 登录到 Studio。

  2. 在左侧边栏中,选择 File Browser (文件浏览器) 图标 ( )。

  3. 在文件浏览器窗格的顶部,选择 Up arrow (上箭头键) 图标,此时将打开 File Upload (文件上传) 对话框。浏览找到并选择您的本地版本的 mnist-handwritten-digits-classification-experiment.ipynbmnist.py 文件,然后选择 Open (打开)

  4. 这两个文件在文件浏览器中列出。双击上传的笔记本文件可在新选项卡中打开笔记本。

  5. 在笔记本的右上角,确保内核是 Python 3 (Data Science) (Python 3 (数据科学))。如果不是,请选择当前内核名称以打开 Select Kernel (选择内核) 下拉列表。选择 Python 3 (Data Science) (Python 3 (数据科学)),然后选择 Select (选择)

安装实验开发工具包并导入模块

SageMaker 实验开发工具包与 Amazon SageMaker Python SDK分开,后者预先安装在 SageMaker Studio 中。运行笔记本中的前几个单元格以安装实验并导入实验模块。笔记本单元格的相关部分如下所示。有关实验开发工具包的更多信息,请参阅 sagemaker-experiments

import sys !{sys.executable} -m pip install sagemaker-experiments
import sagemaker from sagemaker import get_execution_role from sagemaker.session import Session from sagemaker.analytics import ExperimentAnalytics from smexperiments.experiment import Experiment from smexperiments.trial import Trial from smexperiments.trial_component import TrialComponent from smexperiments.tracker import Tracker

转换和跟踪输入数据

接下来的几个单元格创建一个 Amazon S3 存储桶和该存储桶一个名为 mnist 的文件夹。在 Studio 中,文件浏览器显示 mnist 文件夹。输入数据下载到 mnist/MNIST/raw 文件夹,归一化,然后转换后的数据上传到 mnist/MNIST/processed 文件夹。您可以向下钻取到 mnist 文件夹以显示数据文件,但不打开数据文件。

您的屏幕应类似于以下内容:

Dataset (数据集) 部分的最后一个单元格为转换作业创建跟踪器。跟踪器会记录标准化参数以及存储转换后数据集的 Amazon S3 存储桶的 URI。在后面的部分中,我们将说明如何在 Studio 中查找此信息。在下一个部分中,跟踪器用于跟踪实验和试验运行。

with Tracker.create(display_name="Preprocessing", sagemaker_boto_client=sm) as tracker: tracker.log_parameters({ "normalization_mean": 0.1307, "normalization_std": 0.3081, }) tracker.log_input(name="mnist-dataset", media_type="s3/uri", value=inputs)

创建和跟踪实验

以下过程创建并跟踪实验以确定模型的 num_hidden_channel 超参数的效果。作为实验的一部分,在一个循环内创建了五个试验,num_hidden_channel 超参数的每个值对应一个试验。稍后在笔记本中,您将比较这五个试验的结果。

  1. 在 Studio 的左侧边栏中,选择 Components and registrys (SageMaker组件和注册表) 图标 ( )。在下拉菜单中,选择 Experiments and trials (实验和试验) 以显示您账户中的实验列表。

  2. 运行以下单元格。

    mnist_experiment = Experiment.create( experiment_name=f"mnist-hand-written-digits-classification-{int(time.time())}", description="Classification of mnist hand-written digits", sagemaker_boto_client=sm) print(mnist_experiment)

    输出:

    Experiment(sagemaker_boto_client=<botocore.client.SageMaker object at 0x7f7152b326d8>, experiment_name='mnist-hand-written-digits-classification-1575947870', description='Classification of mnist hand-written digits', experiment_arn='arn:aws:sagemaker:us-east-2:acct-id:experiment/mnist-hand-written-digits-classification-1575947870')

    在代码运行后,该实验将在实验列表中包含一个对应的条目。可能需要一段时间才能显示,您可能必须刷新实验列表。您的屏幕应类似于以下内容:

  3. 运行以下单元格。

    preprocessing_trial_component = tracker.trial_component

    在代码运行后,实验列表将包含一个标为 Unassigned trial components (未分配的试验组件) 的条目。试验组件条目是之前创建的数据预处理步骤。双击试验组件以进行验证。试验组件目前没有与实验相关联。您的屏幕应类似于以下内容:

  4. 在实验浏览器顶部的导航位置提示中选择 Home 图标。在此处双击实验以显示实验中的试验列表。

  5. 以下代码为实验创建试验。每个试验通过对 num_hidden_channel 超参数使用不同的数字来训练模型。将预处理试验组件添加到每个试验来进行完整跟踪(例如,用于审计目的)。该代码还指定了以下指标的定义:

    • 训练损失

    • 测试损失

    • 测试精度

    定义告知 SageMaker 从算法的日志输出中捕获这些指标。这些指标稍后用于评估和比较模型。

    preprocessing_trial_component = tracker.trial_component for i, num_hidden_channel in enumerate([2, 5, 10, 20, 32]): trial_name = f"cnn-training-job-{num_hidden_channel}-hidden-channels-{int(time.time())}" cnn_trial = Trial.create( trial_name=trial_name, experiment_name=mnist_experiment.experiment_name, sagemaker_boto_client=sm, ) hidden_channel_trial_name_map[num_hidden_channel] = trial_name cnn_trial.add_trial_component(preprocessing_trial_component) estimator = PyTorch( py_version='py3', framework_version='1.1.0', ..., hyperparameters={ 'hidden_channels': num_hidden_channel, ... }, metric_definitions=[ {'Name':'train:loss', 'Regex':'Train Loss: (.*?);'}, {'Name':'test:loss', 'Regex':'Test Average loss: (.*?),'}, {'Name':'test:accuracy', 'Regex':'Test Accuracy: (.*?)%;'} ], enable_sagemaker_metrics=True, ) cnn_training_job_name = "cnn-training-job-{}".format(int(time.time())) estimator.fit( inputs={'training': inputs}, job_name=cnn_training_job_name, experiment_config={ "TrialName": cnn_trial.trial_name, "TrialComponentDisplayName": "Training", }, )

    试验列表会在每个训练作业运行时自动更新。每次显示试验需要花费几分钟时间。您的屏幕应类似于以下内容:

比较和分析试验

此部分内容将脱离笔记本,向您说明如何使用 SageMaker Studio UI 比较和分析已训练的模型。

查看试验的详细信息

  1. 双击其中一个试验以显示与该试验关联的试验组件的列表。每个试验均有一个预处理作业和训练作业。双击其中一个组件以打开一个显示有关每个组件的信息的新选项卡。

  2. Trial stages (试验阶段) 下,选择 Preprocessing (预处理)。在 Describe Trial Component (描述试验组件) 菜单上,选择 Parameters (参数) 以显示之前记录的标准化参数。接下来,选择 Artifacts (构件) 以显示存储了已转换数据集的 Amazon S3 存储桶的 URI。

  3. Trial stages (试验阶段) 下,选择 Training (训练)。在 Describe Trial Component (描述试验组件) 菜单上,选择以下项目以显示有关训练作业试验组件的信息。

    • 指标test:losstest:accuracytrain:loss

    • Parameters (参数) – 超参数值和实例信息

    • Artifacts (构件) – 输入数据集和输出模型的 Amazon S3 存储

    • AWS Settings (AWS 设置) – 作业名称、ARN、状态、创建时间、训练时间、计费时间、实例信息等

查看按 test:accuracy 排序的试验列表

  1. 选择 TRIAL COMPONENTS (试验组件) 上方的导航位置提示上的试验名称以显示试验列表。

  2. 选择所有五个试验。按住 Ctrl/CMD 键并选择每个试验。右键单击所选内容,然后选择 Open in trial component list (在试验组件列表中打开)。这将打开一个新的选项卡,其中会显示每个试验和试验组件。

  3. 如果 TABLE PROPERTIES (表属性) 窗格未打开,请选择右上角的 Settings (设置) 图标 ( ) 来将其打开。取消选择除 Trial (试用)Metrics (指标)Training job (训练作业) 之外的所有内容。选择 Settings (设置) 图标以关闭窗格。

  4. 选择 test:accuracy 列标头以通过降低最大测试精度来对列表进行排序。您的屏幕应类似于以下内容:

查看 test:lossnum_hidden_channel 的图表

  1. TRIAL COMPONENTS (试验组件) 窗格中,选择所有五个试验,然后选择 Add chart (添加图表)。在图表区域内进行选择,以打开 CHART PROPERTIES (图表属性) 的首选项窗格。

  2. CHART PROPERTIES (图表属性) 中,选择以下内容:

    • Data type (数据类型) - Summary statistics (摘要统计数据)

    • Chart type (图表类型) - Line (线条)

    • X-axis (X 轴) - hidden-channels (隐藏的通道)

    • Y 轴 - test:loss_last

    • Color (颜色) - None (无)

    您的屏幕应类似于以下内容: