

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

# 在 Amazon SageMaker Studio Classic 中监控 AWS 计算资源利用率
<a name="debugger-profile-training-jobs"></a>

要跟踪训练作业的计算资源利用率，请使用 Amazon SageMaker Debugger 提供的监控工具。

对于您使用 SageMaker Python SDK 在 SageMaker AI 中运行的任何训练作业，Debugger 会每 500 毫秒收集一次基本的资源利用率指标，例如 CPU 利用率、GPU 利用率、GPU 内存利用率、网络和 I/O 等待时间。要查看训练作业的资源利用率指标控制面板，只需使用 [SageMaker Studio Experiments 中的 SageMaker Debugger UI](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html) 即可。

深度学习操作和步骤可能以毫秒为间隔运行。Amazon CloudWatch 以 1 秒为间隔收集指标，与之相比，Debugger 能够提供更精细的资源利用率指标，间隔低至 100 毫秒（0.1 秒），方便您深入研究操作或步骤级别的指标。

如果要更改指标收集时间间隔，您可以向训练作业启动程序中添加用于分析配置的参数。例如，如果您使用的是 SageMaker AI Python SDK，则需要在创建估算器对象时传递 `profiler_config` 参数。要了解如何调整资源利用率指标收集间隔，请参阅[用于在 SageMaker AI Python SDK 中使用 Deb SageMaker ugger 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 Experiments 中的 SageMaker Debugger UI](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 Deb SageMaker ugger Python 模块进行基本分析的估算器配置](debugger-configuration-for-profiling.md)
+ [使用由 Amazon SageMaker Debugger 管理的内置分析器规则](use-debugger-built-in-profiler-rules.md)
+ [Debugger 内置探查器规则列表](debugger-built-in-profiler-rules.md)
+ [亚马逊 SageMaker Studio 经典实验中的亚马逊 SageMaker 调试器用户界面](debugger-on-studio.md)
+ [SageMaker 调试器交互式报告](debugger-profiling-report.md)
+ [使用 Debugger Python 客户端库分析数据](debugger-analyze-data.md)

# 使用使用 Amazon Deb SageMaker ugger Python 模块进行基本分析的估算器配置
<a name="debugger-configuration-for-profiling"></a>

默认情况下，D SageMaker ebugger 基本分析处于开启状态，用于监控使用 [Amaz SageMaker on Python SDK](https://sagemaker.readthedocs.io/en/stable) 提交的所有 SageMaker 训练作业的资源利用率指标，例如 CPU 利用率、GPU 利用率、GPU 内存利用率、网络和 I/O 等待时间。 SageMaker 调试器每 500 毫秒收集一次这些资源利用率指标。您无需对代码、训练脚本或作业启动器进行任何其他更改即可跟踪基本资源利用率。如果要更改基本分析的指标收集间隔，则可以在使用 Pyth SageMaker on SDK、、 适用于 Python (Boto3) 的 AWS SDK或 ( AWS Command Line Interface CLI) 创建 SageMaker 训练作业启动器时指定特定于调试器的参数。在本指南中，我们将重点介绍如何使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)更改分析选项。本页提供了配置该估算器对象的参考模板。

如果您想在 SageMaker Studio 中访问训练作业的资源利用率指标控制面板，可以跳至[亚马逊 SageMaker Studio 经典实验中的亚马逊 SageMaker 调试器用户界面](debugger-on-studio.md)。

如果您希望自动激活检测系统资源利用率问题的规则，可以在用于激活规则的估算器对象中添加 `rules` 参数。

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

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

## 用于在 SageMaker AI Python SDK 中使用 Deb SageMaker ugger 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` – 配置 Debugger 以从训练作业中收集系统指标和框架指标，并保存到安全的 S3 存储桶 URI 或本地计算机中。您可以设置收集系统指标的频率松紧程度。了解如何配置 `profiler_config` 参数，请参阅 [配置设置以对系统资源利用率进行基本分析](debugger-configure-system-monitoring.md) 和 [用于框架剖析的估算器配置](debugger-configure-framework-profiling.md)。
+ `rules`— 配置此参数以激活要并行运行的 SageMaker 调试器内置规则。确保您的训练作业可以访问此 S3 存储桶。这些规则在处理容器上运行，并自动分析您的训练作业来发现计算和操作性能问题。[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report) 规则是集成度最高的规则，它运行所有内置的分析规则，并将分析结果作为报告保存到安全的 S3 存储桶中。要了解如何配置 `rules` 参数，请参阅[使用由 Amazon SageMaker Debugger 管理的内置分析器规则](use-debugger-built-in-profiler-rules.md)。

**注意**  
Debugger 将输出数据安全地保存在默认 S3 存储桶的子文件夹中。例如，默认 S3 存储桶 URI 的格式为 `s3://sagemaker-<region>-<12digit_account_id>/<base-job-name>/<debugger-subfolders>/`。Debugger 创建三个子文件夹：`debug-output`、`profiler-output` 和 `rule-output`。您也可以 URIs 使用 A [SageMaker I 估算器](debugger-estimator-classmethods.md)类方法检索默认 S3 存储桶。

请参阅以下主题，查看如何配置 Debugger 特定参数的详细说明。

**Topics**
+ [用于在 SageMaker AI Python SDK 中使用 Deb SageMaker ugger Python 模块配置 SageMaker AI 估算器对象的代码模板](#debugger-configuration-structure-profiler)
+ [配置设置以对系统资源利用率进行基本分析](debugger-configure-system-monitoring.md)
+ [用于框架剖析的估算器配置](debugger-configure-framework-profiling.md)
+ [在训练作业运行时更新 Debugger 系统监控和框架分析配置](debugger-update-monitoring-profiling.md)
+ [关闭 Debugger](debugger-turn-off-profiling.md)

# 配置设置以对系统资源利用率进行基本分析
<a name="debugger-configure-system-monitoring"></a>

要调整收集利用率指标的时间间隔，请使用 `ProfilerConfig` API 操作创建参数对象，同时根据自己的喜好构建 A SageMaker I 框架或通用估计器。

**注意**  
默认情况下，对于所有 SageMaker 训练作业，调试器每 500 毫秒从 Amazon EC2 实例收集资源利用率指标以进行系统监控，而不在 AI 估算器中指定任何调试器特定的参数。 SageMaker   
Debugger 将系统指标保存在默认 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`（整数）– 指定记录系统指标的监控间隔（以毫秒为单位）。可用值为 100、200、500、1000（1 秒）、5000（5 秒）和 60000（1 分钟）毫秒。默认值为 500 毫秒。

要查看系统监控的进度，请参阅[打开 Amazon SageMaker 调试器见解控制面板](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 和 2.0 开始弃用框架分析功能。 PyTorch 您仍然可以在先前版本的框架中使用该功能， SDKs 如下所示。  
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)。

要启用 Debugger 框架分析，请在构造估算器时配置 `framework_profile_params`。Debugger 框架使用 cProfile 或 Pyinstrument 选项，分析收集框架指标，例如初始化阶段的数据、数据加载器进程、深度学习框架和训练脚本的 Python 运算符、步骤内部和步骤之间的详细分析。使用 `FrameworkProfile` 类，您可以配置自定义框架分析选项。

**注意**  
在开始使用 Debugger 框架分析之前，请验证 Debugger 是否支持对构建模型所用的框架进行框架分析。有关更多信息，请参阅 [支持的框架和算法](debugger-supported-frameworks.md)。  
Debugger 将框架指标保存在默认 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>

Debugger 框架默认剖析包括以下选项：详细剖析、数据加载器剖析和 Python 剖析。以下示例代码是最简单的 `profiler_config` 参数设置，用于启动默认系统监控和默认框架分析。以下示例代码中的 `FrameworkProfile` 类在训练作业启动时启动默认框架分析。

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

使用 `profiler_config` 参数配置，Debugger 调用监控和分析的默认设置。Debugger 每 500 毫秒监视系统指标；使用详细分析选项分析第 5 个步骤；使用数据加载器分析选项分析第 7 个步骤；使用 Python 分析选项分析第 9、第 10 和第 11 个步骤。

要查找可用的分析配置选项、默认参数设置以及如何配置它们的示例，请参阅 [Amaz SageMaker on Python SDK FrameworkProfile](https://sagemaker.readthedocs.io/en/stable) 中的[提供不同剖析选项的默认系统监控和自定义框架剖析](debugger-configure-framework-profiling-options.md)和[SageMaker 调试器 APIs ](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile)。

如果您要更改系统监控时间间隔并启用默认框架分析，则可以使用 `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`类的更多信息，请参阅 [Amaz SageMaker on Python 软件开发工具包 FrameworkProfile](https://sagemaker.readthedocs.io/en/stable)中的[SageMaker 调试器 APIs ](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile)。

# 针对目标步骤或目标时间范围的默认系统监控和自定义框架剖析
<a name="debugger-configure-framework-profiling-range"></a>

如果要指定目标步骤或目标时间间隔来分析训练作业，您需要为 `FrameworkProfile` 类指定参数。以下代码示例展示了如何指定目标范围用于分析以及系统监控。
+ **对于目标步骤范围**

  使用以下示例配置，Debugger 每 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)
  )
  ```

  框架分析在目标步骤或时间范围上对所有分析选项执行。

  要了解有关可用分析选项的更多信息，请参阅 [Amaz SageMaker on Python 软件开发工具包 FrameworkProfile](https://sagemaker.readthedocs.io/en/stable)中的[SageMaker 调试器 APIs ](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.FrameworkProfile)。

  下一个部分将演示如何编写可用分析选项的脚本。

# 提供不同剖析选项的默认系统监控和自定义框架剖析
<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 收集框架的每个数据加载器事件。
**注意**  
数据加载器分析在从数据加载器收集信息时，可能会降低训练性能。我们建议不要为多个步骤启用数据加载器分析。  
Debugger 已预配置为仅对 AWS Deep Learning Containers 数据加载器进程进行标注。Debugger 无法从任何其他自定义或外部训练容器中分析数据加载器进程。
+ [PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig)— 指定目标步骤或时间范围来分析 Python 函数。您也可以在 cProfile 和 Pyinstrument 这两个 Python 探查器之间进行选择。
  + *cProfile* – 标准 Python 探查器。cProfile 会为训练期间调用的每个 Python 运算符收集信息。借助 cProfile，Debugger 可以节省每个函数调用的累积时间和注释，提供 Python 函数的完整详细信息。例如，在深度学习中，最常被调用的函数可能是卷积筛选条件和向后传递运算符，cProfile 会对其中各项进行分析。对于 cProfile 选项，您可以进一步选择计时器选项：总时间、CPU 时间和 CPU 外时间。虽然您可以在 CPU 时间内分析处理器（包括 CPU 和 GPU）上执行的每个函数调用，但也可以使用 “非CPU 时间” 选项来识别 I/O 或网络瓶颈。默认值为总时间，Debugger 会分析 CPU 和 CPU 外时间。借助 cProfile，您可以在对分析数据进行分析时，向下钻取到每个函数。
  + *Pyinstrument* – Pyinstrument 是一个基于采样进行处理的低开销 Python 探查器。使用 Pyinstrument 选项，Debugger 对性能分析事件进行每毫秒采样。由于 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
        )
    )
)
```

有关可用分析选项的更多信息，请参阅 [Amaz SageMaker on Python 软件开发工具包[PythonProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.PythonProfilingConfig)](https://sagemaker.readthedocs.io/en/stable)中的[DetailedProfilingConfig[DataloaderProfilingConfig](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DataloaderProfilingConfig)](https://sagemaker.readthedocs.io/en/stable/api/training/debugger.html#sagemaker.debugger.DetailedProfilingConfig)、和。

# 在训练作业运行时更新 Debugger 系统监控和框架分析配置
<a name="debugger-update-monitoring-profiling"></a>

如果要激活或更新当前正在运行的训练作业的调试器监控配置，请使用以下 SageMaker AI 估算器扩展方法：
+ 要为正在运行的训练作业启用 Debugger 系统监控并接收 Debugger 性能分析报告，请使用以下命令：

  ```
  estimator.enable_default_profiling()
  ```

  使用 `enable_default_profiling` 方法时，Debugger 会启动默认系统监控和 `ProfileReport` 内置规则，这会在训练作业结束时生成综合分析报告。只有在当前训练作业在运行时没有使用 Debugger 监控和性能分析的情况下，才能调用此方法。

  [有关更多信息，请参阅亚马逊 Python 软件开发工具包中的 [estimator.enable\$1default\$1pro](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.enable_default_profiling) filing。 SageMaker ](https://sagemaker.readthedocs.io/en/stable)
+ 要更新系统监控配置，请使用以下命令：

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

  [有关更多信息，请参阅 Amazon Python 软件开发工具包中的 e [stimator.update\$1profiler](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler)。 SageMaker ](https://sagemaker.readthedocs.io/en/stable)

# 关闭 Debugger
<a name="debugger-turn-off-profiling"></a>

如果您要完全关闭 Debugger，请执行下面的任一操作：
+ 在开始训练作业前，请执行以下操作：

  要关闭分析功能，请在您的估算器中包括 `disable_profiler` 参数并将其设置为 `True`。
**警告**  
如果您将其禁用，则将无法查看综合 Studio Debugger Insights 控制面板和自动生成的分析报告。

  要停止调试，请将 `debugger_hook_config` 参数设置为 `False`。
**警告**  
如果您将其禁用，则无法收集输出张量，也无法调试模型参数。

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

  [有关调试器特定参数的更多信息，请参阅 [SageMaker Amazon Python SDK 中的 AI Estimat](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator) or。 SageMaker ](https://sagemaker.readthedocs.io/en/stable)
+ 在训练作业正在运行时，执行以下操作：

  要在训练作业运行期间禁用监控和分析功能，请使用以下估算器类方法：

  ```
  estimator.disable_profiling()
  ```

  要仅禁用框架分析并保留系统监控，请使用 `update_profiler` 方法：

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

  [https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator.update_profiler](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 内置探查器规则列表](debugger-built-in-profiler-rules.md)。以下主题介绍了如何使用 Debugger 内置规则的默认参数设置和自定义参数值。

**注意**  
内置规则通过 Amazon SageMaker 处理容器提供，完全由 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 内置探查器规则列表](debugger-built-in-profiler-rules.md)。

要使用性能分析规则并检查训练作业的计算性能和进度，请添加 SageMaker Debugg [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)er 规则。此规则激活 D [ebugger ProfilerRule](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-profiler-rules.html#debugger-built-in-profiler-rules-ProfilerRule) `ProfilerRule` 系列下的所有内置规则。此外，此规则还会生成汇总分析报告。有关更多信息，请参阅[使用 SageMaker 调试器生成的分析报告](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 Ev CloudWatch ents 和，通知培训问题和停止训练作业。 AWS Lambda有关更多信息，请参阅 [Amazon 上的操作 SageMaker 调试器规则](debugger-action-on-rules.md)。

## 使用带有自定义参数值的 Debugger 内置规则
<a name="debugger-built-in-profiler-rules-configuration-param-change"></a>

如果您要调整内置的规则参数值并自定义张量集合正则表达式，请配置 `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 内置探查器规则列表](debugger-built-in-profiler-rules.md) 中列出的内置规则的默认键值。

有关调试器规则类、方法和参数的更多信息，请参阅 [SageMaker Amaz [on Pyth SageMaker on](https://sagemaker.readthedocs.io/en/stable) SDK 中的 AI 调试器规则类](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 内置探查器规则列表](debugger-built-in-profiler-rules.md) 中提供。

有关使用 `CreateTrainingJob` API 的 Debugger 内置规则的低级别 JSON 配置，请参阅[使用 SageMaker API 配置调试器](debugger-createtrainingjob-api.md)。

# Debugger 内置探查器规则列表
<a name="debugger-built-in-profiler-rules"></a>

使用 Amazon Debugger 提供的 SageMaker 调试器内置分析器规则，分析在训练模型时收集的指标。Debugger 内置规则监控对成功运行高性能的训练作业至关重要的各种常见条件。您可以使用 [Amaz SageMaker on Python 软件开发工具包](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 内置规则。

用于生成分析报告的 Debugger 内置规则


| 有效性范围 | 内置规则 | 
| --- | --- | 
| 任何 SageMaker 训练作业的分析报告 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

Debugger 内置规则，用于分析硬件系统资源利用率（系统指标）


| 有效性范围 | 内置规则 | 
| --- | --- | 
| 适用于任何 SageMaker 训练作业的通用系统监控规则 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

用于分析框架指标的 Debugger 内置规则


| 有效性范围 | 内置规则 | 
| --- | --- | 
| 深度学习框架的分析规则（TensorFlow 和 PyTorch） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/debugger-built-in-profiler-rules.html)  | 

**警告**  
为了支持 [Amazon SageMaker Profiler](train-use-sagemaker-profiler.md)， SageMaker AI Debugger 从 TensorFlow 2.11 和 2.0 开始弃用框架分析功能。 PyTorch 您仍然可以在先前版本的框架中使用该功能， SDKs 如下所示。  
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 内置规则的完整说明和示例，请参阅 [Debugger 内置规则示例代码](debugger-built-in-rules-example.md#debugger-deploy-built-in-rules)。
+ 有关在低级 SageMaker API 操作中使用内置规则的完整说明，请参阅[使用 SageMaker API 配置调试器](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`参数和 IOBottleneck 规则的`threshold`参数。

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

要浏览概要分析器报告中的内容，请参阅[SageMaker 调试器分析](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)报告。此外，由于此规则会激活所有分析规则，因此您还可以使用 [ SageMaker Studio Experiments 中的SageMaker 调试器用户界面](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html)来检查规则分析状态。

 OverallSystemUsage 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| <BuiltInRuleName>\$1<parameter\$1name> |  可自定义的参数，用于调整其他内置监控和分析规则的阈值。 **可选** 默认值：`None`  | 

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

该 BatchSize 规则有助于检测 GPU 是否由于批量较小而未得到充分利用。为检测此问题，此规则监控平均 CPU 利用率、GPU 利用率和 GPU 内存利用率。如果 CPU、GPU 和 GPU 内存的利用率平均值偏低，则可能表明训练作业可运行在较小的实例类型上，或者可以使用更大的批次运行。此分析不适用于内存分配严重过量的框架。但是，增加批次大小可能会导致处理或数据加载瓶颈，因为每次迭代都需要更长的数据预处理时间。

 BatchSize 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| 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 瓶颈而未得到充分利用。如果 CPU 瓶颈数超过预定义的阈值，则规则返回 True。

 CPUBottleneck 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| threshold |  定义瓶颈时间与总训练时间比例的阈值。如果该比例超过为阈值参数指定的百分比，则规则会将规则状态切换为 True。 **可选** 有效值：整数 默认值：`50`（百分比）  | 
| gpu\$1threshold |  定义低 GPU 利用率的阈值。 **可选** 有效值：整数 默认值：`10`（百分比）  | 
| cpu\$1threshold | 定义高 CPU 利用率的阈值。 **可选** 有效值：整数 默认值：`90`（百分比）  | 
| patience | 定义在规则开始评估之前要跳过的数据点数。训练作业的前几个步骤通常会显示大量的数据处理，因此请慎重保留该规则，防止使用您对此参数指定的给定数量的分析数据过早调用该规则。 **可选** 有效值：整数 默认值：`100`  | 
| scan\$1interval\$1us | 扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

## GPUMemory增加
<a name="gpu-memory-increase"></a>

 GPUMemory增加规则有助于检测上内存使用量的大幅增加 GPUs。

 GPUMemory增加规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| increase |  定义绝对内存增加的阈值。 **可选** 有效值：整数 默认值：`10`（百分比）  | 
| patience |  定义在规则开始评估之前要跳过的数据点数。训练作业的前几个步骤通常会显示大量的数据处理，因此请慎重保留该规则，防止使用您对此参数指定的给定数量的分析数据过早调用该规则。 **可选** 有效值：整数 默认值：`100`  | 
| window |  用于计算分位数的时间长度。 **可选** 有效值：整数 默认值：`500`  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

此规则有助于检测 GPU 是否由于数据 IO 瓶颈而未充分利用。如果 IO 瓶颈数超过预定义的阈值，则规则返回 True。

 IOBottleneck 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| threshold | 定义规则返回 True 时的阈值。**可选**有效值：整数默认值：`50`（百分比） | 
| gpu\$1threshold |  定义 GPU 何时被认为未充分利用的阈值。 **可选** 有效值：整数 默认值：`70`（百分比）  | 
| io\$1threshold | 定义高 IO 等待时间的阈值。**可选**有效值：整数默认值：`50`（百分比） | 
| patience | 定义在规则开始评估之前要跳过的数据点数。训练作业的前几个步骤通常会显示大量的数据处理，因此请慎重保留该规则，防止使用您对此参数指定的给定数量的分析数据过早调用该规则。**可选**有效值：整数默认值：`1000` | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

该 LoadBalancing 规则有助于检测多个工作负载平衡中的问题 GPUs。

 LoadBalancing 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| threshold |  定义工作负载百分比。 **可选** 有效值：整数 默认值：`0.5`（无单位比例值）  | 
| patience |  定义在规则开始评估之前要跳过的数据点数。训练作业的前几个步骤通常会显示大量的数据处理，因此请慎重保留该规则，防止使用您对此参数指定的给定数量的分析数据过早调用该规则。 **可选** 有效值：整数 默认值：`10`  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

“低” GPUUtilization 规则有助于检测 GPU 利用率是低还是存在波动。这会检查每个工作线程上的每个 GPU。如果第 95 个分位数低于 threshold\$1p95，则规则返回 True，表明利用率不足。如果第 95 个分位数高于 threshold\$1p95 且第 5 个分位数低于 threshold\$1p5，则规则返回 True，表示此时的情况为波动。

低限GPUUtilization 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| threshold\$1p95 |  第 95 个分位数的阈值，低于此阈值即将 GPU 视为未充分利用。 **可选** 有效值：整数 默认值：`70`（百分比）  | 
| threshold\$1p5 | 第 5 个分位数的阈值。默认值为 10%。**可选**有效值：整数默认值：`10`（百分比） | 
| patience |  定义在规则开始评估之前要跳过的数据点数。训练作业的前几个步骤通常会显示大量的数据处理，因此请慎重保留该规则，防止使用您对此参数指定的给定数量的分析数据过早调用该规则。 **可选** 有效值：整数 默认值：`1000`  | 
| window |  用于计算分位数的时间长度。 **可选** 有效值：整数 默认值：`500`  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

该 OverallSystemUsage 规则衡量每个工作节点的总体系统使用率。该规则目前仅聚合每个节点的值并计算其百分位数。

 OverallSystemUsage 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

该 MaxInitializationTime 规则有助于检测训练初始化是否花费了太多时间。规则会等待直至第一个步骤可用。

 MaxInitializationTime 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| threshold |  定义等待第一个步骤可用的阈值（以分钟为单位）。 **可选** 有效值：整数 默认值：`20`（分钟）  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

该 OverallFrameworkMetrics 规则汇总了在框架指标上花费的时间，例如向前和向后传递以及数据加载。

 OverallFrameworkMetrics 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

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

该 StepOutlier 规则有助于检测步进持续时间内的异常值。如果在某个时间范围内，步骤持续时间的异常值大于整个步骤持续时间的 `stddev` sigma，则此规则返回 `True`。

 StepOutlier 规则的参数描述


| 参数名称 | 说明 | 
| --- | --- | 
| base\$1trial | 基本试验训练作业名称。Amazon D SageMaker ebugger 会自动将此参数设置为当前的训练作业。 **必填** 有效值：字符串  | 
| stddev |  定义与标准差相乘的因子。例如，当步骤持续时间大于或小于标准差的 5 倍时，默认情况下会调用该规则。 **可选** 有效值：整数 默认值：`5`（分钟）  | 
| mode | 应保存步骤并在其上运行规则的模式。根据默认设置，规则将在从 EVAL 到 TRAIN 阶段的步骤上运行。**可选**有效值：整数默认值：`5`（分钟） | 
| n\$1outliers | 可以忽略的异常值数量，超过该数量后规则返回 True**可选**有效值：整数默认值：`10` | 
| scan\$1interval\$1us |  扫描时间轴文件的时间间隔。 **可选** 有效值：整数 默认值：`60000000`（微秒）  | 

# 亚马逊 SageMaker Studio 经典实验中的亚马逊 SageMaker 调试器用户界面
<a name="debugger-on-studio"></a>

在亚马逊弹性计算云 (Amazon EC2) 实例上运行训练作业时，使用 Amazon SageMaker Studio 经典实验中的 Amazon D SageMaker ebugger Insights 控制面板来分析您的模型性能和系统瓶颈。借助 Debugger 控制面板，深入了解您的训练作业，提高模型训练性能和准确性。默认情况下，对于训练作业，Debugger 每 500 毫秒监控一次系统指标（CPU、GPU、GPU 内存、网络和数据 I/O），每 500 次迭代监控一次基本输出张量（损失和准确性）。您还可以通过 Studio Classic 用户界面或使用 [Amaz SageMaker on Python SDK](https://sagemaker.readthedocs.io/en/stable) 进一步自定义调试器配置参数值并调整保存间隔。

**重要**  
如果您使用的是现有 Studio Classic 应用程序，请删除该应用程序并重新启动以使用最新的 Studio Classic 功能。有关如何重启和更新 Studio Classic 环境的说明，请参阅[更新 Amazon A SageMaker I Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-update.html)。

**Topics**
+ [打开 Amazon SageMaker 调试器见解控制面板](debugger-on-studio-insights.md)
+ [Amazon SageMaker 调试器见解控制面板控制器](debugger-on-studio-insights-controllers.md)
+ [探索 Amazon SageMaker 调试器见解控制面板](debugger-on-studio-insights-walkthrough.md)
+ [关闭 Amazon SageMaker 调试器洞察实例](debugger-on-studio-insights-close.md)

# 打开 Amazon SageMaker 调试器见解控制面板
<a name="debugger-on-studio-insights"></a>

在 Studio Classic 的 D SageMaker ebugger Insights 控制面板中，您可以实时和在训练结束后查看在 Amazon EC2 实例上运行的训练作业的计算资源利用率、资源利用率和系统瓶颈信息

**注意**  
 SageMaker Debugger Insights 仪表板在`ml.m5.4xlarge`实例上运行 Studio Classic 应用程序来处理和呈现可视化效果。每个 “ SageMaker 调试器见解” 选项卡都运行一个 Studio Classic 在单个实例上运行多个 SageMaker Debugger Insights 选项卡的多个内核会话。关闭 “ SageMaker 调试器见解” 选项卡时，相应的内核会话也会关闭。Studio Classic 应用程序仍然保持活动状态，并会因为使用 `ml.m5.4xlarge` 实例而产生费用。有关定价的信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)页面。

**重要**  
使用 SageMaker Debugger Insights 仪表板后，必须关闭`ml.m5.4xlarge`实例以免产生费用。有关如何关闭实例的说明，请参阅[关闭 Amazon SageMaker 调试器洞察实例](debugger-on-studio-insights-close.md)。

**打开 “调 SageMaker 试器见解” 控制面板**

1. 在 Studio Classic **主页**上，选择左侧导航窗格中的 **Experiments**。

1. 在 **Experiments** 页面中搜索您的训练作业。如果您的训练作业设置为通过 Experiments 运行，则该作业应显示在 **Experiments** 选项卡中；如果您未设置 Experiments 运行，则作业应显示在**未分配的运行**选项卡中。

1. 选择（单击）训练作业名称的链接以查看作业详细信息。

1. 在**概览**菜单下，选择 **Debugger**。这应该显示以下两个部分。
   + 在 **Debugger 规则**部分中，您可以浏览与训练作业关联的 Debugger 内置规则的状态。
   + 在 “**调试器见解**” 部分，您可以在控制面板上找到打开 “ SageMaker 调试器见解” 的链接。

1. 在 “**SageMaker 调试器见解**” 部分，选择训练作业名称的链接以打开 “ SageMaker 调试器见解” 仪表板。这将打开 “**调试 [your-training-job-name]**” 窗口。在此窗口中，Debugger 提供了您的训练作业在 Amazon EC2 实例上的计算性能概览，并协助您识别计算资源利用率方面的问题。

您还可以通过添加 D SageMaker ebugger 的内置[ProfilerReport](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html#profiler-report)规则来下载聚合的分析报告。有关更多信息，请参阅[配置内置 Profiler 规则](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)和[使用 SageMaker 调试器生成的分析报告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。

# Amazon SageMaker 调试器见解控制面板控制器
<a name="debugger-on-studio-insights-controllers"></a>

Debugger 控制器有不同的组件用于进行监控和分析。在本指南中，您将了解 Debugger 控制器组件。

**注意**  
 SageMaker Debugger Insights 仪表板在`ml.m5.4xlarge`实例上运行 Studio Classic 应用程序来处理和呈现可视化效果。每个 “ SageMaker 调试器见解” 选项卡都运行一个 Studio Classic 在单个实例上运行多个 SageMaker Debugger Insights 选项卡的多个内核会话。关闭 “ SageMaker 调试器见解” 选项卡时，相应的内核会话也会关闭。Studio 应用程序仍然保持活动状态，并会因为使用 `ml.m5.4xlarge` 实例而产生费用。有关定价的信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)页面。

**重要**  
使用 SageMaker Debugger Insights 仪表板后，请关闭`ml.m5.4xlarge`实例以免产生费用。有关如何关闭实例的说明，请参阅[关闭 Amazon SageMaker 调试器洞察实例](debugger-on-studio-insights-close.md)。

## SageMaker 调试器见解控制器用户界面
<a name="debugger-on-studio-insights-controller"></a>

使用位于 Insights 控制面板左上角的 Debugger 控制器，您可以刷新控制面板、配置或更新用于监控系统指标的 Debugger 设置、停止训练作业以及下载 Debugger 分析报告。

![\[SageMaker 调试器见解仪表板控制器\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-studio-insights-refresh.png)

+ 如果您想手动刷新控制面板，请选择刷新按钮（左上角的圆形箭头），如前面的屏幕截图所示。
+ 对于使用 SageMaker Python SDK 启动的任何 SageMaker 训练作业，“**监控**” 切换按钮默认处于启用状态。如果未激活，您可以使用切换按钮启动监控。在监控期间，Debugger 只收集资源利用率指标来检测计算问题，例如 CPU 瓶颈和 GPU 利用率不足。有关 Debugger 监控的资源利用率问题的完整列表，请参阅 [Debugger 用于分析硬件系统资源利用率（系统指标）的内置规则](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)。
+ **配置监控**按钮可打开一个弹出窗口，您可以使用该窗口设置或更新数据收集频率以及保存数据的 S3 路径。  
![\[用于配置 Debugger 监控设置的弹出窗口\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-studio-enable-profiling-2.png)

  您可以为以下字段指定值。
  + **S3 存储桶 URI**：指定基本 S3 存储桶 URI。
  + **收集监控数据每**：选择收集系统指标的时间间隔。您可以使用下拉列表选择一个监控间隔。可用间隔包括 100 毫秒、200 毫秒、500 毫秒（默认值）、1 秒、5 秒和 1 分钟。
**注意**  
如果您选择一个较短的时间间隔，则可以提高资源利用率指标的粒度，这样您就可以在较高的时间分辨率下捕获峰值和异常值。但是，分辨率越高，要处理的系统指标的数量就越大。这可能会带来额外的开销，并影响整体训练和处理时间。
+ 使用**停止训练**按钮，您可以在发现资源利用率异常时停止训练作业。
+ 使用 “**下载报告**” 按钮，您可以使用 D SageMaker ebugger 的内置[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)规则添加到估算器时，该按钮即被激活。有关更多信息，请参阅[配置内置 Profiler 规则](https://docs.aws.amazon.com/sagemaker/latest/dg/use-debugger-built-in-profiler-rules.html)和[使用 SageMaker 调试器生成的分析报告](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-profiling-report.html)。

# 探索 Amazon SageMaker 调试器见解控制面板
<a name="debugger-on-studio-insights-walkthrough"></a>

当您启动 SageMaker 训练任务时，默认情况下， SageMaker 调试器会开始监控 Amazon EC2 实例的资源利用率。您可以通过 Insights 控制面板跟踪系统利用率、统计数据概览和内置规则分析。本指南将引导您完成以下选项卡下的 SageMaker Debugger Insights 控制面板的内容：**系统指标**和**规则**。

**注意**  
 SageMaker Debugger Insights 仪表板在`ml.m5.4xlarge`实例上运行 Studio Classic 应用程序来处理和呈现可视化效果。每个 “ SageMaker 调试器见解” 选项卡都运行一个 Studio Classic 在单个实例上运行多个 SageMaker Debugger Insights 选项卡的多个内核会话。关闭 “ SageMaker 调试器见解” 选项卡时，相应的内核会话也会关闭。Studio Classic 应用程序仍然保持活动状态，并会因为使用 `ml.m5.4xlarge` 实例而产生费用。有关定价的信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)页面。

**重要**  
使用 SageMaker Debugger Insights 仪表板后，请关闭`ml.m5.4xlarge`实例以免产生费用。有关如何关闭实例的说明，请参阅[关闭 Amazon SageMaker 调试器洞察实例](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_cn/sagemaker/latest/dg/images/debugger/debugger-studio-insights-resource-util-summary.png)


### 资源利用率时间序列图
<a name="debugger-on-studio-insights-sys-controller"></a>

在时间序列图中可以查看资源利用率的更多详细信息，并确定每个实例在什么时间窗口中出现了任何不希望出现的利用率数据，例如 GPU 利用率低和 CPU 瓶颈可能导致浪费实例成本。

**时间序列图控制器 UI**

以下屏幕截图显示了用于调整时间序列图的 UI 控制器。

![\[\]](http://docs.aws.amazon.com/zh_cn/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_cn/sagemaker/latest/dg/images/debugger/debugger-insights-node-cpu.png)


**GPU 利用率和 GPU 内存利用率**

下图显示一段时间的 GPU 利用率和 GPU 内存利用率。默认情况下，这些图表显示一段时间内的平均利用率。您可以选择 GPU 核心标签来查看各个核心的利用率。利用 GPU 核心总数上的利用率平均值来表示整个硬件系统资源的平均利用率。通过查看平均利用率，您可以查看 Amazon EC2 实例的整体系统资源使用情况。下图显示具有 8 个 GPU 核心的 `ml.p3.16xlarge` 实例上的示例训练作业。您可以监控训练作业是否分布良好，充分利用所有内容 GPUs。

![\[debugger-studio-insight-mockup\]](http://docs.aws.amazon.com/zh_cn/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_cn/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 调试器见解” 仪表板中的 “规则” 选项卡\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-insights-rules.png)


# 关闭 Amazon SageMaker 调试器洞察实例
<a name="debugger-on-studio-insights-close"></a>

当您不使用 SageMaker Debugger Insights 控制面板时，应关闭应用程序实例，以免产生额外费用。

**关闭 Studio Classic 中的 SageMaker 调试器见解应用程序实例**

![\[显示如何关闭 D SageMaker ebugger Insights 仪表板实例的动画屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/sagemaker/latest/dg/images/icons/Shutdown_light.png))。 SageMaker 调试器见解仪表板在`ml.m5.4xlarge`实例上运行。当您关闭 **sagemaker-debugger-1.0** 应用程序时，此实例也会从**正在运行的实例**中消失。

# SageMaker 调试器交互式报告
<a name="debugger-profiling-report"></a>

接收 Debugger 自动生成的分析报告。通过 Debugger 报告，您可以深入了解训练作业，并获得有关改善模型性能的建议。以下屏幕截图显示了 Debugger 分析报告拼贴图。要了解更多信息，请参阅[SageMaker 调试器交互式报告](#debugger-profiling-report)。

**注意**  
您可以在训练作业运行期间或作业完成后下载 Debugger 报告。在训练期间，Debugger 同时更新报告，反映当前规则的评估状态。只有在训练作业完成后，您才能下载完整的 Debugger 报告。

**重要**  
报告中提供的图表和建议仅供参考，并不确保准确无误。您应负责对其中的信息进行单独评测。

![\[Debugger 训练作业摘要报告示例\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-profile-report.jpg)


对于任何 SageMaker 训练作业， SageMaker 调试器[ProfilerReport](debugger-built-in-profiler-rules.md#profiler-report)规则都会调用所有[监控和分析规则，并将规则分析](debugger-built-in-profiler-rules.md#built-in-rules-monitoring)汇总到一份综合报告中。按照本指南，使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)或 S3 控制台下载报告，并从分析结果中了解您可以解释的内容。

**重要**  
报告中提供的图表和建议仅供参考，并不确保准确无误。您应负责对其中的信息进行单独评测。

# 下载调 SageMaker 试器分析报告
<a name="debugger-profiling-report-download"></a>

使用 [Amaz SageMaker on Python SDK](https://sagemaker.readthedocs.io/en/stable) 和 AWS Command Line Interface (CLI) 在训练作业运行时或任务完成后下载 SageMaker 调试器分析报告。

**注意**  
要获取 SageMaker Debugger 生成的分析报告，必须使用 Deb SageMaker ugger 提供的内置[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-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_cn/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** 以查看自动生成的调试器分析报告。  
![\[规则输出示例\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-rule-output-open-html.png)

1. 打开 `profiler-report.ipynb` 文件以浏览报告的生成方式。您还可以使用 Jupyter 笔记本文件自定义和扩展分析报告。

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

1. 登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 搜索基本 S3 存储桶。例如，如果您尚未指定任何基本作业名称，则基本 S3 存储桶名称应采用以下格式：`sagemaker-<region>-111122223333`。通过*按名称查找存储桶*字段，查找基本 S3 存储桶。  
![\[规则输出 S3 存储桶 URI 示例\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-0.png)

1. 在基本 S3 存储桶中，通过在*按前缀查找对象*输入字段中指定您的作业名称前缀，来查找训练作业名称。选择训练作业名称。  
![\[规则输出 S3 存储桶 URI 示例\]](http://docs.aws.amazon.com/zh_cn/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_cn/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** 文件，然后依次选择**操作**和**下载**。  
![\[规则输出 S3 存储桶 URI 示例\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-report-download-s3console-3.png)

1. 在 Web 浏览器中打开已下载的 **profiler-report.html** 文件。

------

**注意**  
如果您在没有配置特定于 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_cn/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** – 启动第一个纪元的第一个步骤的确切时间。
+ **training\$1loop\$1end** – 完成最后一个纪元的最后一个步骤的确切时间。
+ **training\$1loop\$1duration\$1in\$1seconds** – 训练循环开始时间与训练循环结束时间所隔的总时间。
+ **initialization\$1in\$1seconds** – 初始化训练作业所用的时间。初始化阶段涵盖从 **start\$1time** 到 **training\$1loop\$1start** 时间之间的时段。初始化时间用于编译训练脚本、启动训练脚本、创建和初始化模型、启动 EC2 实例和下载训练数据。
+ **finalization\$1in\$1seconds** – 完成训练作业所花费的时间，例如完成模型训练、更新模型构件和关闭 EC2 实例。完成阶段涵盖从 **training\$1loop\$1end** 时间到 **end\$1time** 之间的时段。
+ **initialization (%)** – 用在 **initialization** 上的时间占总 **job\$1duration\$1in\$1seconds** 的百分比。
+ **training loop (%)** – 用在 **training loop** 上的时间占总 **job\$1duration\$1in\$1seconds** 的百分比。
+ **finalization (%)** – 用在 **finalization** 上的时间占总 **job\$1duration\$1in\$1seconds** 的百分比。

## 系统使用情况统计数据
<a name="debugger-profiling-report-walkthrough-system-usage"></a>

在此部分中，您可以查看系统利用率统计数据概览。

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


Debugger 分析报告包含以下信息：
+ **节点** – 列出节点的名称。如果在多个节点（多个 EC2 实例）上使用分布式训练，则节点名称的格式为 `algo-n`。
+ **指标** – Debugger 收集的系统指标：CPU、GPU、CPU 内存、GPU 内存、I/O 和网络指标。
+ **单位** – 指标的单位。
+ **最大值** – 每个系统指标的最大值。
+ **p99** – 每个系统使用情况的第 99 个百分位数。
+ **p95** – 每个系统使用情况的第 95 个百分位数。
+ **p50** – 每个系统使用情况的第 50 个百分位数（中位数）。
+ **最小值** – 每个系统指标的最小值。

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

在本节中，以下饼图显示了 CPUs 和的框架操作细分 GPUs。

![\[Debugger 分析报告示例\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/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_cn/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 和最小值，并计算步骤异常值。以下直方图显示了在不同工作节点上捕获的步骤持续时间和。 GPUs您可以通过在右侧选择图例来启用或禁用各个 Worker 的直方图。您可以检查是否有特定 GPU 导致步骤持续时间异常。

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


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

本节显示基于低GPUUtilization 规则的 GPU 内核利用率的详细统计信息。它还汇总了 GPU 利用率统计数据，即平均值、p95 和 p5，以确定训练作业的利用率是否不足。 GPUs

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

此部分显示了 CPU 总利用率、单个 GPU 利用率和 GPU 内存占用量的详细统计数据。该 BatchSize 规则决定了您是否需要更改批量大小以更好地利用 GPUs。您可以检查批次大小是否太小而导致利用率不足，还是过大而导致利用率过高和内存不足问题。在图中，方框显示相对于中位数 (p50) 的 p25 和 p75 百分位数范围（分别填充深紫色和亮黄色），误差条形显示第 5 个百分位数作为下限，第 95 个百分位数作为上限。

![\[Debugger 分析报告示例\]](http://docs.aws.amazon.com/zh_cn/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_cn/sagemaker/latest/dg/images/debugger/debugger-profiling-report-cpu-bottlenecks.png)


饼图显示以下信息：
+ **CPU 瓶颈导致的低 GPU 使用率** – 显示 GPU 利用率高于和低于阈值的数据点与符合 CPU 瓶颈标准的数据点之间的比率。
+ 阶段@@ **与其他 TRAIN/EVAL 阶段之间的比**率 — 显示在不同训练阶段所花费的时间之间的比率。
+ **向前和向后传递之间的比率** – 显示训练循环中前向和向后传递所花费时间之间的比率。
+ ** CPU/GPU 运算符之间的比率**-显示在 Python 运算符（例如数据加载器进程以及向前 GPUs 和 CPUs 向后传递运算符）上花费的时间间隔之间的比率。
+ **框架中记录的一般指标** – 显示主要框架指标以及在指标上所花费时间的比率。

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

在本节中，您可以找到 I/O 瓶颈的摘要。该规则评估 I/O 等待时间和 GPU 利用率，并监控在等待数据从存储到达的I/O requests exceeds a threshold percent of the total training time. It might indicate I/O瓶颈上花费的时间。 GPUs 

## 多 GPU 训练中的负载均衡
<a name="debugger-profiling-report-walkthrough-workload-balancing"></a>

在本节中，您可以确定工作负载平衡问题 GPUs。

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


## GPU 内存分析
<a name="debugger-profiling-report-walkthrough-gpu-memory"></a>

在本节中，您可以分析 GPUMemory增加规则收集的 GPU 内存利用率。在图中，方框显示相对于中位数 (p50) 的 p25 和 p75 百分位数范围（分别填充深紫色和亮黄色），误差条形显示第 5 个百分位数作为下限，第 95 个百分位数作为上限。

![\[Debugger 分析报告示例\]](http://docs.aws.amazon.com/zh_cn/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-profiling-report.md)`ProfilerReport` 规则提供了一个 Jupyter 笔记本文件 (`profiler-report.ipynb`)，生成相应的 HTML 文件 (`profiler-report.html`)。

Debugger 在 Jupyter 笔记本中添加代码，以此来收集分析报告使用情况统计数据，该代码会在用户打开最终 `profiler-report.html` 文件时收集唯一 `ProfilerReport` 规则的处理作业 ARN。

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` 文件。

**注意**  
未将**选项 1** 添加到训练作业请求中时，自动生成的 HTML 报告仍会报告使用情况统计数据，即使您后来使用**选项 2** 选择退出。

1. 按照[下载调 SageMaker 试器分析报告](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. 运行代码单元以完成选择退出。

# 使用 Debugger Python 客户端库分析数据
<a name="debugger-analyze-data"></a>

在训练作业运行期间或训练任务完成后，您可以使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)和[SMDebug 客户端库](https://github.com/awslabs/sagemaker-debugger/)访问调试器收集的训练数据。Debugger Python 客户端库提供了分析和可视化工具，使您能够深入了解训练作业数据。

**安装库并使用其分析工具（在 JupyterLab笔记本或 IPython 内核中）**

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

以下主题将向您介绍如何使用 Debugger Python 工具可视化和分析 Debugger 收集的训练数据。

**分析系统和框架指标**
+ [访问分析数据](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 调试器框架分析](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configure-framework-profiling.html)。
如果您使用 Studio Classic，请使用 Debugger Insights 控制面板中的**分析**切换按钮。要了解更多信息，请参阅[SageMaker 调试器见解仪表板控制器](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 分析的训练模式和阶段**

为了在训练期间分析特定的时间间隔，以便对每个这些时间间隔的统计信息进行分区，Debugger 提供了用于设置模式和阶段的工具。

对于训练模式，请使用以下 `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` – 如果您要在训练任务完成并且 Debugger 钩子已关闭后，对完成阶段的目标步骤进行分析，请使用此项。此阶段包括在训练作业完成和结束时分析数据。此模式选项适用于 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 分析的分析工具**

Debugger 提供了两种分析工具用于支持 Python 分析：
+ cProfile – 标准 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`（字符串）– 指定开始步骤和结束步骤以提取 Python 分析统计数据。
  + `mode`（字符串）– 使用 `PythonProfileModes` 枚举器类。默认值为 `PythonProfileModes.TRAIN`。[Python 分析的训练模式和阶段](#debugger-access-data-python-profiling-modes)部分中提供了可用选项。
  + `start_phase`（字符串）– 使用 `StepPhase` 枚举器类指定目标步骤中的起始阶段。此参数允许在训练的不同阶段之间进行分析。默认值为 `StepPhase.STEP_START`。[Python 分析的训练模式和阶段](#debugger-access-data-python-profiling-phases)部分中提供了可用选项。
  + `end_phase`（字符串）– 使用 `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()`— 返回一个 DataFrame Python 分析统计信息。每个行保存所进行每个分析的元数据以及对应的统计数据文件（每个步骤一个文件）。
+ `python_analysis.list_available_node_ids()`— 返回 Python 分析统计信息的可用节点 IDs 列表。

`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` 类提供了工具，用于在单个时间轴中集成和关联不同的分析信息。Debugger 从训练作业的不同阶段捕获分析数据和注释之后，跟踪事件的 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_cn/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`（字符串）– 指定根文件夹 (`/profiler-output`)，其中包含系统和框架分析跟踪文件。您可以`profiler-output`使用 SageMaker AI 估算器类方法或对象来定位。 TrainingJob 例如，`estimator.latest_job_profiler_artifacts_path()` 或 `tj.profiler_s3_output_path`。
+ `file_suffix_filter`（列表）– 指定要合并时间轴的文件后缀筛选条件列表。可用的后缀筛选条件为 `["model_timeline.json", "pythontimeline.json", "trace.json.gz"].`，如果未手动指定此参数，则默认情况下将合并所有跟踪文件。
+ `output_directory`（字符串）– 指定保存合并的时间轴 JSON 文件的路径。默认值是为 `path` 参数指定的目录。

`merge_timeline()` 类方法传递以下参数用于执行合并进程：
+ `start`（整数）– 指定合并时间轴的开始时间（以微秒为单位，采用 Unix 时间格式）或开始步骤。
+ `end`（整数）– 指定合并时间轴的结束时间（以微秒为单位，采用 Unix 时间格式）或结束步骤。
+ `unit`（字符串）– 在 `"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 浏览器上，通过 `chrome://tracing` 打开 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 数据解析工具访问分析数据](debugger-access-data-profiling-pandas-frame.md)部分中的 Pandas 帧数据对象：

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

`pt_analysis` 对象可以使用以下函数：

该 SMDebug `S3SystemMetricsReader`类从为`s3_trial_path`参数指定的 S3 存储桶中读取系统指标。
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  分析会输出这些初始化的中位数持续时间和最大持续时间。如果存在异常值（即持续时间大于 2 \$1 中位数持续时间），函数会输出这些持续时间的开始和结束时间。这些指标可用于检查这段时间间隔内的系统指标。

  下面的列表显示了从此类方法可用的分析：
  + 初始化了哪种类型的数据加载器迭代器。
  + 每个迭代器的工作线程数量。
  + 检查是否使用 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()`

  绘制在开始时间戳和结束时间戳之间的时间轴图表。