

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

# 探索 SageMaker Profiler 使用者介面視覺化的設定檔輸出資料
<a name="profiler-explore-viz"></a>

本節將介紹 SageMaker Profiler 使用者介面，並提供如何使用和從中獲得深入分析的提示。

## 載入設定檔
<a name="profiler-explore-viz-load"></a>

當您開啟 SageMaker Profiler 使用者介面時，會開啟**載入設定檔**頁面。若要載入並產生**儀表板**及**時間軸**，請執行以下步驟。<a name="profiler-explore-viz-load-procedure"></a>

**載入訓練任務的設定檔**

1. 從**訓練任務清單**區段，使用核取方塊選擇您要載入設定檔的訓練任務。

1. 選擇**載入**。作業名稱應顯示在頂部的**已載入設定檔**區段。

1. 選擇**工作名稱**左側的選項按鈕，以產生**儀表板**與**時間軸**。請注意，當您選擇選項按鈕時，使用者介面會自動開啟**儀表板**。另請注意，如果您在任務狀態及載入狀態仍顯示為正在進行中時產生視覺化效果，SageMaker Profiler 使用者介面會產生**儀表板**圖與**時間軸**，直到從進行中的訓練任務或部分載入的設定檔資料收集的最近設定檔資料。

**提示**  
您一次可以載入並視覺化一個設定檔。若要載入其他設定檔，您必須先卸載先前載入的設定檔。若要卸載設定檔，請使用**已載入設定檔**區段設定檔右端的垃圾桶圖示。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-load-data.png)


## 儀表板
<a name="profiler-explore-viz-overview"></a>

完成載入並選取訓練任務後，使用者介面會開啟預設包含下列面板的**儀表板**頁面。
+ **GPU 使用中時間**–此圓餅圖顯示 GPU 使用時間與 GPU 閒置時間的百分比。您可以檢查在整個訓練任務 GPU 的使用時間是否多於閒置狀態。GPU 使用時間是以使用率大於 0% 的設定檔資料點為基礎，而 GPU 閒置時間則是以使用率為 0% 的分析資料點。
+ **隨時間變化的 GPU 使用率**–此時間軸圖顯示每個節點隨時間變化的平均 GPU 使用率，並將所有節點彙總到單一圖表。您可以檢查 GPU 在特定時間間隔內是否有工作負載不平衡、使用率不足的問題、瓶頸或閒置問題。若要追蹤個別 GPU 層級的使用率以及相關核心執行，請使用 [時間軸介面](#profiler-explore-viz-timeline)。請注意，GPU 活動集合會從您在訓練指令碼新增分析工具啟動器函式 `SMProf.start_profiling()` 的位置開始，然後停在 `SMProf.stop_profiling()`。
+ **CPU 使用中時間**–此圓餅圖顯示 CPU 使用時間與 CPU 閒置時間的百分比。您可以檢查在整個訓練任務 GPU 的正在啟用時間是否多於閒置狀態。GPU 使用時間是以使用率大於 0% 的設定檔資料點為基礎，而 GPU 閒置時間則是以使用率為 0% 的分析資料點。
+ **隨時間變化的 CPU 利用率**–此時間軸圖表顯示每個節點隨時間變化的平均 CPU 利用率，將所有節點彙總在單一圖表。您可以檢查 CPU 在特定時間間隔內是否出現瓶頸或使用量過低。若要追蹤與個別 GPU 使用率及核心執行一致的 CPU 使用率，請使用 [時間軸介面](#profiler-explore-viz-timeline)。請注意，使用率指標是從作業初始化開始就開始計算。
+ **所有 GPU 核心花費的時間**–此圓餅圖顯示整個訓練任務執行的所有 GPU 核心。根據預設，它將排名前 15 個 GPU 核心顯示為單一磁區，並將所有其他核心顯示為一個磁區。將滑鼠懸停在磁區可查看更詳細的資訊。此值會顯示 GPU 核心運作的總時間 (以秒為單位)，而百分比則是以設定檔的整個時間為基礎。
+ **前 15 個 GPU 核心花費的時間**–此圓餅圖顯示整個訓練任務執行的所有 GPU 核心。它將前 15 個 GPU 核心顯示為單獨的磁區。將滑鼠懸停在磁區可查看更詳細資訊。此值會顯示 GPU 核心運作的總時間 (以秒為單位)，而百分比則是以設定檔的整個時間為基礎。
+ **所有 GPU 核心的啟動計數**–此圓餅圖顯示在整個訓練任務啟動的每個 GPU 核心的計數。它將前 15 個 GPU 核心顯示為單獨的磁區，並將所有其他核心顯示為一個磁區。將滑鼠懸停在磁區可查看更詳細資訊。此值會顯示 GPU 核心運作的總時間 (以秒為單位)，而百分比則是以設定檔的整個時間為基礎。
+ **前 15 個 GPU 核心的啟動計數**–此圓餅圖顯示整個訓練任務啟動的每個 GPU 核心的計數。它顯示了前 15 個 GPU 核心。將滑鼠懸停在磁區可查看更詳細資訊。此值會顯示 GPU 核心運作的總計數 (以秒為單位)，而百分比則是以設定檔的整個時間為基礎。
+ **步驟時間分佈**–此長條圖顯示 GPU 步驟持續時間的分佈。只有當您在訓練指令碼新增步驟註釋器後，才會產生此圖。
+ **核心精確度分佈**–此圓餅圖顯示在不同資料類型 (例如 FP32、FP16、INT32 及 INT8) 執行核心所花費的時間百分比。
+ **GPU 使用分佈**–此圓餅圖顯示花在 GPU 使用的時間百分比，例如執行核心、記憶體 (`memcpy` 及 `memset`) 及同步處理 (`sync`)。
+ **GPU 記憶體作業分佈**–此圓餅圖顯示花在 GPU 記憶體作業的時間百分比。這可以視覺化 `memcopy` 活動，並有助於識別您的訓練任務是否在某些記憶體作業花費了過多的時間。
+ **建立新的長條圖**–建立您在期間 [步驟 1：使用 SageMaker Profiler Python 模組調整訓練指令碼](profiler-prepare.md#profiler-prepare-training-script) 手動註釋的自訂指標的新圖表。將自訂註釋新增至新的長條圖時，請選取或輸入您在訓練指令碼新增的註釋名稱。例如，在步驟 1 的示範訓練指令碼中，`step`、`Forward`、`Backward`、`Optimize`、及 `Loss` 是自訂註釋。在建立新的長條圖時，這些註釋名稱應該出現在衡量標準選擇的下拉式功能表。如果您選擇 `Backward`，使用者介面會將整個分析時間內向後傳遞所用時間的長條圖新增至**儀表板**。這種類型的長條圖對於檢查是否存在極端值花費異常長的時間並導致瓶頸問題非常有用。

下列螢幕擷取畫面顯示 GPU 及 CPU 使用時間比率，以及相對於每個運算節點時間的平均 GPU 與 CPU 利用率。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-1.png)


下列螢幕擷取畫面顯示圓餅圖範例，用來比較 GPU 核心啟動的次數，以及測量執行核心所花費的時間。在**所有 GPU 核心花費的時間**及**所有 GPU 核心的啟動計數**面板，您也可以為 *k* 的輸入欄位指定整數，以調整要在繪圖顯示的圖例數量。例如，如果您指定 10，則繪圖將分別顯示執行次數最多及啟動次數最多的前 10 個核心。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-2.png)


下列螢幕擷取畫面顯示步驟持續時間長條圖的範例，以及核心精確度分佈、GPU 使用分佈與 GPU 記憶體作業分佈的圓餅圖。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-dashboard-3.png)


## 時間軸介面
<a name="profiler-explore-viz-timeline"></a>

若要詳細檢視在 CPU 排程並在 GPU 執行的作業及核心層級的運算資源，請使用 **時間軸**介面。

您可以使用滑鼠、`[w, a, s, d]` 按鍵或鍵盤的四個方向鍵，在時間軸介面進行放大及縮小以及向左或向右平移。

**提示**  
如需有關與**時間軸**介面互動鍵盤快速鍵的更多提示，請選擇左窗格的 **Keyboard shortcuts** (鍵盤快速鍵)。

時間軸軌道以樹狀結構組織，為您提供從主機層級到裝置層級的資訊。例如，如果您執行的 `N` 執行個體具有 8 個 GPU，則每個執行個體的時間軸結構將如下所示。
+ **algo-inode**–這是用來將作業指派給佈建的執行個體的 SageMaker AI 標籤。數字 inode 是隨機分配。**例如，如果您使用 4 個執行個體，則此區段將從 **algo-1** 擴展到 algo-4**。
  + **CPU**–在本節，您可以檢查平均 CPU 利用率及效能計數器。
  + **GPU**–在本節，您可以檢查平均 GPU 利用率、單個 GPU 利用率及核心。
    + **SUM 使用率**–每個執行個體的平均 GPU 利用率。
    + **HOST-0 PID-123**–指派給每個流程追蹤的唯一名稱。縮寫 PID 是流程 ID，附加的數字是在從程序資料擷取期間記錄的流程 ID 號碼。本節顯示流程的以下資訊。
      + **GPU-inum\$1gpu 使用率**–第 inum\$1gpu 個 GPU 隨著時間推移的使用率。
      + **GPU-inum\$1gpu 裝置**–核心在第 inum\$1gpu 個 GPU 裝置執行。
        + **串流 i cuda\$1stream**–顯示 GPU 裝置上執行核心的 CUDA 串流。若要進一步了解 CUDA 串流，請參閱 NVIDIA 提供的 [CUDA C/C\$1\$1 串流與並行](https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf)處理的 PDF 格式的投影片。
      + **GPU-inum\$1gpu 主機**–核心會在第 inum\$1gpu 個 GPU 主機啟動。

下列幾張螢幕擷取畫面顯示在 `ml.p4d.24xlarge` 執行個體執行的訓練任務設定檔的**時間軸**，每個執行個體都配備 8 個 NVIDIA A100 Tensor Core GPU。

以下是設定檔的放大檢視，列印了十幾個步驟，包括 `step_232` 到 `step_233` 之間的間歇性資料載入器，用於擷取下一批資料。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-1.png)


對於每個 CPU，您可以追蹤 CPU 利用率及效能計數器，例如 `"clk_unhalted_ref.tsc"` 及 `"itlb_misses.miss_causes_a_walk"`，這些計數器表示在 CPU 執行的指示。

對於每個 GPU，您都可以查看主機時間軸與裝置時間軸。核心啟動位於主機時間軸上，核心執行位於裝置時間軸。如果您已在 GPU 主機時間軸新增訓練指令碼，也可以看到註釋 (例如向前、向後及最佳化)。

在時間軸檢視，您也可以追蹤核心啟動與執行配對。這有助於您瞭解主機 (CPU) 排程的核心啟動如何在相對應的 GPU 裝置執行。

**提示**  
按下 `f` 鍵可放大選取的核心。

下列螢幕擷取畫面是先前螢幕擷取畫面 `step_233` 及 `step_234` 的放大檢視。在下列螢幕擷取畫面中選取的時間間隔是在 GPU-0 裝置執行的 `AllReduce` 作業，這是分散式訓練基本通訊與同步步驟。在螢幕擷取畫面，請注意 GPU-0 主機中的核心啟動會連線至 GPU-0 裝置串流 1 中的核心執行，並以青色箭頭表示。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-2.png)


當您選取時間軸間隔時，使用者介面的底部窗格中也會出現兩個資訊索引標籤，如先前螢幕擷取畫面所示。**Current Selection** (目前選取項目) 索引標籤會顯示所選核心的詳細資訊，以及從主機啟動連線的核心。連線方向始終是從主機 (CPU )到裝置 (GPU)，因為每個 GPU 核心始終從 CPU 呼叫。**Connections** (連線) 索引標籤顯示所選的核心啟動及執行配對。您可以選取其中一個，將其移至**時間軸**檢視的中心。

下列螢幕擷取畫面會進一步放大 `AllReduce` 作業啟動及執行配對。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/profiler/sagemaker-profiler-ui-timeline-3.png)


## 資訊
<a name="profiler-expore-viz-information"></a>

在**資訊**，您可以存取已載入訓練任務的相關資訊，例如執行個體類型、為作業佈建的運算資源的 Amazon Resource Name (ARN)、節點名稱及超參數。

## 設定
<a name="profiler-expore-viz-settings"></a>

依預設，SageMaker AI Profiler 使用者介面應用程式執行個體設定為閒置 2 小時後關閉。在**設定**，使用下列設定來調整自動關閉計時器。
+ **啟用應用程式自動關閉**–選擇並設定為**啟用**，讓應用程式在指定的閒置時間後自動關閉。若要關閉自動關閉功能，請選擇**停用**。
+ **自動關閉臨界值 (以小時為單位)** – 如果您選擇**啟用**做為 **啟用應用程式自動關閉**，則可以設定應用程式自動關閉的臨界值時間 (以小時為單位)。預設為 2。