Debugger 進階示範和視覺化 - Amazon SageMaker

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

Debugger 進階示範和視覺化

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

使用 Amazon SageMaker Experiments 和 Debugger 訓練和剪除模型

Nathalie Rauschmayr 醫生, AWS 應用科學家 | 長度:49 分鐘 26 秒

了解 Amazon SageMaker Experiments 和 Debugger 如何簡化訓練任務的管理。Amazon SageMaker Debugger 提供訓練任務的透明可見性,並將訓練指標儲存至您的 Amazon S3 儲存貯體。 SageMaker 實驗可讓您透過 SageMaker Studio 將訓練資訊稱為試驗,並支援訓練任務的視覺化。這可協助您維持模型的高品質,同時根據重要性排名減少較不重要的參數。

此影片示範模型修剪技術,讓預先訓練的 ResNet50 和 AlexNet 模型更輕量且經濟實惠,同時保持模型準確度的高標準。

SageMaker 估算器使用 PyTorch 架構訓練從深度學習容器的 PyTorch AWS 模型區域提供的演算法,Debugger 會從訓練程序擷取訓練指標。

影片也會示範如何設定偵錯工具自訂規則,以監控剪除模型的準確度、在準確度達到閾值時觸發 Amazon CloudWatch 事件和 AWS Lambda 函數,以及自動停止剪除程序以避免重複迭代。

學習目標如下:

  • 了解如何使用 SageMaker 來加速 ML 模型訓練並改善模型品質。

  • 了解如何透過 SageMaker Experiments 自動擷取輸入參數、組態和結果來管理訓練迭代。

  • 探索偵錯工具如何從加權、批度和卷積神經網路的啟用輸出等指標自動擷取即時張量資料,以讓訓練程序透明化。

  • 用於 CloudWatch 在偵錯工具發現問題時觸發 Lambda。

  • 使用 SageMaker Experiments 和 Debugger 掌握 SageMaker 訓練程序。

您可以在 SageMaker Debugger PyTorch 迭代模型刪除 中找到此影片中使用的筆記本和訓練指令碼。

下圖顯示迭代模型剪除程序如何根據啟動輸出和漸層評估的重要性等級,縮減 100 個最不重要的篩選條件, AlexNet 以縮減 的大小。

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

包含模型刪減結果輸出視覺效果的影像

您還需要追蹤模型準確度,下圖顯示如何繪製模型剪除程序,以根據 SageMaker Studio 中的參數數目視覺化模型準確度的變化。

Studio 中使用 Debugger 的張量視覺化影像 SageMaker

在 SageMaker Studio 中,選擇實驗索引標籤,從剪除程序中選取 Debugger 儲存的張量清單,然後編寫試驗元件清單面板。將十個反覆運算全選,然後選擇新增圖表,以建立試驗元件圖表。決定要部署的模型之後,請選擇試驗元件和要執行動作的功能表,或選擇部署模型

注意

若要使用下列筆記本範例透過 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 監控卷積自動編碼器模型訓練

此筆記本示範 SageMaker Debugger 如何在手寫數字MNIST的影像資料集上視覺化來自無監督 (或自我監督) 學習程序的張量。

此筆記本中的訓練模型是具有 MXNet 架構的卷積自動編碼器。此卷積自動編碼器具有瓶頸成形的卷積神經網路,其中包含一個編碼器部分和一個解碼器部分。

此範例中的編碼器有兩個卷積層,可產生輸入影像的壓縮表示法 (隱含變數)。在此案例中,編碼器會從大小 (28、28) 的原始輸入影像產生大小 (1、20) 的隱含變數,並大幅縮減訓練的資料大小 (高達 40 次)。

解碼器具有兩個非卷積層,而且可以重新建構輸出影像,以確保隱含變數保留重要資訊。

卷積編碼器為叢集演算法提供較小的輸入資料大小,以及叢集演算法的效能,例如 k 平均數、k-NN 和 t 分散式 Stochastic Neighbor Embedding (t-SNE)。

此筆記本範例示範如何使用偵錯工具視覺化隱含變數,如下列動畫所示。它還展示了 t-SNE 演算法如何將潛在變數分類為十個叢集,並將其投影到二維空間。影像右側的散佈圖顏色方案會反映真實值,以顯示BERT模型和 t-SNE 演算法將潛在變數組織到叢集中的程度。

卷積自動編碼器的概念圖

使用 SageMaker Debugger 監控BERT模型訓練中的注意力

轉換器 (BERT) 的雙向編碼表示法是一種語言表示法模型。隨著模型的名稱反映,BERT模型建立在遷移學習和自然語言處理的 Transformer 模型上 (NLP)。

此BERT模型會針對未受監督的任務進行預先訓練,例如預測句子中缺少的單字,或預測自然遵循上一句的下一句。訓練資料包含 33 億個英文文字的單字 (權杖),來源為 Wikipedia 和電子書等。對於簡單的範例,BERT模型可以高度關注來自主體權杖的適當動詞權杖或代名詞權杖。

預先訓練的BERT模型可以使用額外的輸出層進行微調,以達成 state-of-the-artNLP任務中的模型訓練,例如對問題、文字分類等的自動回應。

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

本筆記本示範如何在 Stanford 問答資料集上使用 GluonNLP 模型區域預先訓練的BERT模型,以及如何設定 SageMaker 偵錯工具來監控訓練任務。

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

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

注意力分數的動畫

使用 SageMaker Debugger 在卷積神經網路中視覺化類別啟動映射 (CNNs)

此筆記本示範如何使用 SageMaker Debugger 來繪製類別啟用映射,以在卷積神經網路 () 中偵測影像和分類CNNs。在深度學習中,卷積神經網路 (CNN 或 ConvNet) 是深度神經網路的類別,最常用於分析視覺影像。自動駕駛車輛是採用分類啟用地圖的其中一個應用程式,這需要影像的立即偵測和分類,例如交通號誌、道路和障礙物。

在此筆記本中, PyTorch ResNet 模型在德國流量符號資料集 上接受訓練,其中包含超過 40 個類別的流量相關物件和總共超過 50,000 張影像。

CNN 類別啟用映射的動畫

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

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