

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

# Debugger 教程
<a name="debugger-tutorial"></a>

以下主题将引导您完成从基础知识到高级使用案例的各个教程，了解如何使用 Debugger 来监控、分析和调试 SageMaker 训练作业。探索 Debugger 功能，了解如何使用 Debugger 高效地调试和改进机器学习模型。

**Topics**
+ [Debugger 教程视频](debugger-videos.md)
+ [Debugger 示例笔记本](debugger-notebooks.md)
+ [Debugger 高级演示和可视化](debugger-visualization.md)

# Debugger 教程视频
<a name="debugger-videos"></a>

以下视频介绍了使用 SageMaker Studio 和 A SageMaker I 笔记本实例的 Amazon SageMaker 调试器功能。

**Topics**
+ [在 Studio Classic 中使用亚马逊 SageMaker 调试器调试模型](#debugger-video-get-started)
+ [深入了解 Amazon SageMaker Debugger 和 SageMaker AI 模型监视器](#debugger-video-dive-deep)

## 在 Studio Classic 中使用亚马逊 SageMaker 调试器调试模型
<a name="debugger-video-get-started"></a>

* AWS 技术传播者朱利安·西蒙 \$1 时长：14 分 17 秒*

本教程视频演示了如何使用 Amazon SageMaker Debugger 捕获和检查训练模型中的调试信息。本视频中使用的示例训练模型是一个基于带有后端的 Keras 的简单卷积神经网络 (CNN)。 TensorFlow SageMaker TensorFlow 框架中的 AI 和调试器使您能够使用训练脚本直接构建估算器并调试训练作业。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/MqPdTj0Znwg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/MqPdTj0Znwg)


您可以在作者提供的[该 Studio 演示存储库](https://gitlab.com/juliensimon/amazon-studio-demos/-/tree/master)中找到该视频中的示例笔记本。您需要将`debugger.ipynb`笔记本文件和`mnist_keras_tf.py`训练脚本克隆到 SageMaker Studio 或 SageMaker 笔记本实例。在克隆这两个文件后，请指定 `debugger.ipynb` 笔记本中的 `mnist_keras_tf.py` 文件的 `keras_script_path` 路径。例如，如果您将两个文件克隆到同一目录中，请将其设置为 `keras_script_path = "mnist_keras_tf.py"`。

## 深入了解 Amazon SageMaker Debugger 和 SageMaker AI 模型监视器
<a name="debugger-video-dive-deep"></a>

* AWS 技术传播者朱利安·西蒙 \$1 时长：44 分 34 秒*

本视频会议探讨了调试器和 SageMaker 模型监视器的高级功能，这些功能有助于提高工作效率和模型质量。首先，此视频说明了如何使用 Debugger 检测和修复训练问题，对张量进行可视化以及改进模型。接下来，在 22:41，视频展示了如何使用 SageMaker AI Model Monitor 监控生产中的模型并识别预测问题，例如缺少特征或数据漂移。最后，它提供了成本优化技巧，以帮助您充分利用机器学习预算。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0zqoeZxakOI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0zqoeZxakOI)


您可以在作者提供的此 [AWS Dev Days 2020 存储库](https://gitlab.com/juliensimon/awsdevdays2020/-/tree/master/mls1)中找到视频中的示例笔记本。

# Debugger 示例笔记本
<a name="debugger-notebooks"></a>

SageMaker [aws/ amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) 存储库中提供了@@ [调试器示例笔记本](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/)。Debugger 示例笔记本将引导您完成调试和分析训练作业的基本到高级使用场景。

我们建议您在 SageMaker Studio 或笔记本实例上运行示例 SageMaker 笔记本，因为大多数示例都是为 SageMaker 人工智能生态系统中的训练任务而设计的，包括亚马逊 EC2、Amazon S3 和 Amaz SageMaker on Python SDK。

要将示例存储库克隆到 SageMaker Studio，请按照 [Amazon SageMaker Studio Tour](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-end-to-end.html) 中的说明进行操作。

**重要**  
要使用新的调试器功能，你需要升级 SageMaker Python SDK 和`SMDebug`客户端库。在你的 IPython 内核、Jupyter Notebook JupyterLab 或环境中，运行以下代码来安装最新版本的库并重新启动内核。  

```
import sys
import IPython
!{sys.executable} -m pip install -U sagemaker smdebug
IPython.Application.instance().kernel.do_shutdown(True)
```

## 用于剖析训练作业的 Debugger 示例笔记本
<a name="debugger-notebooks-profiling"></a>

以下列表显示了 Debugger 示例笔记本，其中介绍了 Debugger 的调整功能，用于监控并分析各种机器学习模型、数据集和框架的训练作业。


| 笔记本标题 | 框架 | 模型 | 数据集 | 说明 | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker 调试器分析数据分析](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/debugger_interactive_analysis_profiling/interactive_analysis_profiling_data.html)  |  TensorFlow  |  Keras 50 ResNet  | Cifar-10 |  本笔记本介绍了 Deb SageMaker ugger 捕获的分析数据的交互式分析。探索 `SMDebug` 交互式分析工具的全部功能。  | 
|  [使用 Amazon D SageMaker ebugger 分析机器学习训练](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_nlp_sentiment_analysis/sentiment-analysis-tf-distributed-training-bringyourownscript.html)  |  TensorFlow  |  1-D 卷积神经网络  |  IMDB 数据集  |  对 TensorFlow 一维CNN进行分析，对IMDB数据进行情感分析，该数据由标有正面或负面情绪的电影评论组成。浏览 Studio Debugger Insights 和 Debugger 分析报告。  | 
|  [使用各种分布式训练设置分析 TensorFlow ResNet 模型训练](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_profiling)  |  TensorFlow  | ResNet50 | Cifar-10 |  使用各种分布式 TensorFlow 训练设置运行训练作业，监控系统资源利用率，并使用调试器分析模型性能。  | 
|  [使用各种分布式训练设置分析 PyTorch ResNet 模型训练](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_profiling)   | PyTorch |  ResNet50  | Cifar-10 |  使用各种分布式 PyTorch 训练设置运行训练作业，监控系统资源利用率，并使用调试器分析模型性能。  | 

## 用于剖析模型参数的 Debugger 示例笔记本
<a name="debugger-notebooks-debugging"></a>

以下列表用于展示 Debugger 示例笔记本，介绍了 Debugger 的调整功能，用于调试各种机器学习模型、数据集和框架的训练作业。


| 笔记本标题 | 框架 | 模型 | 数据集 | 说明 | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker 调试器-使用内置规则](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_builtin_rule)  |  TensorFlow  |  卷积神经网络  | MNIST |  使用 Amazon SageMaker 调试器内置规则调试 TensorFlow模型。  | 
|  [亚马逊 SageMaker 调试器-Tensorflow 2.1](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow2)  |  TensorFlow  |  ResNet50  | Cifar-10 |  使用 Amazon SageMaker Debugger 挂钩配置和内置规则，使用 Tensorflow 2.1 框架调试模型。  | 
|  [可视化训练的调试张量 MXNet](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mnist_tensor_plot)  |  MXNet  |  Gluon 卷积神经网络  | Fashion MNIST |  运行训练作业并配置 SageMaker Debugger 以存储此作业中的所有张量，然后在笔记本中可视化这些张量。  | 
|  [使用 Amazon SageMaker 调试器启用现场训练](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mxnet_spot_training)   | MXNet |  Gluon 卷积神经网络  | Fashion MNIST |  了解 Debugger 如何从在竞价型实例上训练的作业中收集张量数据，以及如何使用 Debugger 内置规则进行托管式竞价型实例训练。  | 
| [解释使用 Amazon D SageMaker ebugger 预测个人收入的 XGBoost 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html) | XGBoost |  XGBoost 回归  |  [成人普查数据集](https://archive.ics.uci.edu/ml/datasets/adult)  | 学习如何使用调试器挂钩和内置规则从 XGBoost 回归模型中收集和可视化张量数据，例如损失值、特征和 SHAP 值。 | 

要查找模型参数和使用场景的高级可视化对象，请参阅下个主题 [Debugger 高级演示和可视化](debugger-visualization.md)。

# Debugger 高级演示和可视化
<a name="debugger-visualization"></a>

以下演示将引导您了解使用 Debugger 的高级应用场景和可视化脚本。

**Topics**
+ [使用 Amazon SageMaker 实验和调试器训练和修剪模型](#debugger-visualization-video-model-pruning)
+ [[使用 SageMaker Debugger 监控卷积自动编码器模型训练](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/autoencoder_mnist/autoencoder_mnist.html)](#debugger-visualization-autoencoder_mnist)
+ [[使用 SageMaker 调试器监控 BERT 模型训练中的注意力](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/bert_attention_head_view/bert_attention_head_view.html)](#debugger-visualization-bert_attention_head_view)
+ [[使用 SageMaker 调试器可视化卷积神经网络中的类激活地图 () CNNs](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/cnn_class_activation_maps/cnn_class_activation_maps.html)](#debugger-visualization-cnn_class_activation_maps)

## 使用 Amazon SageMaker 实验和调试器训练和修剪模型
<a name="debugger-visualization-video-model-pruning"></a>

* AWS 应用科学家 Nathalie Rauschmayr 博士 \$1 时长：49 分 26 秒*

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Tnv6HsT1r4I/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Tnv6HsT1r4I)


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

本视频演示了一种*模型修剪*技术，该技术使预训练的 ResNet 50 和 AlexNet 模型更轻、更实惠，同时保持模型精度的高标准。

SageMaker AI Estimator 在带有 PyTorch 框架的 Dee AWS p Learning Containers 中训练 PyTorch 模型库中提供的算法，Debugger 则从训练过程中提取训练指标。

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

学习目标如下：
+  学习如何使用 SageMaker AI 来加速 ML 模型训练并提高模型质量。
+  通过自动捕获输入参数、配置和结果，了解如何使用 SageMaker 实验管理训练迭代。
+  了解 Debugger 如何通过自动从卷积神经网络的权重、梯度和激活输出等指标中捕获实时张量数据，使训练过程变得透明。
+ 用于 CloudWatch 在调试器发现问题时触发 Lambda。
+  使用 SageMaker 实验和调试器掌握 SageMaker 训练过程。

你可以从 D [SageMaker ebugger I PyTorch terative Model](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_iterative_model_pruning) Pruning 中找到此视频中使用的笔记本和训练脚本。

下图显示了迭代模型修剪过程如何根据激活输出和梯度评估的重要性 AlexNet 等级剪掉 100 个最不重要的滤波器，从而减小的大小。

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

![\[包含模型修剪结果输出可视化效果的图像\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-model-pruning-results-alexnet.gif)


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

![\[在 Studio 中使用调试器实现张量可视化的图像 SageMaker\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-model-pruning-studio.png)


**在 SageMaker Studio 中，选择 “**实验**” 选项卡，从修剪过程中选择 Debugger 保存的张量列表，然后编写 “试用组件列表” 面板。**选择所有 10 个迭代，然后选择**添加图表**以创建**试验组件图表**。在确定了要部署的模型之后，选择试验组件并选择菜单以执行操作，或者选择**部署模型**。

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

```
# 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 Debugger 监控卷积自动编码器模型训练](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/autoencoder_mnist/autoencoder_mnist.html)
<a name="debugger-visualization-autoencoder_mnist"></a>

本笔记本演示了 SageMaker Debugger 如何在 MNIST 手写数字图像数据集上可视化来自无监督（或自监督）学习过程的张量。

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

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

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

卷积编码器支持具有较小输入数据大小的聚类算法，并可提升聚类算法（例如 k-means、k-NN 和 t-Distributed Stochastic Neighbor (t-SNE) 嵌入）的性能。

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

![\[卷积自动编码器的概念图\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-cnn-autoencoder-plot.gif)


## [使用 SageMaker 调试器监控 BERT 模型训练中的注意力](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/bert_attention_head_view/bert_attention_head_view.html)
<a name="debugger-visualization-bert_attention_head_view"></a>

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

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

预训练的 BERT 模型可以通过额外的输出层进行微调，以实现 NLP 任务中的 state-of-the-art模型训练，例如自动回答问题、文本分类等。

Debugger 从微调过程中收集张量。在 NLP 的上下文下，神经元的权重被称为*注意力*。

本笔记本演示了如何在斯坦福问答数据集中使用 [GluonNLP 模型库中的预训练的 BERT 模型](https://gluon-nlp.mxnet.io/model_zoo/bert/index.html)，以及如何 SageMaker 设置 Debugger 来监控训练作业。

在查询和关键向量中绘制*注意力分数*和各个神经元有助于识别模型预测不正确的原因。借助 SageMaker AI Debugger，您可以检索张量，并在训练*进行时实时绘制注意力头部视图*，并了解模型正在学习什么。

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

![\[注意力分数的动画\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-attention_scores.gif)


## [使用 SageMaker 调试器可视化卷积神经网络中的类激活地图 () CNNs](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/model_specific_realtime_analysis/cnn_class_activation_maps/cnn_class_activation_maps.html)
<a name="debugger-visualization-cnn_class_activation_maps"></a>

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

在本笔记本中， PyTorch ResNet 模型使用[德国交通标志数据集进行训练，该数据集](http://benchmark.ini.rub.de/)包含40多类与交通相关的物体，总共超过50,000张图像。

![\[CNN 类激活图的动画\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-cnn-class-activation-maps.gif)


在训练过程中， SageMaker Debugger 会收集张量以实时绘制类激活地图。如动画图像所示，类激活图（也称为*显著图*）以红色突出显示具有高激活率的区域。

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