

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

下列主題的教學課程將逐步引導您完成使用 Debugger 監視、效能分析和除錯 SageMaker 訓練工作的基礎到進階使用案例。探索 Debugger 功能，並瞭解如何使用 Debugger 以有效除錯和改善機器學習模型。

**Topics**
+ [Debugger 教學課程影片](debugger-videos.md)
+ [偵錯工具範例筆記本](debugger-notebooks.md)
+ [偵錯工具進階示範和視覺化](debugger-visualization.md)

# Debugger 教學課程影片
<a name="debugger-videos"></a>

下列影片提供使用 SageMaker Studio 和 SageMaker AI 筆記本執行個體的 Amazon SageMaker Debugger 功能之導覽。

**Topics**
+ [在 Studio Classic 使用 Amazon SageMaker Debugger 為模型除錯](#debugger-video-get-started)
+ [深入探索 Amazon SageMaker Debugger 和 SageMaker AI Model Monitor](#debugger-video-dive-deep)

## 在 Studio Classic 使用 Amazon SageMaker Debugger 為模型除錯
<a name="debugger-video-get-started"></a>

*Julien Simon， AWS 技術發展者 \$1 長度：14 分鐘 17 秒*

本教學影片示範如何使用 Amazon SageMaker Debugger，從訓練模型中擷取和檢查偵錯資訊。此影片中使用的訓練模型範例，是以 Keras 為基礎，搭配 TensorFlow 後端的簡單卷積神經網路 (CNN)。Tensorflow 架構和 Debugger 中的 SageMaker 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 Model Monitor
<a name="debugger-video-dive-deep"></a>

*Julien Simon， AWS 技術發展者 \$1 長度：44 分鐘 34 秒*

這一集影片探討 Debugger 和 SageMaker Model Monitor 的進階功能，有助於提升模型的生產力和品質。首先，此影片示範如何偵測和修正訓練問題、視覺化張量，以及使用偵錯工具來改善模型。接下來，在 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)提供的影片中，找到此範例筆記本。

# 偵錯工具範例筆記本
<a name="debugger-notebooks"></a>

[aws/amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) 儲存庫提供 [SageMaker Debugger 範例筆記本](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/)。偵錯工具範例筆記本將逐步引導您完成偵錯和分析訓練任務的基礎到進階使用案例。

我們建議您在 SageMaker Studio 或 SageMaker 筆記本執行個體中執行範例筆記本，因為大多數範例都是專門設計用於 SageMaker AI 生態系統中的訓練任務，包括 Amazon EC2、Amazon S3 和 Amazon SageMaker Python SDK。

若要將範例儲存庫複製到 SageMaker Studio，請遵循 [Amazon SageMaker Studio 導覽](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-end-to-end.html)中的指示進行操作。

**重要**  
若要使用新的偵錯工具功能，您需要升級 SageMaker SDK 和 `SMDebug` 用戶端程式庫。在您的 iPython 核心、Jupyter 筆記本或 JupyterLab 環境中，執行以下程式碼以安裝最新版本的程式庫，並重新啟動核心。  

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

## 分析訓練任務的偵錯工具範例筆記本
<a name="debugger-notebooks-profiling"></a>

下列清單列出偵錯工具範例筆記本，說明偵錯工具針對不同機器學習模型、資料集和架構監控及分析訓練任務的適應性。


| 筆記本標題 | 架構 | 模型 | 資料集 | Description | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker Debugger 分析資料分析](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/debugger_interactive_analysis_profiling/interactive_analysis_profiling_data.html)  |  TensorFlow  |  Keras ResNet50  | Cifar-10 |  本筆記本提供 SageMaker Debugger 擷取的分析資料之互動式分析的簡介。探索 `SMDebug` 互動式分析工具的完整功能。  | 
|  [使用 Amazon SageMaker Debugger 對機器學習訓練進行分析](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/tensorflow_nlp_sentiment_analysis/sentiment-analysis-tf-distributed-training-bringyourownscript.html)  |  TensorFlow  |  一維卷積神經網路  |  IMDB 資料集  |  分析 TensorFlow 1-D CNN，以便對 IMDB 資料進行情緒分析，其中包含標籤為具備正面或負面情緒的電影評論。瀏覽 Studio 偵錯工具深入分析和偵錯工具分析報告。  | 
|  [使用各種分散式訓練設定對 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 訓練任務、監控系統資源使用率，並使用偵錯工具分析模型效能。  | 

## 分析模型參數的偵錯工具範例筆記本
<a name="debugger-notebooks-debugging"></a>

下列清單列出偵錯工具範例筆記本，說明偵錯工具針對不同機器學習模型、資料集和架構對訓練任務進行偵錯的適應性。


| 筆記本標題 | 架構 | 模型 | 資料集 | Description | 
| --- | --- | --- | --- | --- | 
|  [Amazon SageMaker Debugger - 使用內建規則](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/tensorflow_builtin_rule)  |  TensorFlow  |  卷積神經網路  | MNIST |  使用 Amazon SageMaker Debugger 內建規則進行 TensorFlow 模型偵錯。  | 
|  [Amazon SageMaker Debugger - 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 Debugger 啟用 Spot 訓練](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger/mxnet_spot_training)   | MXNet |  Gluon 卷積神經網路  | Fashion MNIST |  了解偵錯工具如何從 Spot 執行個體上的訓練任務收集張量資料，以及如何搭配受管 Spot 訓練使用偵錯工具內建規則。  | 
| [解釋使用 Amazon SageMaker Debugger 預測個人收入的 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-visualization.md)。

# 偵錯工具進階示範和視覺化
<a name="debugger-visualization"></a>

下列示範將逐步引導您使用偵錯工具完成進階使用案例和視覺化指令碼。

**Topics**
+ [使用 Amazon SageMaker Experiments 和 Debugger 訓練和刪減模型](#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 Debugger 監控 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 Debugger 在卷積神經網路 (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 Experiments 和 Debugger 訓練和刪減模型
<a name="debugger-visualization-video-model-pruning"></a>

*Nathalie Rauschmayr 醫生， AWS 應用科學家 \$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 Experiments 和偵錯工具如何簡化訓練任務的管理。Amazon SageMaker Debugger 提供有關訓練任務的透明可見度，並將訓練指標儲存到 Amazon S3 儲存貯體中。SageMaker 實驗可讓您透過 SageMaker Studio 呼叫訓練資訊做為*試驗*，並支援訓練任務視覺化。這可協助您維持模型的高品質，同時根據重要性排名減少較不重要的參數。

這部影片示範了*模型刪減*技術，讓預先訓練的 ResNet50 和 AlexNet 模型更輕量化且經濟實惠，同時保留模型準確度的高標準。

SageMaker AI 估算器會在具有 PyTorch 架構的 AWS 深度學習容器中訓練 PyTorch 模型庫所提供的演算法，而偵錯工具會從訓練程序中擷取訓練指標。

影片也會示範如何設定偵錯工具自訂規則來監看已剔除模型的準確度、在準確度達到閾值時觸發 Amazon CloudWatch 事件和 AWS Lambda 函數，以及自動停止剔除程序以避免備援反覆運算。

學習目標如下：
+  了解如何使用 SageMaker AI 加速 ML 模型訓練並改善模型品質。
+  了解如何自動擷取輸入參數、組態和結果，以使用 SageMaker Experiments 管理訓練反覆運算。
+  探索偵錯工具如何從加權、批度和卷積神經網路的啟用輸出等指標自動擷取即時張量資料，以讓訓練程序透明化。
+ 當 Debugger 擷取問題時，使用 CloudWatch 觸發 Lambda。
+  使用 SageMaker Experiments 和偵錯工具精通 SageMaker 訓練程序。

若要尋找這部影片所使用的筆記本和訓練指令碼，請參閱 [SageMaker Debugger PyTorch 反覆運算模型刪減](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-debugger/pytorch_iterative_model_pruning)。

下列影像顯示反覆運算模型刪減程序如何根據啟用輸出和坡度所評估的重要性排名，刪去 100 個最不重要的篩選條件，以縮減 AlexNet 的大小。

刪減程序已將最初的 5000 萬個參數縮減為 1800 萬個參數。它也已將預估模型大小從 201 MB 縮減為 73 MB。

![\[包含模型刪減結果輸出視覺效果的影像\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-model-pruning-results-alexnet.gif)


您也需要追蹤模型準確度，而下列影像顯示您可如何繪製模型刪減程序，以根據 SageMaker Studio 中的參數數量視覺化模型準確度的變更。

![\[在 SageMaker Studio 中使用偵錯工具的張量視覺效果影像\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-model-pruning-studio.png)


在 SageMaker Studio 中，選擇**實驗**索引標籤，從刪減程序中選取由偵錯程式儲存的張量清單，然後構成**試驗元件清單**面板。將十個反覆運算全選，然後選擇**新增圖表**，以建立**試驗元件圖表**。決定要部署的模型之後，請選擇試驗元件和要執行動作的功能表，或選擇**部署模型**。

**注意**  
若要使用下列筆記本範例透過 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 平均數、k-NN 和 t-Distributed Stochastic Neighbor Embedding (t-SNE) 等叢集演算法的效能。

此筆記本範例示範如何使用偵錯工具視覺化隱含變數，如下列動畫所示。它也示範 t-SNE 演算法如何將隱含變數分類為十個叢集，並將它們投影到 2D 空間中。影像右側的散佈圖色彩結構呈現真正的值，說明 BERT 模型和 t-SNE 演算法將隱含變數整理為叢集的情況是否良好。

![\[卷積自動編碼器的概念圖\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-cnn-autoencoder-plot.gif)


## [使用 SageMaker Debugger 監控 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 億個英文文字的單字 (權杖)，來源為 Wikipedia 和電子書等。若為簡單範例，BERT 模型可將高*注意力*提供給來自主詞權杖的適當動詞權杖或代名詞權杖。

預先訓練的 BERT 模型可使用額外的輸出層進行微調，在問題回應自動化、文字分類等 NLP 任務中達到最先進的模型訓練成果。

偵錯工具從微調程序收集張量。在 NLP 的內容中，神經元的權重稱為*注意力*。

此筆記本示範如何在 Stanford 問題和回答資料集上使用[來自 GluonNLP 模型庫的預先訓練 BERT 模型](https://gluon-nlp.mxnet.io/model_zoo/bert/index.html)，以及如何設定 SageMaker Debugger 來監控訓練任務。

在查詢和關鍵向量中繪製*注意力分數* 和個別神經元，可協助您識別不正確模型預測的原因。透過 SageMaker AI Debugger，您可以在訓練進行並了解模型學習內容的同時，擷取張量並即時繪製*注意力頭檢視畫面*。

下列動畫顯示筆記本範例提供的訓練任務中，十個反覆運算的前 20 個輸入權杖的注意力分數。

![\[注意力分數的動畫\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-attention_scores.gif)


## [使用 SageMaker Debugger 在卷積神經網路 (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 來繪製類別啟用地圖，以供卷積神經網路 (CNN) 內的影像偵測和分類使用。在深度學習中，*卷積神經網路 (CNN 或 ConVNet)* 屬於深度神經網路類別，最常用於分析視覺影像。自動駕駛車輛是採用分類啟用地圖的其中一個應用程式，這需要影像的立即偵測和分類，例如交通號誌、道路和障礙物。

在此筆記本中，PyTorch ResNet 模型是在[德國交通號誌資料集](http://benchmark.ini.rub.de/)上進行訓練，該資料集包含超過 40 種類別的交通相關物件，以及總共超過 50,000 個影像。

![\[CNN 類別啟用地圖的動畫\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-cnn-class-activation-maps.gif)


在訓練程序期間，SageMaker Debugger 會收集張量，以即時繪製類別啟用地圖。如此動畫影像所示，類別啟用地圖 (也稱為*顯著性地圖*) 會以紅色突顯高度啟用的區域。

您可以使用偵錯工具擷取的張量，視覺化啟用地圖如何在模型訓練期間進化。首先，模型會在訓練任務開始時偵測左下角的邊緣。在訓練繼續進行的同時，焦點會移動到中央並偵測速度限制號誌，而模型成功地將輸入影像預測為類別 3，這是速度限制 60km/h 號誌的類別，具有 97% 的信賴度。