调试程序 高级演示和可视化 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

调试程序 高级演示和可视化

以下演示将指导您完成使用 调试程序 的高级使用案例和可视化脚本。

通过 Amazon SageMaker 实验和调试程序训练和优化模型

AWS 应用科学家 | 长度:49 分 26 秒

了解 Amazon SageMaker 实验和 调试程序 如何简化训练作业的管理。Amazon SageMaker 调试程序 提供对训练作业的透明可见性,并将训练指标保存到 Amazon S3 存储桶中。SageMaker通过 实验,您可以通过 Studio 将训练信息作为SageMaker试验 调用,并支持训练作业的可视化。这有助于您保持高模型质量,同时根据重要性排名减少不太重要的参数。

本视频演示模型修剪 方法,该技术使预训练的 ResNet50 和 AlexNet 模型更轻、更经济实惠,同时保持高标准的模型精度。

SageMaker 评估程序在具有 PyTorch 框架的 AWS Deep Learning Containers 中训练从 PyTorch Model Zoo 提供的算法,并且 调试程序 从训练过程中提取训练指标。

该视频还演示了如何设置 调试程序 自定义规则来监视修剪模型的准确性,在精度达到阈值时触发 Amazon CloudWatch 事件和 AWS Lambda 函数,以及自动停止修剪过程以避免冗余迭代。

学习目标如下:

  • 了解如何使用 SageMaker 加速 ML 模型训练并提高模型质量。

  • 了解如何通过自动捕获输入参数、配置和结果来管理 SageMaker 的训练迭代。

  • 了解调试程序如何通过自动从卷积神经网络的权重、梯度和激活输出等指标中捕获实时张量数据,使训练过程变得透明。

  • 使用 CloudWatch 在调试程序捕获问题时触发 Lambda。

  • 使用 SageMaker 实验和调试程序掌握 SageMaker 训练过程。

您可以从 SageMaker 调试程序 PyTorch 迭代模型修剪中找到此视频中使用的笔记本和训练脚本。

下图显示了迭代模型修剪过程如何根据由激活输出和梯度评估的重要性等级来去掉 100 个最不重要的筛选条件,从而减小 AlexNet 的大小。

修剪过程将最初的 5000 万个参数减少到 1800 万个。它还将估计的模型大小从 201 MB 减少到 73 MB。


                包含模型修剪结果输出可视化效果的图像

您还需要跟踪模型精度,下图显示如何绘制模型修剪过程,以便根据 SageMaker Studio 中的参数数量来对模型准确度的变化进行可视化。


                在 调试程序 Studio 中使用 SageMaker 的张量可视化的图像

在 SageMaker Studio 中,选择 Experiments (实验) 选项卡,从修剪过程中选择由 调试程序 保存的张量列表,然后组成 Trial Component List (试验组件列表) 面板。选择所有十个迭代,然后选择 Add chart (添加图表) 以创建试验组件图表。确定要部署的模型后,请选择试验组件,然后选择用于执行操作的菜单,或选择 Deploy model (部署模型)

注意

要使用以下笔记本示例通过 SageMaker Studio 部署模型,请在 train 脚本中 train.py 函数的末尾添加一行。

# In the train.py script, look for the train function in line 58. def train(epochs, batch_size, learning_rate): ... print('acc:{:.4f}'.format(correct/total)) hook.save_scalar("accuracy", correct/total, sm_metric=True) # Add the following code to line 128 of the train.py script to save the pruned models # under the current SageMaker Studio model directory torch.save(model.state_dict(), os.environ['SM_MODEL_DIR'] + '/model.pt')

使用 SageMaker 调试程序 监控卷积自动编码器模型训练

此笔记本演示 SageMaker 调试程序如何在手写数字的 MNIST 图像数据集上可视化来自不受监督(或自监督)学习过程的张量。

此笔记本中的训练模型是一个带有 MXNet 框架的卷积自动编码器。卷积自动编码器具有瓶颈形状的卷积神经网络,由编码器部分和解码器部分组成。

此示例中的编码器具有两个卷积层,以生成输入图像的压缩表示(潜在变量)。在这种情况下,编码器从大小(28,28)的原始输入图像中生成大小(1,20)的潜在变量,并显著减少训练数据的大小达 40 倍。

解码器有两个解卷积层,并通过重建输出图像来确保潜在变量保留关键信息。

卷积编码器为聚类算法提供支持,具有较小的输入数据大小和聚类算法(如 k-means、k-NN 和 t-Distributed Stochic Neighbor Embeding (t-SNE))的性能。

此笔记本示例演示如何使用调试程序来可视化潜在变量,如下面的动画所示。它还演示 t-SNE 算法如何将潜在变量分为十个聚类并将它们投影到二维空间中。图像右侧的散点图颜色方案反映了真实值,以显示 BERT 模型和 t-SNE 算法将潜在变量组织到聚类中的程度。


                卷积自动编码器的概念图

使用 SageMaker 调试程序 监控 BERT 模型训练中的注意力

来自转换器的双向编码表示 (BERT) 是一种语言表示模型。正如模型名称所反映的那样,BERT 模型建立在用于自然语言处理 (NLP) 的迁移学习转换器模型 之上。

BERT 模型接受了不受监督任务的预训练,例如,预测句子中缺失的单词或预测自然接在前一个句子之后的下一个句子。训练数据包含 33 亿个字词(标记)的英文文本,如维基百科和电子书籍。对于一个简单的例子,BERT 模型可以高度注意 来自主题标记的适当动词标记或代词标记。

预先训练的 BERT 模型可以通过额外的输出层进行微调,以便在 NLP 任务中实现最先进的模型训练,例如自动响应问题、文本分类等。

调试程序 从微调过程中收集张量。在 NLP 上下文中,神经元的权重称为注意力

此笔记本演示如何在 Model ZooGluonNLP 的 预训练 BERT 模型,演示如何在 Stank Question and Answering 数据集上使用SageMaker以及如何设置 调试程序 以监控训练作业。

在查询和关键向量中绘制注意力分数 和各个神经元有助于识别模型预测不正确的原因。借助 SageMaker 调试程序,您可以检索张量,并在训练进行过程中实时绘制注意力头视图并了解模型正在学习的内容。

下面的动画显示在笔记本示例中提供的训练作业中十次迭代的前 20 个输入标记的注意力分数。


                注意力分数的动画

使用 SageMaker 调试程序可视化卷积神经网络 (CNN) 中的类激活图

此笔记本演示如何使用 SageMaker 调试程序 绘制类激活图,以便在卷积神经网络 (CNN) 中用于图像检测和分类。在深度学习中,卷积神经网络(CNN 或 ConvNet) 是一类深度神经网络,最常用于分析视觉图像。采用类激活图的应用程序之一是自动驾驶汽车,这需要对图像进行即时检测和分类,例如,交通标志、道路和障碍物。

在此笔记本中,PyTorch ResNet 模型在德语流量签名数据集上进行训练,该数据集包含 40 多种类别的流量相关对象和总共 50000 多张图像。


                CNN 类激活图的动画

在训练过程中,SageMaker 调试程序 收集张量来实时绘制类激活图。如动画图像所示,类激活图(也称为显著图)以红色突出显示具有高激活率的区域。

使用调试程序捕获的张量,您可以对激活图在模型训练期间的演变方式进行可视化。模型首先在训练作业开始时检测左下角的边缘。随着训练进行,焦点转移到中心并检测限速标志,模型成功地将输入图像预测为类别 3,这是限速 60km/h 标志的类别,置信度为 97%。