

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

# 在 Amazon SageMaker Studio Classic 中監控 AWS 運算資源使用率
<a name="debugger-profile-training-jobs"></a>

若要追蹤訓練任務的運算資源使用率，請使用 Amazon SageMaker Debugger 提供的監控工具。

針對您使用 SageMaker Python SDK 在 SageMaker AI 中執行的任何訓練任務，偵錯工具會每隔 500 毫秒收集一次基本資源使用率指標，例如 CPU 利用率、GPU 使用率、GPU 記憶體使用率、網路和 I/O 等待時間。若要查看訓練任務的資源使用率指標儀表板，只要[在 SageMaker Studio 實驗中使用 SageMaker Debugger 使用者介面](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html)即可。

深度學習作業和步驟可能以毫秒間隔運作。相較於依 1 秒間隔收集指標的 Amazon CloudWatch 指標，偵錯工具提供更精細的資源使用率指標，最低可達 100 毫秒 (0.1 秒) 間隔，以便您可以更深入地了解作業或步驟層級的指標。

如果您想要變更指標收集時間間隔，您可以將分析組態參數新增至訓練任務啟動器。例如，如果您使用的是 SageMaker AI Python SDK，您必須在建立估算器物件時傳遞 `profiler_config` 參數。若要了解如何調整資源使用率指標收集間隔，請參閱[程式碼範本，用於以 SageMaker AI Python SDK 內的 SageMaker Debugger Python 模組設定 SageMaker AI 估算器物件](debugger-configuration-for-profiling.md#debugger-configuration-structure-profiler)和[為系統資源使用率的基本分析進行設定](debugger-configure-system-monitoring.md)。

此外，您還可以再新增由 SageMaker Debugger 提供的問題偵測工具，稱為*內建分析規則*。內建分析規則會針對資源使用率指標執行分析，並偵測運算效能問題。如需更多詳細資訊，請參閱 [使用透過 Amazon SageMaker Debugger 管理的內建剖析工具規則](use-debugger-built-in-profiler-rules.md)。您可以透過 [SageMaker Studio 實驗中的 SageMaker Debugger 使用者介面](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html)或 [SageMaker Debugger 分析報告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)接收規則分析結果。您還可以使用 SageMaker Python SDK，建立自訂分析規則。

若要進一步了解 SageMaker Debugger 提供的監控功能，請參閱下列主題。

**Topics**
+ [使用 Amazon SageMaker Debugger Python 設定基本分析的估算器組態及參數](debugger-configuration-for-profiling.md)
+ [使用透過 Amazon SageMaker Debugger 管理的內建剖析工具規則](use-debugger-built-in-profiler-rules.md)
+ [偵錯工具內建剖析工具規則清單](debugger-built-in-profiler-rules.md)
+ [Amazon SageMaker Studio Classic 實驗中的 Amazon SageMaker Debugger 使用者介面](debugger-on-studio.md)
+ [SageMaker Debugger 互動報告](debugger-profiling-report.md)
+ [使用偵錯工具 Python 用戶端程式庫分析資料](debugger-analyze-data.md)

# 使用 Amazon SageMaker Debugger Python 設定基本分析的估算器組態及參數
<a name="debugger-configuration-for-profiling"></a>

根據預設值，SageMaker Debugger 基本分析預設為開啟，並監控使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 提交的所有 SageMaker 訓練工作的資源使用率指標，例如 CPU 利用率、GPU 使用率、GPU 記憶體使用率、網路和 I/O 等待時間。SageMaker Debugger 會每 500 毫秒收集一次這些資源使用率指標。您不需要在程式碼、訓練指令碼或任務啟動器中進行任何其他變更，即可追蹤基本資源使用率。如果您想要變更基本分析的指標收集間隔，您可以在使用 SageMaker Python SDK 適用於 Python (Boto3) 的 AWS SDK或 AWS Command Line Interface (CLI) 建立 SageMaker 訓練任務啟動器時指定 Debugger 特定參數。在本指南中，我們聚焦在如何使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 變更分析選項。此頁面提供用於設定此估算器物件的參考範本。

如果您想要在 SageMaker Studio 中存取訓練工作的資源使用率指標儀表板，您可以跳至 [Amazon SageMaker Studio Classic 實驗中的 Amazon SageMaker Debugger 使用者介面](debugger-on-studio.md)。

如果您想要自動啟動偵測系統資源使用率問題的規則，您可以在估算器物件中新增 `rules` 參數以啟動規則。

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

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

## 程式碼範本，用於以 SageMaker AI Python SDK 內的 SageMaker Debugger Python 模組設定 SageMaker AI 估算器物件
<a name="debugger-configuration-structure-profiler"></a>

若要調整基本設定檔組態 (`profiler_config`) 或新增剖析工具規則 (`rules`)，請選擇一個標籤以取得用於設定 SageMaker AI 估計器的範本。在後續頁面中，您可以找到如何設定這兩個參數的更多相關資訊。

**注意**  
下列程式碼範例無法直接執行。繼續閱讀下一節，了解如何設定每個參數。

------
#### [ PyTorch ]

```
# An example of constructing a SageMaker AI PyTorch estimator
import boto3
import sagemaker
from sagemaker.pytorch import PyTorch
from sagemaker.debugger import ProfilerConfig, ProfilerRule, rule_configs

session=boto3.session.Session()
region=session.region_name

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=PyTorch(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.12.0",
    py_version="py37",
    
    # SageMaker Debugger parameters
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ TensorFlow ]

```
# An example of constructing a SageMaker AI TensorFlow estimator
import boto3
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import ProfilerConfig, ProfilerRule, rule_configs

session=boto3.session.Session()
region=session.region_name

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=TensorFlow(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="2.8.0",
    py_version="py37",
    
    # SageMaker Debugger parameters
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

------
#### [ MXNet ]

```
# An example of constructing a SageMaker AI MXNet estimator
import sagemaker
from sagemaker.mxnet import MXNet
from sagemaker.debugger import ProfilerConfig, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=MXNet(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.7.0",
    py_version="py37",
    
    # SageMaker Debugger parameters
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

**注意**  
對於 MXNet，在設定 `profiler_config` 參數時，您只能針對系統監控進行設定。MXNet 不支援分析架構指標。

------
#### [ XGBoost ]

```
# An example of constructing a SageMaker AI XGBoost estimator
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.debugger import ProfilerConfig, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

estimator=XGBoost(
    entry_point="directory/to/your_training_script.py",
    role=sagemaker.get_execution_role(),
    base_job_name="debugger-profiling-demo",
    instance_count=1,
    instance_type="ml.p3.2xlarge",
    framework_version="1.5-1",

    # Debugger-specific parameters
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

**注意**  
對於 XGBoost，在設定 `profiler_config` 參數時，您只能針對設定系統監控進行設定。XGBoost 不支援分析架構指標。

------
#### [ Generic estimator ]

```
# An example of constructing a SageMaker AI generic estimator using the XGBoost algorithm base image
import boto3
import sagemaker
from sagemaker.estimator import Estimator
from sagemaker import image_uris
from sagemaker.debugger import ProfilerConfig, DebuggerHookConfig, Rule, ProfilerRule, rule_configs

profiler_config=ProfilerConfig(...)
rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInRule())
]

region=boto3.Session().region_name
xgboost_container=sagemaker.image_uris.retrieve("xgboost", region, "1.5-1")

estimator=Estimator(
    role=sagemaker.get_execution_role()
    image_uri=xgboost_container,
    base_job_name="debugger-demo",
    instance_count=1,
    instance_type="ml.m5.2xlarge",
    
    # Debugger-specific parameters
    profiler_config=profiler_config,
    rules=rules
)

estimator.fit(wait=False)
```

------

以下提供參數的簡短描述。
+ `profiler_config`—設定偵錯工具，以從訓練任務收集系統指標和架構指標，並儲存至安全的 S3 儲存貯體 URI 或本機機器中。您可以設定收集系統指標的頻率頻繁與否。若要了解如何設定 `profiler_config` 參數，請參閱[為系統資源使用率的基本分析進行設定](debugger-configure-system-monitoring.md)和[架構分析的估算器組態](debugger-configure-framework-profiling.md)。
+ `rules`—設定此參數以啟動您要平行執行的 SageMaker Debugger 內建規則。請確定您的訓練任務可存取此 S3 儲存貯體。這些規則會在處理容器上執行，並自動分析您的訓練工作，以找出運算和作業效能問題。[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) 規則是最完整的規則，可執行所有內建分析規則，並將分析結果以報告的形式儲存至安全的 S3 儲存貯體。若要了解如何設定 `rules` 參數，請參閱[使用透過 Amazon SageMaker Debugger 管理的內建剖析工具規則](use-debugger-built-in-profiler-rules.md)。

**注意**  
偵錯工具將輸出資料安全地儲存在預設的 S3 儲存貯體的子資料夾內。例如，預設 S3 儲存貯體 URI 的格式為 `s3://sagemaker-<region>-<12digit_account_id>/<base-job-name>/<debugger-subfolders>/`。偵錯工具建立的子資料夾有三個：`debug-output`、`profiler-output` 和 `rule-output`。您還可以使用 [SageMaker AI 估算器類別方法](debugger-estimator-classmethods.md)擷取預設的 S3 儲存貯體 URI。

請參閱下列主題，深入了解如何設定偵錯工具特定參數的詳細資訊。

**Topics**
+ [程式碼範本，用於以 SageMaker AI Python SDK 內的 SageMaker Debugger Python 模組設定 SageMaker AI 估算器物件](#debugger-configuration-structure-profiler)
+ [為系統資源使用率的基本分析進行設定](debugger-configure-system-monitoring.md)
+ [架構分析的估算器組態](debugger-configure-framework-profiling.md)
+ [訓練工作正在執行時更新偵錯工具系統監控和架構分析組態](debugger-update-monitoring-profiling.md)
+ [關閉偵錯工具](debugger-turn-off-profiling.md)

# 為系統資源使用率的基本分析進行設定
<a name="debugger-configure-system-monitoring"></a>

若要調整收集使用率指標的時間間隔，請在根據您的偏好建構 SageMaker AI 架構或一般估算器時，使用 `ProfilerConfig` API 作業建立參數物件。

**注意**  
根據預設值，對於所有 SageMaker AI 訓練任務，偵錯工具會每 500 毫秒從 Amazon EC2 執行個體收集資源使用率指標以進行系統監控，而不需在 SageMaker AI 估算器中指定任何偵錯工具特定的參數。  
偵錯工具會將系統指標儲存在預設的 S3 儲存貯體中。預設 S3 儲存貯體 URI 的格式為 `s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/`。

下列程式碼範例示範如何以 1000 毫秒的系統監控時間間隔來設定 `profiler_config` 參數。

```
from sagemaker.debugger import ProfilerConfig

profiler_config=ProfilerConfig(
    system_monitor_interval_millis=1000
)
```
+  `system_monitor_interval_millis` (int) — 指定監控間隔 (以毫秒為單位) 記錄系統指標。可用的毫秒值為 100、200、500、1000 (1 秒)、5000 (5 秒) 和 60000 (1 分鐘)。預設值為 500 毫秒。

若要查看系統監控的進度，請參閱[開啟 Amazon SageMaker Debugger 深入分析儀表板](debugger-on-studio-insights.md)。

# 架構分析的估算器組態
<a name="debugger-configure-framework-profiling"></a>

**警告**  
為了使用 [Amazon SageMaker Profiler](train-use-sagemaker-profiler.md)，SageMaker AI Debugger 會從 TensorFlow 2.11 和 PyTorch 2.0 開始棄用架構分析功能。您仍然可以在舊版本的架構和開發套件中使用該功能，如下所示。  
SageMaker Python SDK <= v2.130.0
PyTorch >= v1.6.0, < v2.0
TensorFlow >= v2.3.1, < v2.11
另請參閱[2023 年 3 月 16 日](debugger-release-notes.md#debugger-release-notes-20230315)。

若要啟用偵錯工具架構設定，請在建構估算器時設定 `framework_profile_params` 參數。偵錯工具架構分析使用 cProfile 或 Pyinstrument 選項收集架構指標，例如初始化階段的資料、資料載入器程序、深度學習架構和訓練指令碼的 Python 運算子、在各步驟內及步驟之間的詳細分析。使用 `FrameworkProfile` 類別，您可以設定自訂架構分析選項。

**注意**  
在開始使用偵錯工具架構分析之前，請先驗證偵錯工具是否支援用於建立模型的框架進行框架分析。如需詳細資訊，請參閱[支援的架構和演算法](debugger-supported-frameworks.md)。  
偵錯工具會將架構指標儲存在預設 S3 儲存貯體中。預設 S3 儲存貯體 URI 的格式為 `s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/`。

**Topics**
+ [預設架構分析](debugger-configure-framework-profiling-basic.md)
+ [預設系統監控和針對目標步驟或目標時間範圍的自訂架構分析](debugger-configure-framework-profiling-range.md)
+ [預設系統監控和使用不同分析選項的自訂架構分析](debugger-configure-framework-profiling-options.md)

# 預設架構分析
<a name="debugger-configure-framework-profiling-basic"></a>

偵錯工具架構預設分析包含以下選項：詳細的分析、資料載入器分析和 Python 分析。下列範例程式碼是啟動預設系統監控和預設架構分析的最簡單 `profiler_config` 參數設定。下列範例程式碼中的 `FrameworkProfile` 類別會在訓練工作開始時啟動預設架構分析。

```
from sagemaker.debugger import ProfilerConfig, FrameworkProfile
    
profiler_config=ProfilerConfig(
    framework_profile_params=FrameworkProfile()
)
```

使用 `profiler_config` 參數組態時，偵錯工具會呼叫監控和分析的預設設定。偵錯工具每 500 毫秒監控一次系統指標；使用詳細的分析選項剖析第五個步驟；使用資料載入器設定選項的第七個步驟；以及使用 Python 效能分析選項的第九、第十和第十一個步驟。

若要尋找可用的設定檔組態選項、預設參數設定以及如何設定這些選項的範例，請參閱 [預設系統監控和使用不同分析選項的自訂架構分析](debugger-configure-framework-profiling-options.md) 和 [SageMaker Debugger API — 框架設定檔](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile) (位於 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 中)。

如果您想要變更系統監控間隔並啟用預設架構分析設定，您可以使用 `framework_profile_params` 參數以明確指定 `system_monitor_interval_millis` 參數。例如，若要每 1000 毫秒監控一次，並啟用預設的架構分析，請使用下列範例程式碼。

```
from sagemaker.debugger import ProfilerConfig, FrameworkProfile
    
profiler_config=ProfilerConfig(
    system_monitor_interval_millis=1000,
    framework_profile_params=FrameworkProfile()
)
```

如需有關 `FrameworkProfile` 類別的更多相關資訊，請參閱 [SageMaker Debugger API — 框架設定檔](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile) (位於 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 內)。

# 預設系統監控和針對目標步驟或目標時間範圍的自訂架構分析
<a name="debugger-configure-framework-profiling-range"></a>

如果您想要指定目標步驟或目標時間間隔來分析訓練工作，則需要指定 `FrameworkProfile` 類別的參數。下列程式碼範例示範如何指定分析以及系統監控的目標範圍。
+ **針對目標步驟範圍**

  使用下列範例組態，偵錯工具會每 500 毫秒監控整個訓練工作 (預設監控)，並分析目標步驟範圍，從步驟 5 到步驟 15 (10 個步驟)。

  ```
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
      
  profiler_config=ProfilerConfig(
      framework_profile_params=FrameworkProfile(start_step=5, num_steps=10)
  )
  ```

  使用下列範例組態，Debugger 會每 1000 毫秒監控整個訓練工作，並分析目標步驟範圍，從步驟 5 到步驟 15 (10 個步驟)。

  ```
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
      
  profiler_config=ProfilerConfig(
      system_monitor_interval_millis=1000,
      framework_profile_params=FrameworkProfile(start_step=5, num_steps=10)
  )
  ```
+ **針對目標時間範圍**

  使用下列範例組態，Debugger 會每 500 毫秒監控整個訓練工作 (預設監控)，並分析目標時間範圍 (從目前的 Unix 時間起 600 秒)。

  ```
  import time
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
  
  profiler_config=ProfilerConfig(
      framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600)
  )
  ```

  使用下列範例組態，Debugger 會每 1000 毫秒監控整個訓練工作，並分析目標時間範圍 (從目前的 Unix 時間起 600 秒)。

  ```
  import time
  from sagemaker.debugger import ProfilerConfig, FrameworkProfile
  
  profiler_config=ProfilerConfig(
      system_monitor_interval_millis=1000,
      framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600)
  )
  ```

  架構分析會針對目標步驟或時間範圍內的所有分析選項進行。

  若要尋找可用設定檔選項的更多相關資訊，請參閱 [SageMaker Debugger API — 框架設定檔](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile) (位於 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 中)。

  下一節為您示範如何編寫可用的分析選項指令碼。

# 預設系統監控和使用不同分析選項的自訂架構分析
<a name="debugger-configure-framework-profiling-options"></a>

本節提供有關支援的分析組態類別的資訊，以及範例組態。您可以透過下列設定檔組態類別來管理架構分析選項：
+ [DetailedProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DetailedProfilingConfig) — 指定目標步驟或時間範圍，以使用原生架構剖析工具 (TensorFlow 剖析工具和 PyTorch 剖析工具) 來分析架構作業。例如，如果使用 TensorFlow，偵錯工具勾點可讓 TensorFlow 剖析工具收集 TensorFlow 特定的架構指標。詳細的分析可讓您在訓練工作的步驟前 (第一步之前)、步驟中以及步驟之間，分析所有架構運算子。
**注意**  
詳細分析可能會大幅增加 GPU 記憶體使用量。我們不建議您針對超過一兩個步驟啟用詳細的分析。
+ [DataloaderProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DataloaderProfilingConfig) — 指定目標步驟或時間範圍，以分析深度學習架構資料載入器程序。偵錯工具收集架構的每個資料載入器事件。
**注意**  
資料載入器分析從資料載入器收集資訊時，可能會降低訓練效能。我們不建議您為超過一兩個步驟啟用資料載入器分析。  
Debugger 已為註釋資料預先設定，僅適用於 AWS 深度學習容器的資料載入器程序。偵錯工具無法剖析來自任何其他自訂或外部訓練容器的資料載入器程序。
+ [PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig) — 指定目標步驟或時間範圍以分析 Python 函式。您還可以在兩個 Python 剖析工具之間進行選擇：cProfile 和 Pyinstrument。
  + *cProfile* — 標準的 Python 剖析工具。cProfile 會收集訓練期間呼叫的每個 Python 運算子的資訊。使用 cProfile，偵錯工具儲存每個函式呼叫的累積時間和註釋，提供有關 Python 函式的完整細節。例如，在深度學習中，最常被呼叫的函式可能是卷積網路篩選器和向後傳遞運算子，而 cProfile 會剖析其中的每一個。針對 cProfile 選項，您可以進一步選擇計時器選項：總時間、CPU 時間和關閉 CPU 時間。雖然您可以分析 CPU 時間內在處理器 (CPU 和 GPU) 上執行的每個函式呼叫，但您也可以使用關閉 CPU 時間選項來識別 I/O 或網路瓶頸。預設值為總時間，偵錯工具會同時分析 CPU時間和關閉 CPU 時間。使用 CPenfile，您可以在分析設定檔資料時向下切入至每一個函式。
  + *Pyinstrument*— Pyinstrument 是一種基於取樣的低額外負載 Python 剖析工具。使用 Pyinstrument 選項，偵錯工具每毫秒對分析事件進行一次取樣。由於 Pyinstrument 測量的是經過時間而不是 CPU 時間，因此訓練您的模型時，Pyinstrument 選項比起 cProfile 選項可能會是更好的選擇，可減少分析雜訊 (過濾掉累積速度很快的不相關函式呼叫) 並擷取實際運算密集型 (累計慢) 的運算子。使用 Pyinstrument 可以看到函式呼叫的樹狀，更能理解結構和緩慢的根本原因。
**注意**  
啟用 Python 分析可能會減慢總體訓練時間。cProfile 會在每次呼叫時分析最常呼叫的 Python 運算子，因此分析的處理時間會隨著呼叫次數的增加而增加。至於 Pyinstrument，由於其取樣機制，累積分析時間會隨時間增加。

下列範例組態顯示當您以指定數值使用不同分析選項時的完整結構。

```
import time
from sagemaker.debugger import (ProfilerConfig, 
                                FrameworkProfile, 
                                DetailedProfilingConfig, 
                                DataloaderProfilingConfig, 
                                PythonProfilingConfig,
                                PythonProfiler, cProfileTimer)

profiler_config=ProfilerConfig(
    system_monitor_interval_millis=500,
    framework_profile_params=FrameworkProfile(
        detailed_profiling_config=DetailedProfilingConfig(
            start_step=5, 
            num_steps=1
        ),
        dataloader_profiling_config=DataloaderProfilingConfig(
            start_step=7, 
            num_steps=1
        ),
        python_profiling_config=PythonProfilingConfig(
            start_step=9, 
            num_steps=1, 
            python_profiler=PythonProfiler.CPROFILE, 
            cprofile_timer=cProfileTimer.TOTAL_TIME
        )
    )
)
```

如需可用設定檔選項的更多相關資訊，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 內的 [DetailedProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DetailedProfilingConfig)、[DataloaderProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DataloaderProfilingConfig) 和 [PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig)。

# 訓練工作正在執行時更新偵錯工具系統監控和架構分析組態
<a name="debugger-update-monitoring-profiling"></a>

如果您要啟動或更新目前運作中的訓練工作的偵錯工具監控組態，請使用下列 SageMaker AI 估算器擴充方法：
+ 若要針對執行中的訓練工作啟動偵錯工具系統監控，並接收偵錯工具分析報告，請使用下列方式：

  ```
  estimator.enable_default_profiling()
  ```

  當您使用 `enable_default_profiling` 方法時，偵錯工具會初始化預設的系統監控和 `ProfileReport` 內建規則，這會在訓練工作結束時產生全方位的分析報告。只有在目前的訓練工作在沒有偵錯工具監控和效能分析的情況下執行時，才能呼叫此方法。

  如需更多資訊，請參閱[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.enable_default_profiling)內的 [estimator.enable\$1default\$1profiling](https://sagemaker.readthedocs.io/en/stable)。
+ 若要更新系統監控組態，請使用下列步驟：

  ```
  estimator.update_profiler(
      system_monitor_interval_millis=500
  )
  ```

  如需更多資訊，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 內的 [estimator.update\$1profiler](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler)。

# 關閉偵錯工具
<a name="debugger-turn-off-profiling"></a>

如果您想要完全關閉偵錯工具，請執行下列其中一項：
+ 在訓練工作開始之前，請執行下列操作：

  若要關閉效能分析，請將 `disable_profiler` 參數包含在估算器中，並將其設定為 `True`。
**警告**  
如果停用它，您將無法檢視全方位的 Studio 偵錯工具深入分析儀表板和自動產生的分析報告。

  若要關閉偵錯，請將 `debugger_hook_config` 參數設定為 `False`。
**警告**  
如果停用它，就無法收集輸出張量，也無法為模型參數偵錯。

  ```
  estimator=Estimator(
      ...
      disable_profiler=True
      debugger_hook_config=False
  )
  ```

  有關偵錯工具特定參數的更多相關資訊，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 中的 [SageMaker AI 估算器](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator)。
+ 當訓練工作正在執行時，請執行下列操作：

  若要在訓練工作執行時停用監控和分析，請使用下列估算器分類方法：

  ```
  estimator.disable_profiling()
  ```

  只禁用架構分析並保持系統監控，請使用 `update_profiler` 方法：

  ```
  estimator.update_profiler(disable_framework_metrics=true)
  ```

  有關估算器擴展方法的更多相關資訊，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 文件內的 [estimator.disable\$1profiling](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.disable_profiling) 和 [estimator.update\$1profiler](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler) 類別方法。

# 使用透過 Amazon SageMaker Debugger 管理的內建剖析工具規則
<a name="use-debugger-built-in-profiler-rules"></a>

Amazon SageMaker Debugger 內建剖析工具規則會分析模型訓練期間所收集的系統指標和架構操作。Debugger 提供 `ProfilerRule` API 作業，可協助設定規則來監控訓練運算資源和操作，並偵測異常情況。例如，分析規則可協助您偵測是否存在運算問題，例如 CPU 瓶頸、I/O 等待時間過長、GPU 工作者的工作負載不平衡，以及運算資源使用量過低。若要查看內建之可用分析規則的完整清單，請參閱[偵錯工具內建剖析工具規則清單](debugger-built-in-profiler-rules.md)。下列主題示範如何使用 Debugger 內建規則搭配預設參數設定和自訂參數值。

**注意**  
內建規則透過 Amazon SageMaker Processing 容器提供，並由 SageMaker Debugger 完全管理，無須額外付費。如需帳單的詳細資訊，請參閱 [Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)的頁面。

**Topics**
+ [使用 SageMaker Debugger 內建剖析工具規則及其預設參數設定](#debugger-built-in-profiler-rules-configuration)
+ [使用 Debugger 內建剖析工具規則及自訂參數值](#debugger-built-in-profiler-rules-configuration-param-change)

## 使用 SageMaker Debugger 內建剖析工具規則及其預設參數設定
<a name="debugger-built-in-profiler-rules-configuration"></a>

若要在估算器中新增 SageMaker Debugger 內建規則，您需要設定 `rules` 清單物件。下列範例程式碼顯示列出 SageMaker Debugger 內建規則的基本結構。

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs

rules=[
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_1()),
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_2()),
    ...
    ProfilerRule.sagemaker(rule_configs.BuiltInProfilerRuleName_n()),
    ... # You can also append more debugging rules in the Rule.sagemaker(rule_configs.*()) format.
]

estimator=Estimator(
    ...
    rules=rules
)
```

如需可用內建規則的完整清單，請參閱[偵錯工具內建剖析工具規則清單](debugger-built-in-profiler-rules.md)。

若要使用分析規則並檢查訓練任務的運算效能和進度，請新增 SageMaker Debugger 的 [https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#profiler-report](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#profiler-report) 規則。此規則會啟用[Debugger ProfilerRule](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#debugger-built-in-profiler-rules-ProfilerRule) `ProfilerRule` 系列下的所有內建規則。此外，此規則會產生彙總分析報告。如需詳細資訊，請參閱[使用 SageMaker Debugger 所產生的分析報告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。您可以使用下列程式碼，將分析報告規則新增至訓練估算器。

```
from sagemaker.debugger import Rule, rule_configs

rules=[
    ProfilerRule.sagemaker(rule_configs.ProfilerReport())
]
```

當您使用 `ProfilerReport` 規則來啟動訓練任務時，Debugger 會每 500 毫秒收集一次資源使用率資料。Debugger 會分析資源使用率，來識別您的模型是否有瓶頸問題。如果規則偵測到訓練有異常狀況，則規則評估狀態會變更為 `IssueFound`。您可以設定自動化動作，例如使用 Amazon CloudWatch Events 和 AWS Lambda來通知訓練問題和停止訓練任務。如需詳細資訊，請參閱[Amazon SageMaker Debugger 規則的動作](debugger-action-on-rules.md)。

## 使用 Debugger 內建剖析工具規則及自訂參數值
<a name="debugger-built-in-profiler-rules-configuration-param-change"></a>

如果您想要調整內建規則參數值並自訂張量集合 Regex，請設定 `ProfilerRule.sagemaker` 和 `Rule.sagemaker` 類別方法的 `base_config` 和 `rule_parameters` 參數。對於 `Rule.sagemaker` 類別方法，您還可以透過 `collections_to_save` 參數自訂張量集合。如需如何使用 `CollectionConfig` 類別的指示，請參閱[使用 `CollectionConfig` API 設定張量集合](debugger-configure-tensor-collections.md)。

使用下列內建規則的組態範本來自訂參數值。您可以視需要變更規則參數，調整要啟動的規則敏感度。
+ `base_config` 引數是您呼叫內建規則方法的位置。
+ `rule_parameters` 引數是調整[偵錯工具內建剖析工具規則清單](debugger-built-in-profiler-rules.md)中所列出的內建規則預設金鑰值。

有關 Debugger 規則類別、方法和參數的詳細資訊，請參閱 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 中的 [SageMaker AI Debugger 規則類別](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html)。

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs, CollectionConfig

rules=[
    ProfilerRule.sagemaker(
        base_config=rule_configs.BuiltInProfilerRuleName(),
        rule_parameters={
                "key": "value"
        }
    )
]
```

針對[偵錯工具內建剖析工具規則清單](debugger-built-in-profiler-rules.md)中的每個規則提供參數描述和參數值自訂範例。

如需使用 `CreateTrainingJob` API 之 Debugger 內建規則的低階 JSON 組態，請參閱[使用 SageMaker API 設定 Debugger](debugger-createtrainingjob-api.md)。

# 偵錯工具內建剖析工具規則清單
<a name="debugger-built-in-profiler-rules"></a>

使用 Amazon SageMaker Debugger 提供的偵錯工具內建剖析工具規則，並分析訓練您的模型時收集的指標。偵錯工具內建規則監控對成功執行高效能訓練任務至關重要的各種常見條件。您可以使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 或低階 SageMaker API 作業來呼叫內建剖析工具規則。使用內建規則無需額外付費。如需帳單的更多相關資訊，請參閱 [Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)頁面。

**注意**  
您可以連接到訓練任務的內建剖析工具規則數量上限為 20。SageMaker Debugger 可完整管理內建規則，並同步分析您的訓練任務。

**重要**  
若要使用新的偵錯工具功能，您必須升級 SageMaker Python 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-built-in-profiler-rules-ProfilerRule"></a>

下列規則是可使用 `ProfilerRule.sagemaker` 類別方法呼叫的 Debugger 內建規則。

用於產生分析報告的偵錯工具內建規則


| 有效性範圍 | 內建規則 | 
| --- | --- | 
| 任何 SageMaker 訓練任務的分析報告 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

適用於分析硬體系統資源使用率 (系統指標) 的偵錯工具內建規則


| 有效性範圍 | 內建規則 | 
| --- | --- | 
| 任何 SageMaker 訓練任務的一般系統監控規則 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

分析架構指標的偵錯工具內建規則


| 有效性範圍 | 內建規則 | 
| --- | --- | 
| 深度學習架構 (TensorFlow 和 PyTorch) 的分析規則 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

**警告**  
為了使用 [Amazon SageMaker Profiler](train-use-sagemaker-profiler.md)，SageMaker AI Debugger 會從 TensorFlow 2.11 和 PyTorch 2.0 開始棄用架構分析功能。您仍然可以在舊版本的架構和開發套件中使用該功能，如下所示。  
SageMaker Python SDK <= v2.130.0
PyTorch >= v1.6.0, < v2.0
TensorFlow >= v2.3.1, < v2.11
另請參閱[2023 年 3 月 16 日](debugger-release-notes.md#debugger-release-notes-20230315)。

**若要將內建規則與預設參數值搭配使用**，請使用下列組態格式：

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs

rules = [
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_1()),
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_2()),
    ...
    ProfilerRule.sagemaker(rule_configs.BuiltInRuleName_n())
]
```

**若要使用內建規則來自訂參數值**，請使用下列組態格式：

```
from sagemaker.debugger import Rule, ProfilerRule, rule_configs

rules = [
    ProfilerRule.sagemaker(
        base_config=rule_configs.BuiltInRuleName(),
        rule_parameters={
                "key": "value"
        }
    )
]
```

若要尋找 `rule_parameters` 參數的可用金鑰，請參閱參數描述資料表。

為參數描述資料表下方的每個內建規則提供範例規則組態程式碼。
+ 如需使用偵錯工具內建規則的完整指示和範例，請參閱[偵錯工具內建規則範例程式碼](debugger-built-in-rules-example.md#debugger-deploy-built-in-rules)。
+ 如需關於將內建規則與低階 SageMaker API 作業搭配使用的完整指示，請參閱[使用 SageMaker API 設定 Debugger](debugger-createtrainingjob-api.md)。

## ProfilerReport
<a name="profiler-report"></a>

ProfilerReport 規則會調用適用於監控和分析的所有內建規則。它建立一個分析報告，並在觸發個別規則時更新。您可以在訓練任務執行期間或訓練任務完成後下載全方位的分析報告。您可以調整規則參數值，以自訂內建監控和分析規則的敏感度。下列範例程式碼顯示透過 ProfilerReport 規則調整內建規則參數的基本格式。

```
rules=[
    ProfilerRule.sagemaker(
        rule_configs.ProfilerReport(
            <BuiltInRuleName>_<parameter_name> = value
        )
    )  
]
```

如果您在沒有任何自訂參數 (如下列範例程式碼所示) 的情況下觸發此 ProfilerReport 規則，則 ProfilerReport 規則會觸發具有預設參數值之監控和分析的所有內建規則。

```
rules=[ProfilerRule.sagemaker(rule_configs.ProfilerReport())]
```

下列範例程式碼會示範如何指定和調整 CPUBottleneck 規則的 `cpu_threshold` 參數和 CPUBottleneck 規則的 `threshold` 參數。

```
rules=[
    ProfilerRule.sagemaker(
        rule_configs.ProfilerReport(
            CPUBottleneck_cpu_threshold = 90,
            IOBottleneck_threshold = 90
        )
    )  
]
```

若要探索剖析工具報告中的內容，請參閱 [SageMaker Debugger 分析報告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。此外，由於此規則會啟動所有分析規則，因此您還可以使用 [SageMaker Studio 實驗中的 SageMaker Debugger 使用者介面](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html)來檢查規則分析狀態。

OverallSystemUsage 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| <BuiltInRuleName>\$1<parameter\$1name> |  可自訂的參數，可調整其他內建監控和分析規則的閾值。 **選用** 預設值：`None`  | 

## BatchSize
<a name="batch-size-rule"></a>

BatchSize 規則有助於偵測 GPU 是否因為批次大小較小而讓 GPU 的使用量過低。為了偵測此問題，此規則會監控平均 CPU 利用率、GPU 使用率和 GPU 記憶體使用率。如果 CPU、GPU 和 GPU 記憶體的平均使用率較低，則可能表示訓練任務可以在較小的執行個體類型上執行，或是以較大的批次大小執行。這種分析不適用於大量過度配置記憶體的架構。但是，增加批次大小可能會導致處理或資料載入瓶頸，因為每次反覆運算都需要更多資料預先處理的時間。

BatchSize 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| cpu\$1threshold\$1p95 |  定義 CPU 利用率第 95 分位數的閾值 (以百分比表示)。 **選用** 有效值：整數 預設值：`70` (以百分比表示)  | 
| gpu\$1threshold\$1p95 |  定義 GPU 使用率第 95 分位數的閾值 (以百分比表示)。 **選用** 有效值：整數 預設值：`70` (以百分比表示)  | 
| gpu\$1memory\$1threshold\$1p95 | 定義 GPU 記憶體使用率第 95 分位數的閾值 (以百分比表示)。 **選用** 有效值：整數 預設值：`70` (以百分比表示)  | 
| patience | 定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。 **選用** 有效值：整數 預設值：`100`  | 
| window |  運算分位數的視窗大小。 **選用** 有效值：整數 預設值：`500`  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## CPUBottleneck
<a name="cpu-bottleneck"></a>

CPUBottleneck 規則可協助偵測 GPU 是否因 CPU 瓶頸而讓 GPU 的使用量過低。如果 CPU 瓶頸數量超過預先定義的閾值，則規則會傳回 True。

CPUBottleneck 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| threshold |  定義瓶頸時間與總訓練時間比例的閾值。如果比例超過為閾值參數指定的百分比，則規則會將規則狀態切換為 True。 **選用** 有效值：整數 預設值：`50` (以百分比表示)  | 
| gpu\$1threshold |  定義低 GPU 使用率的閾值。 **選用** 有效值：整數 預設值：`10` (以百分比表示)  | 
| cpu\$1threshold | 定義高 CPU 利用率的閾值。 **選用** 有效值：整數 預設值：`90` (以百分比表示)  | 
| patience | 定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。 **選用** 有效值：整數 預設值：`100`  | 
| scan\$1interval\$1us | 掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## GPUMemoryIncrease
<a name="gpu-memory-increase"></a>

GPUMemoryIncrease 規則有助於偵測 GPU 上記憶體使用量大幅增加的情況。

GPUMemoryIncrease 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| increase |  定義絕對記憶體增加的閾值。 **選用** 有效值：整數 預設值：`10` (以百分比表示)  | 
| patience |  定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。 **選用** 有效值：整數 預設值：`100`  | 
| window |  運算分位數的視窗大小。 **選用** 有效值：整數 預設值：`500`  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## IOBottleneck
<a name="io-bottleneck"></a>

此規則有助於偵測 GPU 是否因為資料 IO 瓶頸而讓 GPU 的使用量過低。如果 IO 瓶頸數量超過預先定義的閾值，則規則會傳回 True。

IOBottleneck 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| threshold | 定義規則傳回 True 時的閾值。**選用**有效值：整數預設值：`50` (以百分比表示) | 
| gpu\$1threshold |  定義何時將 GPU 視為使用量過低的閾值。 **選用** 有效值：整數 預設值：`70` (以百分比表示)  | 
| io\$1threshold | 定義高 IO 等待時間的閾值。**選用**有效值：整數預設值：`50` (以百分比表示) | 
| patience | 定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。**選用**有效值：整數預設值：`1000` | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## LoadBalancers
<a name="load-balancing"></a>

LoadBalancer 規則有助於偵測多個 GPU 之間的工作負載平衡問題。

LoadBalancer 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| threshold |  定義工作負載百分比。 **選用** 有效值：整數 預設值：`0.5` (無單位比例)  | 
| patience |  定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。 **選用** 有效值：整數 預設值：`10`  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## LowGPUUtilization
<a name="low-gpu-utilization"></a>

LowGPUUtilization 規則可協助偵測 GPU 使用率是否較低或受到波動的影響。這是針對每個工作者上的每個 GPU 進行檢查。如果第 95 個分位數低於 threshold\$1p95 (這表示使用量過低)，則規則會傳回 True。如果第 95 個分位數高於 threshold\$1p95 和第五分位數低於 threshold\$1p5 (這表示波動)，則規則會傳回 True。

LowGPUUtilization 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| threshold\$1p95 |  第 95 個分位數的閾值，低於此閾值，會將 GPU 視為使用量過低。 **選用** 有效值：整數 預設值：`70` (以百分比表示)  | 
| threshold\$1p5 | 第五分位數的閾值。預設為 10%。**選用**有效值：整數預設值：`10` (以百分比表示) | 
| patience |  定義規則開始評估前要略過的資料點數量。訓練任務的前幾個步驟通常會顯示大量的資料程序，因此請讓規則保持耐心，並防止過早以您使用此參數指定的特定分析資料數量來調用規則。 **選用** 有效值：整數 預設值：`1000`  | 
| window |  運算分位數的視窗大小。 **選用** 有效值：整數 預設值：`500`  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## OverallSystemUsage
<a name="overall-system-usage"></a>

OverallSystemUsage 規則會衡量每個背景工作者節點的整體系統使用量。規則目前只會彙總每個節點的值，並運算其百分位數。

OverallSystemUsage 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## MaxInitializationTime
<a name="max-initialization-time"></a>

MaxInitializationTime 規則有助於偵測訓練初始化是否花費太多時間。規則會等到第一個步驟可用為止。

MaxInitializationTime 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| threshold |  定義等待第一個步驟變成可用的閾值 (以分鐘為單位)。 **選用** 有效值：整數 預設值：`20` (以分鐘為單位)  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## OverallFrameworkMetrics
<a name="overall-framework-metrics"></a>

OverallFrameworkMetrics 規則總結了在架構指標上使用的時間，例如轉送和向後傳遞以及資料載入。

OverallFrameworkMetrics 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

## StepOutlier
<a name="step-outlier"></a>

StepOutlier 規則有助於偵測步驟持續時間中的極端值。如果有步驟持續時間大於某個時間範圍內整個步驟持續時間之 `stddev` sigmas 的極端值，則此規則會傳回 `True`。

StepOutlier 規則的參數描述


| 參數名稱 | Description | 
| --- | --- | 
| base\$1trial | 基礎試驗訓練任務名稱。此參數會由 Amazon SageMaker Debugger 自動設定為目前的訓練任務。 **必要** 有效值：字串  | 
| stddev |  定義與標準偏差相乘的係數。例如，當步驟持續時間大於或小於標準偏差的 5 倍時，則會依預設調用規則。 **選用** 有效值：整數 預設值：`5` (以分鐘為單位)  | 
| mode | 已在其下儲存步驟的模式，以及應在其上執行規則的模式。每個預設規則將在 EVAL 和 TRAIN 階段的步驟上執行**選用**有效值：整數預設值：`5` (以分鐘為單位) | 
| n\$1outliers | 規則傳回 True 之前要忽略多少個極端值**選用**有效值：整數預設值：`10` | 
| scan\$1interval\$1us |  掃描時間軸檔案的時間間隔。 **選用** 有效值：整數 預設值：`60000000` (以微秒為單位)  | 

# Amazon SageMaker Studio Classic 實驗中的 Amazon SageMaker Debugger 使用者介面
<a name="debugger-on-studio"></a>

使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行訓練任務時，使用 Amazon SageMaker Studio Classic 實驗中的 Amazon SageMaker Debugger 深入分析儀表板，分析模型效能和系統瓶頸。透過偵錯工具儀表板深入分析您的訓練工作，並改善模型訓練效能和準確性。根據預設值，Debugger 會每 500 毫秒監控系統指標 (CPU、GPU、GPU 記憶體、網路和資料 I/O)，並監控訓練工作每 500 次迭代的基本輸出張量 (遺失和準確性)。您還可以透過 Studio Classic 使用者介面或使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)進一步自訂偵錯工具設定參數值，並調整儲存間隔。

**重要**  
如果您使用現有的 Studio Classic 應用程式，請刪除應用程式並重新啟動，以使用最新的 Studio Classic 功能。有關如何重新啟動和更新 Studio Classic 環境的說明，請參閱[更新 Amazon SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-update.html)。

**Topics**
+ [開啟 Amazon SageMaker Debugger 深入分析儀表板](debugger-on-studio-insights.md)
+ [Amazon SageMaker Debugger 深入分析儀表板控制器](debugger-on-studio-insights-controllers.md)
+ [探索 Amazon SageMaker Debugger 深入分析儀表板](debugger-on-studio-insights-walkthrough.md)
+ [將 Amazon SageMaker Debugger 深入分析執行個體關機](debugger-on-studio-insights-close.md)

# 開啟 Amazon SageMaker Debugger 深入分析儀表板
<a name="debugger-on-studio-insights"></a>

在 Studio Classic 的 SageMaker Debugger 深入分析儀表板中，您可以即時、在訓練後查看在 Amazon EC2 執行個體上執行的訓練任務的運算資源使用率、資源使用率和系統瓶頸資訊

**注意**  
SageMaker Debugger 深入分析儀表板會在 `ml.m5.4xlarge` 執行個體上執行 Studio Classic 應用程式，以處理和轉譯視覺效果。每個 SageMaker Debugger 深入分析索引標籤，都會執行一個 Studio Classic 核心工作階段。在單一執行個體上執行多個 SageMaker Debugger 深入分析索引標籤的多個核心工作階段。當您關閉 SageMaker Debugger 深入分析索引標籤時，對應的核心工作階段也會關閉。Studio Classic 應用程式會維持啟用狀態，並會產生 `ml.m5.4xlarge` 執行個體用量的費用。有關定價的資訊，請參閱[Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)頁面。

**重要**  
使用 SageMaker Debugger 深入分析儀表板後，您必須將 `ml.m5.4xlarge` 執行個體關機以避免產生費用。如需如何將執行個體關機的指示，請參閱[將 Amazon SageMaker Debugger 深入分析執行個體關機](debugger-on-studio-insights-close.md)。

**若要開啟 SageMaker Debugger 深入分析儀表板**

1. 在 Studio Classic **首頁**上，選擇左側導覽窗格中的**實驗**。

1. 在**實驗**頁面中搜尋您的訓練任務。如果您的訓練工作設定以實驗執行，則該工作應會出現在**實驗**標籤中；如果您未設定以實驗執行，則該工作應會顯示在**未指派的執行**標籤中。

1. 選擇 (按一下) 訓練任務名稱的連結，以查看任務詳細資訊。

1. 在**概觀**功能表下，選擇 **Debuggger**。這應該會顯示以下兩個區段。
   + 在 **Debugger 規則**區段中，您可以瀏覽與訓練工作相關聯的 Debugger 內建規則的狀態。
   + 在 **Debugger 深入分析**區段中，您可以找到在儀表板上開啟 SageMaker Debugger 深入分析的連結。

1. 在 **SageMaker Debugger 深入分析**區段中，選擇訓練任務工作的連結，以開啟 SageMaker Debugger 深入分析儀表板。這將開啟一個 **偵錯 [您的訓練工作名稱]** 視窗。在此視窗中，偵錯工具提供 Amazon EC2 執行個體上訓練任務的運算效能概觀，並協助您識別運算資源使用率方面的問題。

您還可以透過新增 SageMaker Debugger 內建的 [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report)規則，下載彙總的分析報告。如需更多資訊，請參閱[設定內建剖析工具規則](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)和[使用 SageMaker Debugger 產生分析報告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。

# Amazon SageMaker Debugger 深入分析儀表板控制器
<a name="debugger-on-studio-insights-controllers"></a>

有用於監控和分析偵錯工具控制器的不同元件。在本指南中，您將瞭解偵錯工具控制器元件。

**注意**  
SageMaker Debugger 深入分析儀表板會在 `ml.m5.4xlarge` 執行個體上執行 Studio Classic 應用程式，以處理和轉譯視覺效果。每個 SageMaker Debugger 深入分析索引標籤，都會執行一個 Studio Classic 核心工作階段。在單一執行個體上執行多個 SageMaker Debugger 深入分析索引標籤的多個核心工作階段。當您關閉 SageMaker Debugger 深入分析索引標籤時，對應的核心工作階段也會關閉。Studio Classic 應用程式會維持啟用狀態，並會產生 `ml.m5.4xlarge` 執行個體用量費用。有關定價的資訊，請參閱[Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)頁面。

**重要**  
使用 SageMaker Debugger 深入分析儀表板後，請將 `ml.m5.4xlarge` 執行個體關機以避免產生費用。如需如何將執行個體關機的指示，請參閱[將 Amazon SageMaker Debugger 深入分析執行個體關機](debugger-on-studio-insights-close.md)。

## SageMaker Debugger 深入分析控制器
<a name="debugger-on-studio-insights-controller"></a>

使用深入分析儀表板左上角的偵錯工具控制器，您可以重新整理儀表板、設定或更新偵錯工具設定以監控系統指標、停止訓練工作，以及下載偵錯工作分析報告。

![\[SageMaker Debugger 深入分析儀表板控制器\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-insights-refresh.png)

+ 如果您想要手動重新整理儀表板，請選擇重新整理按鈕 (左上角的圓形箭頭)，如前面的螢幕擷取畫面所示。
+ 對於使用 SageMaker Python SDK 啟動的所有 SageMaker 訓練工作，**監控**切換按鈕預設為開啟。如果未啟用，可以使用切換按鈕開始監控。在監控期間，偵錯工具只會收集資源使用率指標，以偵測 CPU 瓶頸和 GPU 使用量過低等運算問題。如需偵錯工具監控的資源使用率問題完整清單，請參閱[適用於分析硬體系統資源使用率 (系統指標) 的偵錯工具內建規則](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)。
+ **設定監控** 按鈕會開啟快顯視窗，您可以使用該快顯視窗設定或更新資料收集頻率，以及儲存資料的 S3 路徑。  
![\[設定偵錯工具監控組態的快顯視窗\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-enable-profiling-2.png)

  您可以指定下列欄位的值。
  + **S3 儲存貯體 URI**：指定基礎 S3 儲存貯體 URI。
  + **收集監控資料，每隔**：選取收集系統指標的時間間隔。您可以從下拉式清單中選取其中一個監控間隔。可用的間隔為 100 毫秒、200 毫秒、500 毫秒 (預設值)、1 秒、5 秒和 1 分鐘。
**注意**  
如果您選擇較低的時間間隔之一，則會增加資源使用率指標的精細程度，以便您可以用較高的時間解析度擷取尖峰和異常狀況。但是，解析度越高，要處理的系統指標量就越大。這可能會導致額外的負荷，並影響總體的訓練和處理時間。
+ 使用**停止訓練**按鈕，您可以在發現資源使用率有異常狀況時停止訓練工作。
+ 使用**下載報告**按鈕，您可以使用 SageMaker Debugger 內建的 [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report)規則，下載彙總的分析報告。當您將內建的 [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report) 規則新增至估算器時，會啟動此按鈕。如需更多資訊，請參閱[設定內建剖析工具規則](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)和[使用 SageMaker Debugger 產生分析報告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。

# 探索 Amazon SageMaker Debugger 深入分析儀表板
<a name="debugger-on-studio-insights-walkthrough"></a>

當您啟動 SageMaker 訓練工作時，SageMaker Debugger 預設會開始監控 Amazon EC2 執行個體的資源使用率。您可以透過深入分析儀表板追蹤系統使用率、統計資料概觀和內建規則分析。本指南逐步介紹 SageMaker Debugger 下列索引標籤內的深入分析儀表板的內容：**系統系統指標**和**規則**。

**注意**  
SageMaker Debugger 深入分析儀表板會在 `ml.m5.4xlarge` 執行個體上執行 Studio Classic 應用程式，以處理和轉譯視覺效果。每個 SageMaker Debugger 深入分析索引標籤，都會執行一個 Studio Classic 核心工作階段。在單一執行個體上執行多個 SageMaker Debugger 深入分析索引標籤的多個核心工作階段。當您關閉 SageMaker Debugger 深入分析索引標籤時，對應的核心工作階段也會關閉。Studio Classic 應用程式會維持啟用狀態，並會產生 `ml.m5.4xlarge` 執行個體用量的費用。有關定價的資訊，請參閱[Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)頁面。

**重要**  
使用 SageMaker Debugger 深入分析儀表板後，請將 `ml.m5.4xlarge` 執行個體關機以避免產生費用。如需如何將執行個體關機的指示，請參閱[將 Amazon SageMaker Debugger 深入分析執行個體關機](debugger-on-studio-insights-close.md)。

**重要**  
在報告中，系統會提供資訊圖表和相關建議，其中的內容並非絕對。由您負責對當中的資訊進行自己的獨立評估。

**Topics**
+ [系統指標](#debugger-insights-system-metrics-tab)
+ [Rules](#debugger-on-studio-insights-rules)

## 系統指標
<a name="debugger-insights-system-metrics-tab"></a>

在**系統指標**標籤內，您可以透過總結表格與時間序列圖表來瞭解資源使用率。

### 資源使用率總結
<a name="debugger-on-studio-insights-sys-resource-summary"></a>

此總結表格顯示所有節點的運算資源使用率指標統計資料 (表示為 algo-*n*)。資源使用率指標包含 CPU 總使用率、總 GPU 使用率、總 CPU 記憶體使用率、總 GPU 記憶體使用率、總 I/O 等待時間，以及總網路輸入位元數。該表顯示了最小值和最大值，以及 p99，p90 和 p50 百分位數。

![\[資源使用率總結資料表\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-insights-resource-util-summary.png)


### 資源使用率時間序列圖
<a name="debugger-on-studio-insights-sys-controller"></a>

您可以使用時間序列圖表查看資源使用率的更多詳細資訊，並識別每個執行個體顯示任何不需要的使用率的時間間隔，例如低 GPU 使用率和 CPU 瓶頸，這些瓶頸會浪費昂貴的執行個體。

**時間序列圖形控制器使用者介面**

下列螢幕擷取畫面顯示用於調整時間序列圖表的使用者介面控制器。

![\[\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-insights-graph-controller.png)

+ **algo-1**：請使用此下拉式清單選擇您要查看的節點。
+ **放大**：請使用此按鈕放大時間序列圖表，並檢視較短的時間間隔。
+ **縮小**：請使用此按鈕縮小時間序列圖表，並檢視更大的時間間隔。
+ **向左移動**：將時間序列圖表移至較早的時間間隔。
+ **向右移動**：將時間序列圖表移至較晚的時間間隔。
+ **修正時間範圍**：使用此核取方塊可修正或復原時間序列圖表，以顯示從第一個資料點到最後一個資料點的完整檢視。

**CPU 利用率和 I/O 等待時間**

前兩個圖表顯示一段時間內的 CPU 利用率和 I/O 等待時間。依照預設值，這些圖表會顯示 CPU 利用率的平均值，以及花在 CPU 核心上的 I/O 等待時間。您可以選取一或多個 CPU 核心，方法是選取要在單一圖表上繪製圖形的標籤，並比較不同核心的使用率。您可以拖曳並放大、縮小以仔細查看特定的時間間隔。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-insights-node-cpu.png)


**GPU 使用率和 GPU 記憶體使用率**

下列圖表顯示一段時間內的 GPU 使用率和 GPU 記憶體使用率。依預設值，圖表會顯示一段時間內的平均使用率。您可以選擇 GPU 核心標籤來查看每個核心的使用率。將使用率除以 GPU 核心總數的平均值，即可得出整個硬體系統資源的平均使用率。透過查看平均使用率，您可以檢查 Amazon EC2 執行個體的總體系統資源用量情況。下圖顯示有 8 個 GPU 核心的 `ml.p3.16xlarge` 執行個體訓練工作範例。您可以監控訓練工作是否分佈良好，並充分利用所有 GPU。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-insights-node-gpu.gif)


**一段時間的總體系統使用率**

下列熱度圖顯示 `ml.p3.16xlarge` 執行個體在一段時間內的整體系統使用率範例，投影到二維圖上。每個 CPU 和 GPU 核心都列在垂直軸上，並透過顏色方案記錄一段時間內的使用率，其中明亮的顏色代表低使用率，較暗的顏色代表高使用率。請參閱圖右側帶標籤的顏色條，以深入了解哪個顏色級別與哪個使用率相對應。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-insights-node-heatmap.png)


## Rules
<a name="debugger-on-studio-insights-rules"></a>

使用**規則**標籤可找出您的訓練工作的分析規則分析總結。如果訓練工作啟動時具有分析規則，文字會以純白色文字強調顯示。非作用中規則會以灰色文字暗化。若要啟動這些規則，請依照[使用透過 Amazon SageMaker Debugger 管理的內建剖析工具規則](use-debugger-built-in-profiler-rules.md)中的指示。

![\[SageMaker Debugger 深入分析儀表板中的規則索引標籤\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-insights-rules.png)


# 將 Amazon SageMaker Debugger 深入分析執行個體關機
<a name="debugger-on-studio-insights-close"></a>

當您未使用 SageMaker Debugger 深入分析儀表板時，您應該將應用程式執行個體關機，以避免產生額外費用。

**將 Studio Classic 中的 SageMaker Debugger 深入分析應用程式執行個體關機**

![\[動畫螢幕擷取畫面，顯示如何關閉 SageMaker Debugger 深入分析儀表板執行個體。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-studio-insights-shut-down.png)


1. 在 Studio Classic 中，選取**執行中執行個體和核心**圖示 (![\[Square icon with a white outline of a cloud on a dark blue background.\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/icons/Running_squid.png))。

1. 在**執行中的應用程式**清單下，找尋 **sagemaker-debugger-1.0** 應用程式。選取應用程式旁邊的關機圖示 (![\[Power button icon with a circular shape and vertical line symbol.\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/icons/Shutdown_light.png))。SageMaker Debugger 深入分析儀表板會在 `ml.m5.4xlarge` 執行個體上執行。當您關閉 **sagemaker-debugger-1.0** 應用程式時，此執行個體也會從**運作中的執行個體**中消失。

# SageMaker Debugger 互動報告
<a name="debugger-profiling-report"></a>

接收由 Debugger 自動產生的分析報告。Debugger 報告提供訓練工作的深入解析，以及改善模型效能的建議。下列螢幕擷取畫面，顯示 Debugger 分析報告的拼貼。如需進一步了解，請參閱[SageMaker Debugger 互動報告](#debugger-profiling-report)。

**注意**  
您可以在訓練工作執行時或工作完成時，下載 Debugger 報告。在訓練期間，Debugger 會同時更新報告，反映目前規則的評估狀態。只有在訓練工作完成後，您才能下載完整的 Debugger 報告。

**重要**  
報告中的圖表和建議僅用於提供資訊，並非絕對。由您負責對資訊進行您自己獨立的評估。

![\[訓練工作 Debugger 摘要報告範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profile-report.jpg)


對於任何 SageMaker 訓練工作，SageMaker Debugger [ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) 規則會調用所有[監視和分析規則](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)，並將規則分析彙總為完整的報告。按照本指南，使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 或 S3 主控台下載報告，並了解您可以從分析結果中加以詮釋的內容。

**重要**  
報告中的圖表和建議僅用於提供資訊，並非絕對。由您負責對資訊進行您自己獨立的評估。

# 下載 SageMaker Debugger 分析報告
<a name="debugger-profiling-report-download"></a>

在訓練任務執行期間或任務完成後，使用 Amazon SageMaker Python SDK 和 AWS Command Line Interface (CLI) 下載 SageMaker Debugger 分析報告。 [Amazon SageMaker ](https://sagemaker.readthedocs.io/en/stable) 

**注意**  
若要取得 SageMaker Debugger 所產生的分析報告，您必須使用 SageMaker Debugger 提供的內建 [ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report) 規則。若要在訓練工作中啟動規則，請參閱[設定內建分析規則](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)。

**提示**  
您還可以隨時在 SageMaker Studio Debugger 詳情儀錶板控制器上按一下，下載報告。不需要任何額外的指令碼，即可下載報告。要瞭解如何從 Studio 下載報告，請參閱[開啟 Amazon SageMaker Debugger 深入分析儀表板](debugger-on-studio-insights.md)。

------
#### [ Download using SageMaker Python SDK and AWS CLI ]

1. 查看目前工作的預設 S3 輸出基底 URI。

   ```
   estimator.output_path
   ```

1. 查看目前的工作名稱。

   ```
   estimator.latest_training_job.job_name
   ```

1. Debugger 分析報告儲存名稱為 `<default-s3-output-base-uri>/<training-job-name>/rule-output`。設定規則輸出路徑，如下所示：

   ```
   rule_output_path = estimator.output_path + estimator.latest_training_job.job_name + "/rule-output"
   ```

1. 要檢查報告是否已生成，請在 `rule_output_path` 下使用 `aws s3 ls` 選定為 `--recursive`，以遞迴方式列出目錄和文件。

   ```
   ! aws s3 ls {rule_output_path} --recursive
   ```

   這會傳回文件的完整清單，文件位於一個名為 `ProfilerReport-1234567890` 的自動生成資料夾內。資料夾名稱是字串的組合：為 `ProfilerReport` 加上一個獨特的 10 位數標籤，是基於 ProfilerReport 規則起始時的 Unix 時間戳記。  
![\[規則輸出的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-rule-output-ls-example.png)

   `profiler-report.html` 是由 Debugger 自動產生的分析報告。其他的檔案還有儲存在 JSON 中的內建規則分析元件，以及用來將元件彙總到報表內的 Jupyter 筆記本。

1. 使用 `aws s3 cp` 以遞迴方式下載文件。下列指令會將所有規則輸出檔案儲存到目前工作目錄下的 `ProfilerReport-1234567890` 資料夾中。

   ```
   ! aws s3 cp {rule_output_path} ./ --recursive
   ```
**提示**  
如果使用 Jupyter 筆記本伺服器，請執行 `!pwd` 再次檢查目前的工作目錄。

1. 在 `/ProfilerReport-1234567890/profiler-output` 目錄下，打開 `profiler-report.html`。如果使用 JupyterLab，請選擇 **Trust HTML** 查看自動產生的 Debugger 分析報告。  
![\[規則輸出的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-rule-output-open-html.png)

1. 開啟 `profiler-report.ipynb` 檔案以探索報告產生的方式。您還可以使用 Jupyter 筆記本檔案來自訂和擴充分析報告。

------
#### [ Download using Amazon S3 Console ]

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 搜尋基礎 S3 儲存貯體。例如，如果您尚未指定任何基本作業名稱，則基礎 S3 儲存貯體名稱應採用下列格式：`sagemaker-<region>-111122223333`。透過*依名稱搜尋儲存貯體*欄位查詢基礎 S3 儲存貯體。  
![\[規則輸出 S3 儲存貯體 URI 的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-0.png)

1. 在基礎 S3 儲存貯體中，在*依字首搜尋物件*輸入欄位中指定工作名稱的字首，藉以查詢訓練工作名稱。選擇訓練工作名稱。  
![\[S3 儲存貯體 URI 規則輸出的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-1.png)

1. 在訓練工作的 S3 儲存貯體中，Debugger 收集的訓練資料必須有三個子資料夾：**debug-output/**、**profiler-output/** 和 **rule-output/**。請選擇**rule-output/**。  
![\[規則輸出 S3 儲存貯體 URI 的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-2.png)

1. 在 **rule-output/** 資料夾中，選擇 **ProfilerReport-1234567890**，然後選擇 **profiler-output/** 資料夾。**profiler-output/** 資料夾包含 **profiler-report.html** (以 html 格式自動產生的分析報告)、**profiler-report.ipynb** (包含用於產生報告之指令碼的 Jupyter 筆記本)，以及一個 **profiler-report/** 資料夾 (包含作為報表元件的規則分析 JSON 檔案)。

1. 選取 **profiler-report.html** 檔案，選擇 **Actions**，然後選擇 **Download**。  
![\[規則輸出 S3 儲存貯體 URI 的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-3.png)

1. 在 Web 瀏覽器中開啟下載的 **profiler-report.html** 檔案。

------

**注意**  
如果您在未設定 Debugger 特定參數的情況下開始訓練工作，則 Debugger 只會根據系統監視規則產生報告，因為 Debugger 參數並未被設定以儲存框架度量。若要啟用框架度量分析並收到擴充的 Debugger 分析報告，請在建構或更新 SageMaker AI 估算器時設定 `profiler_config` 參數。  
要瞭解如何配置 `profiler_config` 參數，請參閱[架構分析的估算器組態](debugger-configure-framework-profiling.md)。  
要更新目前訓練工作並啟用框架度量分析，請參閱[更新 Debugger 框架分析組態](debugger-update-monitoring-profiling.md)。

# Debugger 分析報告解析
<a name="debugger-profiling-report-walkthrough"></a>

本節將引導您一個區段一個區段完成 Debugger 分析報告。本分析報告是由監視和效能分析的內建規則所產生。本報告僅顯示發現問題之規則的結果圖表。

**重要**  
報告中的圖表和建議僅用於提供資訊，並非絕對。由您負責對資訊進行您自己獨立的評估。

**Topics**
+ [訓練工作總結](#debugger-profiling-report-walkthrough-summary)
+ [系統使用率統計](#debugger-profiling-report-walkthrough-system-usage)
+ [框架度量摘要](#debugger-profiling-report-walkthrough-framework-metrics)
+ [規則摘要](#debugger-profiling-report-walkthrough-rules-summary)
+ [分析訓練循環 — 步驟持續時間](#debugger-profiling-report-walkthrough-step-durations)
+ [GPU 使用率分析](#debugger-profiling-report-walkthrough-gpu-utilization)
+ [批次大小](#debugger-profiling-report-walkthrough-batch-size)
+ [CPU 瓶頸](#debugger-profiling-report-walkthrough-cpu-bottlenecks)
+ [I/O 瓶頸](#debugger-profiling-report-walkthrough-io-bottlenecks)
+ [多 GPU 訓練中的負載平衡](#debugger-profiling-report-walkthrough-workload-balancing)
+ [GPU 記憶體分析](#debugger-profiling-report-walkthrough-gpu-memory)

## 訓練工作總結
<a name="debugger-profiling-report-walkthrough-summary"></a>

在報告的開頭，Debugger 會提供訓練工作的摘要。在本節中，您可以概觀不同訓練階段的持續時間和時間戳記。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-summary.gif)


總結表包含以下資訊：
+ **start\$1time** — 訓練工作開始的確切時間。
+ **end\$1time** — 訓練工作完成的確切時間。
+ **job\$1duration\$1in\$1seconds** — 從**start\$1time**到**end\$1time**的總工作時間。
+ **training\$1loop\$1start** － 第一個 epoch 的第一步開始的確切時間。
+ **training\$1loop\$1end** － 最後一個 epoch 的最後一步完成的確切時間。
+ **training\$1loop\$1duration\$1in\$1seconds** － 訓練循環開始至訓練循環結束的總時間。
+ **initialization\$1in\$1seconds** － 將工作初始化所花費的時間。初始化階段涵蓋從 **start\$1time** 至 **training\$1loop\$1start** 的時間。初始化時間是用來編譯訓練指令碼、啟動訓練指令碼、建立和初始化模型、啟動 EC2 執行個體，以及下載訓練資料。
+ **finalization\$1in\$1seconds** — 完成訓練工作所花費的時間，例如完成模型訓練、更新模型成品以及關閉 EC2 執行個體。完成階段涵蓋從 **training\$1loop\$1end** 至 **end\$1time** 的時間。
+ **initialization (%)**— **初始化**的時間佔總 **job\$1duration\$1in\$1seconds** 的百分比。
+ **training loop (%)**— **訓練循環**所花費的時間佔總 **job\$1duration\$1in\$1seconds** 的百分比。
+ **finalization (%)** **— **完成**的時間佔總 job\$1duration\$1in\$1seconds** 的百分比。

## 系統使用率統計
<a name="debugger-profiling-report-walkthrough-system-usage"></a>

在本區段中，您可以查看系統使用率統計資料的概觀。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-system-usage.png)


Debugger 分析報告包含下列資訊：
+ **node** — 列出節點的名稱。如果在多節點 (多個 EC2 執行個體) 上使用分散式訓練，則節點名稱的格式為 `algo-n`。
+ **metric** — Debugger 收集的系統指標：CPU、GPU、CPU 記憶體、GPU 記憶體、I/O 和網路指標。
+ **Unit** — 指標的單位。
+ **max** — 每個系統指標的最大值。
+ **p99** — 每個系統使用率的第 99 個百分位數。
+ **p95** — 每個系統使用率的第 95 個百分位數。
+ **p50** — 每個系統利用率的第 50 個百分位數 (中位數)。
+ **min** — 每個系統指標的最小值。

## 框架度量摘要
<a name="debugger-profiling-report-walkthrough-framework-metrics"></a>

在本區段中，下列圓餅圖顯示 CPU 和 GPU 上架構執行的明細。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-metrics-summary.gif)


每個圓餅圖分析從以下各方面收集的框架度量：
+ **TRAIN/EVAL 階段與其他階段比率** — 顯示在不同訓練階段所花費的時間比率。
+ **向前和向後傳遞的比率** — 顯示訓練循環中向前和向後傳遞所花費的持續時間比率。
+ **CPU/GPU 運算子的比率** — 顯示在 CPU 或 GPU上運作的運算子 (例如卷積運算子) 所花費的時間比率。
+ **架構內記錄的一般指標** — 顯示花費在主要架構指標 (例如資料載入、向前和向後傳遞) 的時間比率。

### 概觀：CPU 運算子
<a name="debugger-profiling-report-walkthrough-cpu-operators"></a>

本區段提供 CPU 運算子的詳細資訊。此表格會顯示時間百分比，以及花費在最常被呼叫的 CPU 運算子上的絕對累計時間。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-cpu-operators.gif)


### 概觀：GPU 運算子
<a name="debugger-profiling-report-walkthrough-gpu-operators"></a>

本區段提供 GPU 運算子的詳細資訊。此表格顯示時間百分比，以及花費在最常被呼叫的 GPU 運算子的絕對累積時間。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-gpu-operators.gif)


## 規則摘要
<a name="debugger-profiling-report-walkthrough-rules-summary"></a>

在本區段中，Debugger 會彙總所有規則評估結果、分析、規則說明和建議。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-rules-summary.png)


## 分析訓練循環 — 步驟持續時間
<a name="debugger-profiling-report-walkthrough-step-durations"></a>

在本區段中，您可以找到每個節點的每個 GPU 核心上的步驟持續時間的詳細統計資料。Debugger 評估平均值、最大值、P99、p95、p50 和步驟持續時間的最小值，並評估步驟異常值。下列長條圖顯示在不同工作者節點和 GPU 上擷取的步驟持續時間。您可以透過選擇右側的圖例來啟用或禁用每個工作者的長條圖。您可以檢查是否存在導致步驟持續時間出現異常值的特定 GPU。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-framework-step-duration.gif)


## GPU 使用率分析
<a name="debugger-profiling-report-walkthrough-gpu-utilization"></a>

本區段顯示 GPU 核心使用率的詳細統計資料，使用率以 LowGPUUtilization 規則為基礎。它還總結了 GPU 使用率的統計資料、平均值、p95 和 p5，以判斷訓練工作是否未充分利用 GPU。

## 批次大小
<a name="debugger-profiling-report-walkthrough-batch-size"></a>

本區段顯示 CPU 總使用率、個別 GPU 使用率和 GPU 記憶體使用紀錄的詳細統計資料。BatchSize 規則會決定您是否需要變更批次大小，以提升 GPU 使用率。您可以檢查批次大小是否太小，導致使用率不足或過大，造成過度使用和記憶體不足的問題。在圖表中，方塊顯示 p25 和 p75 百分位數與中位數的距離範圍 (分別填滿深紫色和亮黃色)，誤差列顯示下限的第 5 個百分位數和上限的第 95 個百分位數。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-batch-size.png)


## CPU 瓶頸
<a name="debugger-profiling-report-walkthrough-cpu-bottlenecks"></a>

在此區段中，您可以深入探討 CPUBottleneck 規則從您的工作中偵測到的 CPU 瓶頸。規則會檢查 CPU 使用率是否高於 `cpu_threshold` (預設為 90%)，以及 GPU 使用率是否低於 `gpu_threshold` (預設為 10%)。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-cpu-bottlenecks.png)


圓餅圖會顯示下列資訊：
+ **CPU 瓶頸造成的低 GPU 使用率** — 顯示 GPU 使用率高於和低於閾值的資料點與符合 CPU 瓶頸條件資料點的比率。
+ **TRAIN/EVAL 階段與其他階段的比率** — 顯示在不同訓練階段所花費的時間比率。
+ **向前和向後傳遞**的比率 — 顯示訓練循環中向前和向後傳遞的持續時間比率。
+ **CPU/GPU 運算子的比率** — 顯示 Python 運算子花費在 GPU 和 CPU 上的時間比率，例如資料載入器處理程序和向前及向後傳遞運算子 。
+ **框架中記錄的一般指標** — 顯示主要框架指標，以及在指標上所花費的時間的比率。

## I/O 瓶頸
<a name="debugger-profiling-report-walkthrough-io-bottlenecks"></a>

在本區段中，您可以找到 I/O 瓶頸的摘要。此規則會評估 I/O 等待時間和 GPU 使用率，並監控 I/O 要求所花費的時間是否超過總訓練時間的百分比臨界值。這可能顯示出 I/O 瓶頸，GPU 在等待資料從儲存裝置送達。

## 多 GPU 訓練中的負載平衡
<a name="debugger-profiling-report-walkthrough-workload-balancing"></a>

在本區段中，您可以識別 GPU 之間工作負載平衡的問題。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-workload-balancing.gif)


## GPU 記憶體分析
<a name="debugger-profiling-report-walkthrough-gpu-memory"></a>

在本區段中，您可以分析 GPUMemoryIncrease 規則所收集的 GPU 記憶體使用率。在圖表中，方塊顯示 p25 和 p75 百分位數與中位數的距離範圍 (分別填滿深紫色和亮黃色)，誤差列顯示下限的第 5 個百分位數和上限的第 95 個百分位數。

![\[Debugger 分析報告的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-profiling-report-gpu-memory-utilization.png)


# 選擇退出收集 Amazon SageMaker Debugger 用量統計資料
<a name="debugger-telemetry"></a>

針對所有 SageMaker 訓練任務，Amazon SageMaker Debugger 會執行[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report)規則並自動產生[SageMaker Debugger 互動報告](debugger-profiling-report.md)。此 `ProfilerReport` 規則提供 Jupyter 筆記本檔案 (`profiler-report.ipynb`)，可產生對應的 HTML 檔案 (`profiler-report.html`)。

Jupyter 筆記本在使用者開啟最終 `profiler-report.html` 檔案時，會收集唯一 `ProfilerReport` 規則的處理任務 ARN，而 Debugger 會在 Jupyter 筆記本中包含程式碼，收集分析報告用量統計資料。

Debugger 只會收集使用者是否開啟最終 HTML 報告的相關資訊。它**不會**從訓練任務、訓練資料、訓練指令碼、處理任務、日誌或分析報告本身的內容中收集任何資訊。

您可以使用下列其中一個選項，選擇退出用量統計資料的集合。

## (建議) 選項 1：在執行訓練任務之前選擇退出
<a name="debugger-telemetry-profiler-report-opt-out-1"></a>

若要選擇退出，您必須將下列 Debugger `ProfilerReport` 規則組態新增至訓練任務的請求。

------
#### [ SageMaker Python SDK ]

```
estimator=sagemaker.estimator.Estimator(
    ...

    rules=ProfilerRule.sagemaker(
        base_config=rule_configs.ProfilerReport()
        rule_parameters={"opt_out_telemetry": "True"}
    )
)
```

------
#### [ AWS CLI ]

```
"ProfilerRuleConfigurations": [ 
    { 
        "RuleConfigurationName": "ProfilerReport-1234567890",
        "RuleEvaluatorImage": "895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest",
        "RuleParameters": {
            "rule_to_invoke": "ProfilerReport", 
            "opt_out_telemetry": "True"
        }
    }
]
```

------
#### [ 適用於 Python (Boto3) 的 AWS SDK ]

```
ProfilerRuleConfigurations=[ 
    {
        'RuleConfigurationName': 'ProfilerReport-1234567890',
        'RuleEvaluatorImage': '895741380848.dkr.ecr.us-west-2.amazonaws.com/sagemaker-debugger-rules:latest',
        'RuleParameters': {
            'rule_to_invoke': 'ProfilerReport',
            'opt_out_telemetry': 'True'
        }
    }
]
```

------

## 選項 2：在訓練任務完成後選擇退出
<a name="debugger-telemetry-profiler-report-opt-out-2"></a>

若要在訓練完成後選擇退出，則需要修改 `profiler-report.ipynb` 檔案。

**注意**  
即使您使用**選項 2** 退出之後，如果沒有將**選項 1** 新增到訓練任務的請求中，自動產生的 HTML 報告仍會報告用量統計資料。

1. 請遵循[下載 SageMaker Debugger 分析報告](debugger-profiling-report-download.md)頁面中下載 Debugger 分析報告檔案的指示。

1. 在 `/ProfilerReport-1234567890/profiler-output` 目錄中，開啟 `profiler-report.ipynb`。

1. 將**opt\$1out=True**新增至第五個程式碼儲存格中的 `setup_profiler_report()` 函式，如以下範例程式碼所示：

   ```
   setup_profiler_report(processing_job_arn, opt_out=True)
   ```

1. 執行程式碼儲存格以完成退出。

# 使用偵錯工具 Python 用戶端程式庫分析資料
<a name="debugger-analyze-data"></a>

在訓練任務執行中或完成訓練任務時，您可以使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 和 [SMDebug 用戶端程式庫](https://github.com/awslabs/sagemaker-debugger/)存取由偵錯工具收集的訓練資料。偵錯工具 Python 用戶端程式庫提供分析和視覺化工具，可讓您深入探索訓練工作資料。

**安裝程式庫並使用其分析工具 (在 JupyterLab 筆記本或 IPython 核心內)**

```
! pip install -U smdebug
```

下列主題將逐步引導您如何使用 Python 偵錯工具，以視覺化和分析偵錯工具所收集的訓練資料。

**分析系統和架構指標**
+ [存取分析資料](debugger-analyze-data-profiling.md)
+ [系統指標和架構指標資料繪圖](debugger-access-data-profiling-default-plot.md)
+ [使用 Pandas 資料剖析工具存取分析資料](debugger-access-data-profiling-pandas-frame.md)
+ [存取 Python 分析統計資料](debugger-access-data-python-profiling.md)
+ [合併多個分析追蹤檔案的時間軸](debugger-merge-timeline.md)
+ [效能分析資料載入器](debugger-data-loading-time.md)

# 存取分析資料
<a name="debugger-analyze-data-profiling"></a>

SMDebug `TrainingJob` 類別會從儲存系統和架構指標的 S3 儲存貯體讀取資料。

**設定 `TrainingJob` 物件並擷取訓練工作的效能分析事件檔案**

```
from smdebug.profiler.analysis.notebook_utils.training_job import TrainingJob
tj = TrainingJob(training_job_name, region)
```

**提示**  
您需要指定參數 `training_job_name` 和 `region` 以記錄至訓練工作。有兩種方式可指定訓練任務資訊：  
在估算器仍連接至訓練工作時，請使用 SageMaker Python SDK。  

  ```
  import sagemaker
  training_job_name=estimator.latest_training_job.job_name
  region=sagemaker.Session().boto_region_name
  ```
直接傳遞字串。  

  ```
  training_job_name="your-training-job-name-YYYY-MM-DD-HH-MM-SS-SSS"
  region="us-west-2"
  ```

**注意**  
根據預設值，SageMaker Debugger 會收集系統指標，以監控硬體資源使用率和系統瓶頸。執行下列函式時，您可能會收到有關架構指標無法使用的錯誤訊息。要擷取架構設定檔資料並獲得架構操作的深入分析，您必須啟用架構分析。  
如果您使用 SageMaker Python SDK 來操作訓練工作請求，請將 `framework_profile_params` 傳送至估算器的 `profiler_config` 引數。如需進一步了解，請參閱[設定 SageMaker Debugger 架構分析](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configure-framework-profiling.html)。
如果您使用 Studio Classic，請使用偵錯工具深入解析儀表板上的**分析**切換按鈕來開啟分析。如需進一步了解，請參閱 [SageMaker Debugger 深入分析儀表板控制器](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio-insights-controllers.html)。

**擷取訓練任務描述和儲存指標資料的 S3 儲存貯體 URI**

```
tj.describe_training_job()
tj.get_config_and_profiler_s3_output_path()
```

**檢查系統和架構指標是否可從 S3 URI 取得**

```
tj.wait_for_sys_profiling_data_to_be_available()
tj.wait_for_framework_profiling_data_to_be_available()
```

**在指標資料可用之後，建立系統和架構讀取器物件**

```
system_metrics_reader = tj.get_systems_metrics_reader()
framework_metrics_reader = tj.get_framework_metrics_reader()
```

**重新整理和擷取最新的訓練事件檔案**

讀取器物件具有延伸方法 `refresh_event_file_list()`，可擷取最新的訓練事件檔案。

```
system_metrics_reader.refresh_event_file_list()
framework_metrics_reader.refresh_event_file_list()
```

# 系統指標和架構指標資料繪圖
<a name="debugger-access-data-profiling-default-plot"></a>

您可以透過下列視覺化類別的系統和演算法指標物件，繪製時間軸圖表與長條圖。

**注意**  
若要在下列視覺化物件繪圖方法中使用限縮指標來視覺化資料，請指定參數 `select_dimensions` 和 `select_events`。例如，如果您指定 `select_dimensions=["GPU"]`，繪圖方法會篩選包含關鍵字 "GPU" 的指標。如果您指定 `select_events=["total"]`，則繪圖方法會篩選指標名稱結尾包含 "total" 事件標籤的指標。如果您啟用這些參數並提供關鍵字字串，視覺化類別會傳回含有篩選指標的圖表。
+ `MetricsHistogram` 類別

  ```
  from smdebug.profiler.analysis.notebook_utils.metrics_histogram import MetricsHistogram
  
  metrics_histogram = MetricsHistogram(system_metrics_reader)
  metrics_histogram.plot(
      starttime=0, 
      endtime=system_metrics_reader.get_timestamp_of_latest_available_file(), 
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"]                  # optional
  )
  ```
+ `StepTimelineChart` 類別

  ```
  from smdebug.profiler.analysis.notebook_utils.step_timeline_chart import StepTimelineChart
  
  view_step_timeline_chart = StepTimelineChart(framework_metrics_reader)
  ```
+ `StepHistogram` 類別

  ```
  from smdebug.profiler.analysis.notebook_utils.step_histogram import StepHistogram
  
  step_histogram = StepHistogram(framework_metrics_reader)
  step_histogram.plot(
      starttime=step_histogram.last_timestamp - 5 * 1000 * 1000, 
      endtime=step_histogram.last_timestamp, 
      show_workers=True
  )
  ```
+ `TimelineCharts` 類別

  ```
  from smdebug.profiler.analysis.notebook_utils.timeline_charts import TimelineCharts
  
  view_timeline_charts = TimelineCharts(
      system_metrics_reader, 
      framework_metrics_reader,
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"]                  # optional 
  )
  
  view_timeline_charts.plot_detailed_profiler_data([700,710])
  ```
+ `Heatmap` 類別

  ```
  from smdebug.profiler.analysis.notebook_utils.heatmap import Heatmap
  
  view_heatmap = Heatmap(
      system_metrics_reader,
      framework_metrics_reader,
      select_dimensions=["CPU", "GPU", "I/O"], # optional
      select_events=["total"],                 # optional
      plot_height=450
  )
  ```

# 使用 Pandas 資料剖析工具存取分析資料
<a name="debugger-access-data-profiling-pandas-frame"></a>

下面的 `PandasFrame` 類別提供工具，將收集的分析資料轉換為 Pandas 資料框架。

```
from smdebug.profiler.analysis.utils.profiler_data_to_pandas import PandasFrame
```

`PandasFrame` 類別採用 `tj` 物件的 S3 儲存貯體輸出路徑，其方法 `get_all_system_metrics()` `get_all_framework_metrics()` 會以 Pandas 資料格式傳回系統指標和架構指標。

```
pf = PandasFrame(tj.profiler_s3_output_path)
system_metrics_df = pf.get_all_system_metrics()
framework_metrics_df = pf.get_all_framework_metrics(
    selected_framework_metrics=[
        'Step:ModeKeys.TRAIN', 
        'Step:ModeKeys.GLOBAL'
    ]
)
```

# 存取 Python 分析統計資料
<a name="debugger-access-data-python-profiling"></a>

Python 設定檔會在訓練指令碼和 SageMaker AI 深度學習架構中，提供與 Python 函式和運算子相關的架構指標。

<a name="debugger-access-data-python-profiling-modes"></a>**訓練模式和階段 Python 分析**

若要在訓練期間分析特定的間隔，以分割每個間隔的統計資料，偵錯工具會提供設定模式和階段的工具。

對於訓練模型，必須使用以下 `PythonProfileModes` 類別：

```
from smdebug.profiler.python_profile_utils import PythonProfileModes
```

此類別提供下列選項：
+ `PythonProfileModes.TRAIN`—如果您想要分析訓練階段中的目標步驟，請使用此選項。此模式選項僅適用於 TensorFlow。
+ `PythonProfileModes.EVAL`—如果您要分析評估階段中的目標步驟，請使用此選項。此模式選項僅適用於 TensorFlow。
+ `PythonProfileModes.PREDICT`—如果您要分析預測階段中的目標步驟，請使用此選項。此模式選項僅適用於 TensorFlow。
+ `PythonProfileModes.GLOBAL`—如果您想分析全面階段 (包含先前三個階段) 中的目標步驟，請使用此選項。此模式選項僅適用於 PyTorch。
+ `PythonProfileModes.PRE_STEP_ZERO`—如果您要分析在第一個週期的第一個訓練步驟開始之前的初始化階段中的目標步驟，請使用此選項。此階段包含初始工作提交、將訓練指令碼上傳至 EC2 執行個體、準備 EC2 執行個體，以及下載輸入資料。此模式選項適用於 TensorFlow 和 PyTorch。
+ `PythonProfileModes.POST_HOOK_CLOSE`—如果您想要分析在訓練工作完成且偵錯工具勾點關閉後的完成階段中的目標步驟，請使用此選項。此階段包含結束和完成訓練工作時的分析資料。此模式選項適用於 TensorFlow 和 PyTorch。

<a name="debugger-access-data-python-profiling-phases"></a>對於訓練階段，請使用下列 `StepPhase` 類別：

```
from smdebug.profiler.analysis.utils.python_profile_analysis_utils import StepPhase
```

此類別提供下列選項：
+ `StepPhase.START`—用於指定初始化階段的起點。
+ `StepPhase.STEP_START`—用於指定訓練階段的開始步驟。
+ `StepPhase.FORWARD_PASS_END`—用於指定向前傳遞結束的步驟。這個選項只適用於 PyTorch。
+ `StepPhase.STEP_END`—用於指定訓練階段中的結束步驟。這個選項只適用於 TensorFlow。
+ `StepPhase.END`—用於指定完成 (post-hook-close) 階段的終點。如果回呼勾點未關閉，則不會產生完成階段的分析。

**Python 效能分析的分析工具**

偵錯工具有兩個分析工具支援 Python 效能分析：
+ CPileFile—標準的 Python 效能分析工具。啟用分析時，cProfile 收集呼叫的每個函式的 CPU 時間的架構指標。
+ Pyinstrument—這是一個低額外負荷的 Python 效能分析工具，每毫秒取樣分析事件。

若要進一步了解 Python 效能分析選項以及所收集的內容，請參閱[預設系統監控和使用不同分析選項的自訂架構分析](debugger-configure-framework-profiling-options.md)。

以下的 `PythonProfileAnalysis`、`cProfileAnalysis`、`PyinstrumentAnalysis` 類別方法，供擷取和分析 Python 效能分析資料。每個函式都會從預設的 S3 URI 載入最新資料。

```
from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis
```

要設定 Python 效能分析物件以進行分析，使用 cProfileAnalysis 或 PyinstrumentAnalysis 類別，如下面的範例程式碼所示。它顯示如何設置 `cProfileAnalysis` 物件，如果你想使用 `PyinstrumentAnalysis`，請取代類別名稱。

```
python_analysis = cProfileAnalysis(
    local_profile_dir=tf_python_stats_dir, 
    s3_path=tj.profiler_s3_output_path
)
```

下列方法可供 `cProfileAnalysis` 和 `PyinstrumentAnalysis` 類別擷取 Python 分析統計資料：
+ `python_analysis.fetch_python_profile_stats_by_time(start_time_since_epoch_in_secs, end_time_since_epoch_in_secs)`—接受開始時間和結束時間，並傳回其開始或結束時間與提供的間隔重疊的步驟統計資料的函式統計資料。
+ `python_analysis.fetch_python_profile_stats_by_step(start_step, end_step, mode, start_phase, end_phase)`—接受開始步驟和結束步驟，並傳回效能分析的 `step` 滿足 `start_step <= step < end_step` 的步驟統計資料的函式統計資料。
  + `start_step` 和 `end_step` (str) — 指定擷取 Python 效能分析的分析統計資料的開始步驟和結束步驟。
  + `mode` (str) — 使用 `PythonProfileModes` 列舉器指定訓練工作的模式。預設值為 `PythonProfileModes.TRAIN`。在 [訓練模式和階段 Python 效能分析](#debugger-access-data-python-profiling-modes)一節內，提供可用性選項。
  + `start_phase` (str) —使用 `StepPhase` 列舉器類別指定目標步驟中的開始階段。此參數可在不同訓練階段之間啟用分析。預設值為 `StepPhase.STEP_START`。在[訓練模式和階段 Python 效能分析](#debugger-access-data-python-profiling-phases)一節中提供可用性選項。
  + `end_phase` (str) —使用 `StepPhase` 列舉器類別指定目標步驟中的結束階段。此參數設定訓練的結束階段。可用性選項與 `start_phase` 參數的選項相同。預設值為 `StepPhase.STEP_END`。在[訓練模式和階段 Python 效能分析](#debugger-access-data-python-profiling-phases)一節中提供可用性選項。
+ `python_analysis.fetch_profile_stats_between_modes(start_mode, end_mode)`—從開始和結束模式之間的 Python 分析中擷取統計資料。
+ `python_analysis.fetch_pre_step_zero_profile_stats()`—從 Python 分析中擷取統計資訊，直到步驟 0。
+ `python_analysis.fetch_post_hook_close_profile_stats()`—勾點關閉後，從 Python 分析中擷取統計資料。
+ `python_analysis.list_profile_stats()`—傳回 Python 分析統計資料的 DataFrame。每一列都會保留每次效能分析執行個體的中繼資料，以及對應的統計資料檔案 (每個步驟一個)。
+ `python_analysis.list_available_node_ids()`—傳回 Python 效能分析統計資料的可用節點 ID 清單。

`cProfileAnalysis` 類別特定方法：
+  `fetch_profile_stats_by_training_phase()`—為開始和結束模式的每個可能組合，擷取和彙總 Python 分析統計資料。例如，如果在啟用詳細分析時訓練和驗證階段已完成，則組合為`(PRE_STEP_ZERO, TRAIN)`、`(TRAIN, TRAIN)`、`(TRAIN, EVAL)`、`(EVAL, EVAL)` 和 `(EVAL, POST_HOOK_CLOSE)`。這些組合中的所有統計資料檔案都會被彙總。
+  `fetch_profile_stats_by_job_phase()`—按作業階段擷取和彙總 Python 分析統計資訊。工作階段為 `initialization` (分析直到步驟 0)、`training_loop` (訓練和驗證) 和 `finalization` (勾點關閉後的效能分析)。

# 合併多個分析追蹤檔案的時間軸
<a name="debugger-merge-timeline"></a>

SMDebug 用戶端程式庫提供效能分析的分析和視覺化工具，用於合併由偵錯工具收集的系統指標、架構指標和 Python 分析資料的時間軸。

**提示**  
在繼續之前，您需要設定一個 TrainingJob 物件，本頁中的範例將使用該物件。如需設定 TrainingJob 物件的更多相關資訊，請參閱[存取分析資料](debugger-analyze-data-profiling.md)。

`MergedTimeline` 類別提供工具，可在單一時間軸內整合和關聯不同的效能分析資訊。偵錯工具從訓練工作的不同階段擷取效能分析資料和註釋之後，追蹤事件的 JSON 檔案會儲存在預設的 `tracefolder` 目錄中。
+ 對於 Python 各層中的註釋，追蹤檔案會儲存在 `*pythontimeline.json` 內。
+ 對於 TensorFlow C\$1\$1 各層中的註釋，追蹤檔案會儲存在 `*model_timeline.json` 內。
+ Tensorflow 效能分析工具會將事件儲存為一個 `*trace.json.gz` 檔。

**提示**  
如果要列出所有 JSON 追蹤檔案，請使用下列 AWS CLI 命令：  

```
! aws s3 ls {tj.profiler_s3_output_path} --recursive | grep '\.json$'
```

如下列螢幕擷取畫面動畫所示，將從不同效能分析來源擷取的追蹤事件會置於單一繪圖中並對齊，可提供訓練工作不同階段中發生的所有事件的概觀。

![\[合併時間軸的範例\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/debugger/debugger-merged-timeline.gif)


**提示**  
要使用鍵盤與追蹤應用程式上的合併時間軸互動，請使用 `W` 鍵放大、`A`鍵向左移動、`S` 鍵縮小、`D` 鍵向右移動。

使用 `smdebug.profiler.analysis.utils.merge_timelines` 模組中的下列 `MergedTimeline` API 作業和類別方法，可將多個事件追蹤 JSON 檔案合併到一個追蹤事件 JSON 檔案。

```
from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline

combined_timeline = MergedTimeline(path, file_suffix_filter, output_directory)
combined_timeline.merge_timeline(start, end, unit)
```

`MergedTimeline` API 作業會傳遞下列參數：
+ `path` (str) — 指定包含系統和架構效能分析追蹤檔案的根資料夾 (`/profiler-output`)。您可以使用 SageMaker AI 估算器類別方法，或 TrainingJob 物件來尋找 `profiler-output`。例如 `estimator.latest_job_profiler_artifacts_path()` 或 `tj.profiler_s3_output_path`。
+ `file_suffix_filter` (清單) — 指定要合併時間軸的檔案尾碼篩選條件清單。可用的附加篩選條件為 `["model_timeline.json", "pythontimeline.json", "trace.json.gz"].`，如果未手動指定此參數，則會依預設值合併所有追蹤檔案。
+ `output_directory` (str) — 指定儲存合併時間軸 JSON 檔案的路徑。預設值為 `path` 參數指定的目錄。

`merge_timeline()` 類別方法傳遞下列參數來執行合併程序：
+ `start` (int) — 指定開始時間 (以微秒和 Unix 時間格式表示) 或開始步驟以合併時間軸。
+ `end` (int) — 指定結束時間 (以微秒和 Unix 時間格式表示) 或結束步驟以合併時間軸。
+ `unit` (str) — 在 `"time"` 和 `"step"` 之間選擇。預設值為 `"time"`。

使用下列範例程式碼，執行 `merge_timeline()` 方法並下載合併的 JSON 檔案。
+ 將時間軸與 `"time"` 單位選項合併。下列範例程式碼會合併 Unix 開始時間 (絕對零 Unix 時間) 與目前 Unix 時間之間的所有可用追蹤檔案，這表示您可以合併整個訓練持續時間的時間軸。

  ```
  import time
  from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline
  from smdebug.profiler.profiler_constants import CONVERT_TO_MICROSECS
  
  combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./")
  combined_timeline.merge_timeline(0, int(time.time() * CONVERT_TO_MICROSECS))
  ```
+ 將時間軸與 `"step"` 單位選項合併。下列範例程式碼會合併步驟 3 和步驟 9 之間的所有可用時間軸。

  ```
  from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline
  
  combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./")
  combined_timeline.merge_timeline(3, 9, unit="step")
  ```

用 `chrome://tracing` 在 Chrome 瀏覽器上打開 Chrome 追蹤應用程式，然後打開 JSON 檔案。您可以探索輸出以繪製合併的時間軸。

# 效能分析資料載入器
<a name="debugger-data-loading-time"></a>

在 PyTorch 中，資料下載迭代器 (例如 `SingleProcessingDataLoaderIter` 和 `MultiProcessingDataLoaderIter`) 在資料集上每次迭代開始時啟動。在初始化階段，PyTorch 依據設定的工作者數量打開工作者進程序，建立資料佇列以擷取資料和 `pin_memory` 執行緒。

若要使用 PyTorch 資料載入器效能分析工具，請匯入下列 `PT_dataloader_analysis` 類別：

```
from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis
```

將擷取的效能分析資料作為 Pandas 框架資料物件傳遞到[使用 Pandas 資料剖析工具存取分析資料](debugger-access-data-profiling-pandas-frame.md) 區段中：

```
pt_analysis = PT_dataloader_analysis(pf)
```

`pt_analysis` 物件可使用下列函式：

SMDebug `S3SystemMetricsReader` 類別會從指定給 `s3_trial_path` 參數的 S3 儲存貯體讀取系統指標。
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  分析會輸出這些初始化的中間值和最長持續時間。如果有極端值 (即持續時間大於中間值 2 倍)，該函式將列印這些持續時間的開始和結束時間。可用於在這些時間間隔內檢查系統指標。

  下面的清單顯示此類別的方法可用於哪種分析：
  + 哪種類型的資料載入迭代器被初始化。
  + 每個迭代器的工作者數量。
  + 檢查迭代器的初始化有無 pin\$1memory。
  + 迭代器在訓練期間初始化的次數。
+ `pt_analysis.analyze_dataloaderWorkers()`

  下面的清單顯示此類別的方法可用於哪種分析：
  + 在整個訓練期間分拆的工作者程序數量。
  + 背景工作者程序的中間值和最長持續時間。
  + 背景工作者處理程序的開始和結束時間的極端值。
+ `pt_analysis.analyze_dataloader_getnext()`

  下面的清單顯示此類別的方法可用於哪種分析：
  + 訓練期間呼叫 GetNext 的次數。
  + GetNext 呼叫次數的中間值和最長持續時間 (以微秒為單位)。
  + GetNext 呼叫持續時間極端值的開始時間、結束時間、持續時間和工作者 ID。
+ `pt_analysis.analyze_batchtime(start_timestamp, end_timestamp, select_events=[".*"], select_dimensions=[".*"])`

  偵錯工具收集所有 GetNext 呼叫的開始和結束時間。您可以找到訓練指令碼在一批資料上花費的時間量。在指定時段內，您可以識別不直接參與訓練的呼叫。這些呼叫可能來自下列作業：計算準確度、出於偵錯或記錄目的增加的損失，以及列印除錯資訊。這些操作可能會耗費大量運算或時間。我們可以透過使 Python 效能分析工具、系統指標和架構指標相互關聯，來識別此類操作。

  下面的清單顯示此類別的方法可用於哪種分析：
  + 透過尋找目前和後續 GetNext 呼叫的開始時間之間的差異來分析每個資料批次所花費的時間 `BatchTime_in_seconds`。
  + 尋找 `BatchTime_in_seconds` 的極端值，以及這些極端值的開始和結束時間。
  + 取得這些 `BatchTime_in_seconds` 時間戳記期間的系統和架構指標。可指出時間花在哪裡。
+ `pt_analysis.plot_the_window()`

  繪製開始時間戳記與結束時間戳記之間的時間軸圖表。