

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

# 分析和优化计算性能
<a name="train-profile-computational-performance"></a>

在训练规模快速增长的最先进的深度学习模型时，将此类模型的训练作业扩展到大型 GPU 集群，并在梯度下降过程的每次迭代中从数十亿、数万亿次操作和通信中识别计算性能问题成为一项挑战。

SageMaker AI 提供分析工具来可视化和诊断在 AWS 云计算资源上运行训练作业所产生的此类复杂的计算问题。SageMaker AI 提供了两个分析选项：Amazon SageMaker 探查器和 Amazon SageMaker Studio Classic 中的资源利用率监视器。请参阅这两项功能的以下说明以快速获得洞察，并根据您的需求了解要使用哪项功能。

**Amazon SageMaker 探查器**

Amazon SageMaker 探查器是 SageMaker AI 的一项分析功能，可用于深入探究在训练深度学习模型时预调配的计算资源，并深入了解操作级别的细节。SageMaker 探查器提供了 Python 模块，用于在 Pytorch 或 TensorFlow 训练脚本中添加注释以及激活 SageMaker 探查器。您可以通过 SageMaker Python SDK 和 AWS 深度学习容器访问这些模块。

利用 SageMaker 探查器，您可以跟踪 CPU 和 GPU 上的所有活动，例如 CPU 和 GPU 使用率、GPU 上的内核运行、CPU 上的内核启动、同步操作、CPU 和 GPU 之间的内存操作、内核启动和相应运行之间的延迟，以及 CPU 和 GPU 之间的数据传输。

SageMaker 探查器还提供可视化*配置文件*的用户界面 (UI)、已分析事件的统计摘要以及用于跟踪和理解 GPU 和 CPU 之间事件的时间关系的训练作业时间表。

要了解有关 SageMaker 探查器的更多信息，请参阅[Amazon P SageMaker rofiler](train-use-sagemaker-profiler.md)。

**在 Amazon SageMaker Studio Classic 中监控 AWS 计算资源**

SageMaker AI 还在 Studio Classic 中提供了一个用户界面来从较高层面监控资源利用率，但与从 SageMaker AI 收集到 CloudWatch 的默认利用率指标相比，它的粒度更细。

对于您使用 SageMaker Python SDK 在 SageMaker AI 中运行的任何训练作业，SageMaker AI 将开始分析基本资源利用率指标，例如 CPU 利用率、GPU 利用率、GPU 内存利用率、网络和 I/O 等待时间。它每 500 毫秒收集一次这些资源利用率指标。

Amazon CloudWatch 以 1 秒为间隔收集指标，与之相比，SageMaker AI 的监控功能可提供更精细的资源利用率指标，间隔低至 100 毫秒（0.1 秒），便于您深入探究操作或步骤级别的指标。

要访问用于监控训练作业的资源利用率指标的控制面板，请参阅 [SageMaker AI Debugger UI in SageMaker Studio Experiments](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-on-studio.html)。



**Topics**
+ [Amazon P SageMaker rofiler](train-use-sagemaker-profiler.md)
+ [在 Amazon SageMaker Studio Classic 中监控 AWS 计算资源利用率](debugger-profile-training-jobs.md)
+ [Amazon A SageMaker I 分析功能的发行说明](profiler-release-notes.md)

# Amazon P SageMaker rofiler
<a name="train-use-sagemaker-profiler"></a>


|  | 
| --- |
|  Amazon SageMaker Profiler 目前处于预览版，在支持 AWS 区域中免费提供。Amazon SageMaker Profiler 的正式版本（如果有）可能包含与预览版中提供的功能和定价不同的功能和价格。  | 

Amazon SageMaker Profiler 是 Amazon SageMaker AI 的一项功能，它可以详细了解在 AI 上 SageMaker 训练深度学习模型期间配置的 AWS 计算资源。它侧重于分析 CPU 和 GPU 使用率、内核运行时间 GPUs、内核启动时间 CPUs、同步操作、跨 CPUs 和的内存操作 GPUs、内核启动和相应运行之间的延迟，以及 CPUs 和 GPUs之间的数据传输。 SageMaker Profiler 还提供可视化*配置文件的*用户界面 (UI)、已分析事件的统计摘要以及用于跟踪和了解和之间事件的时间关系的训练作业时间表。 GPUs CPUs

**注意**  
SageMaker Profiler 支持 PyTorch [ SageMaker 人工智能的 Dee AWS p Learning Containers， TensorFlow 并且可以在该容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)中使用。要了解更多信息，请参阅[支持的框架映像和实例类型 AWS 区域](profiler-support.md)。

**对于数据科学家**

在大型计算集群上训练深度学习模型通常会遇到计算优化问题，例如瓶颈、内核启动延迟、内存限制和资源利用率低。

要确定此类计算性能问题，您需要更深入地分析计算资源，了解哪些内核会带来延迟，哪些操作会导致瓶颈。数据科学家可以从使用 SageMaker Profiler 用户界面可视化训练作业的详细配置文件中受益。UI 提供了一个带摘要图表的控制面板和一个时间线界面，以便跟踪计算资源上的每个事件。数据科学家还可以使用 P SageMaker rofiler Python 模块添加自定义注释，以跟踪训练作业的某些部分。

**对于管理员**

如果您是 AWS 账户或 SageMaker AI 域的管理员，则可以通过 [SageMaker AI 控制台或 AI 域](https://docs.aws.amazon.com/sagemaker/latest/dg/sm-domain.html)中的 Profiler 登录页面管理 Profiler 应用程序用户。 SageMaker 每个域用户均能使用授予的权限访问其探查器应用程序。作为 A SageMaker I 域管理员和域用户，您可以根据自己的权限级别创建和删除 Profiler 应用程序。

**Topics**
+ [支持的框架映像和实例类型 AWS 区域](profiler-support.md)
+ [SageMaker Profiler 的先决条件](profiler-prereq.md)
+ [使用 P SageMaker rofiler 准备和运行训练作业](profiler-prepare.md)
+ [打开 SageMaker Profiler 用户界面应用程序](profiler-access-smprofiler-ui.md)
+ [浏览在 Profiler 用户界面中可视化的 SageMaker 配置文件输出数据](profiler-explore-viz.md)
+ [SageMaker Profiler 疑难解答](profiler-faq.md)

# 支持的框架映像和实例类型 AWS 区域
<a name="profiler-support"></a>

此功能支持以下机器学习框架和 AWS 区域。

**注意**  
要使用此功能，请确保您已安装了 SageMaker Python SDK [版本 2.180.0](https://pypi.org/project/sagemaker/2.180.0/) 或更高版本。

## SageMaker Profiler 中预装的 AI 框架镜像 SageMaker
<a name="profiler-support-frameworks"></a>

SageMaker Profiler 已预装在以下[适用 SageMaker 于 AI 的 Dee AWS p Learning Contain](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) ers 中。

### PyTorch 图片
<a name="profiler-support-frameworks-pytorch"></a>


| PyTorch 版本 | AWS DLC 图片 URI | 
| --- | --- | 
| 2.2.0 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/pytorch-training：2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker  | 
| 2.1.0 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/pytorch-training：2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker  | 
| 2.0.1 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/pytorch-training：2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/pytorch-training：2.0.1-gpu-py310-cu121-ubuntu20.04-sagemaker  | 
| 1.13.1 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/pytorch-training：1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker  | 

### TensorFlow 图片
<a name="profiler-support-frameworks-tensorflow"></a>


| TensorFlow 版本 | AWS DLC 图片 URI | 
| --- | --- | 
| 2.13.0 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/tensorflow-training：2.13.0-gpu-py310-cu118-ubuntu20.04-sagemaker  | 
| 2.12.0 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/tensorflow-training：2.12.0-gpu-py310-cu118-ubuntu20.04-sagemaker  | 
| 2.11.0 |  *763104351884*.dkr.ecr。 *<region>*.amazonaws.com/tensorflow-training：2.11.0-gpu-py39-cu112-ubuntu20.04-sagemaker  | 

**重要**  
上表中框架容器的分发和维护受到 Dee AWS p Learning Containers 服务管理的[框架支持政策](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/support-policy.html)的约束。如果您使用的先前框架版本不再受支持，我们强烈建议您升级到[当前支持的框架版本](https://aws.amazon.com/releasenotes/dlc-support-policy/)。

**注意**  
如果你想将 P SageMaker rofiler 用于其他框架镜像或你自己的 Docker 镜像，你可以使用下一节中提供的 P SageMaker rofiler SageMaker Python 包二进制文件来安装 Profiler。

## SageMaker Profiler Python 包二进制文件
<a name="profiler-python-package"></a>

如果要配置自己的 Docker 容器，请在 PyTorch 和的其他预构建容器中使用 P SageMaker rofiler TensorFlow，或者在本地安装 Profiler SageMaker Python 软件包，请使用以下二进制文件之一。根据您所处环境中的 Python 和 CUDA 版本，选择以下选项之一。

### PyTorch
<a name="profiler-python-package-for-pytorch"></a>
+ Python3.8，CUDA 11.3：[https://smppy.s3.amazonaws.com/pytorch/cu113/smprof-0.3.334-cp38-cp38-linux_x86_64.whl](https://smppy.s3.amazonaws.com/pytorch/cu113/smprof-0.3.334-cp38-cp38-linux_x86_64.whl)
+ Python3.9，CUDA 11.7：[https://smppy.s3.amazonaws.com/pytorch/cu117/smprof-0.3.334-cp39-cp39-linux_x86_64.whl](https://smppy.s3.amazonaws.com/pytorch/cu117/smprof-0.3.334-cp39-cp39-linux_x86_64.whl)
+ Python3.10，CUDA 11.8：[https://smppy.s3.amazonaws.com/pytorch/cu118/smprof-0.3.334-cp310-cp310-linux_x86_64.whl](https://smppy.s3.amazonaws.com/pytorch/cu118/smprof-0.3.334-cp310-cp310-linux_x86_64.whl)
+ Python3.10，CUDA 12.1：[https://smppy.s3.amazonaws.com/pytorch/cu121/smprof-0.3.334-cp310-cp310-linux_x86_64.whl](https://smppy.s3.amazonaws.com/pytorch/cu121/smprof-0.3.334-cp310-cp310-linux_x86_64.whl)

### TensorFlow
<a name="profiler-python-package-for-tensorflow"></a>
+ Python3.9，CUDA 11.2：[https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.334-cp39-cp39-linux_x86_64.whl](https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.334-cp39-cp39-linux_x86_64.whl)
+ Python3.10，CUDA 11.8：[https://smppy.s3.amazonaws.com/tensorflow/cu118/smprof-0.3.334-cp310-cp310-linux_x86_64.whl](https://smppy.s3.amazonaws.com/tensorflow/cu118/smprof-0.3.334-cp310-cp310-linux_x86_64.whl)

有关如何使用二进制文件安装 SageMaker Profiler 的更多信息，请参阅[（可选）安装 P SageMaker rofiler Python 软件包](profiler-prepare.md#profiler-install-python-package)。

## 支持的 AWS 区域
<a name="profiler-support-regions"></a>

SageMaker Profiler 在以下 AWS 区域版本中可用。
+ 美国东部（弗吉尼亚州北部）(`us-east-1`)
+ 美国东部（俄亥俄州）(`us-east-2`)
+ 美国西部（俄勒冈州）(`us-west-2`)
+ 欧洲地区（法兰克福）(`eu-central-1`)
+ 欧洲地区（爱尔兰）(`eu-west-1`)

## 支持的实例类型
<a name="profiler-support-instance-types"></a>

SageMaker Profiler 支持对以下实例类型的训练作业进行性能分析。

**CPU 和 GPU 性能分析**
+ `ml.g4dn.12xlarge`
+ `ml.g5.24xlarge`
+ `ml.g5.48xlarge`
+ `ml.p3dn.24xlarge`
+ `ml.p4de.24xlarge`
+ `ml.p4d.24xlarge`
+ `ml.p5.48xlarge`

**仅限 GPU 性能分析**
+ `ml.g5.2xlarge`
+ `ml.g5.4xlarge`
+ `ml.g5.8xlarge`
+ `ml.g5.16.xlarge`

# SageMaker Profiler 的先决条件
<a name="profiler-prereq"></a>

以下列表显示了开始使用 SageMaker Profiler 的先决条件。
+ 在您的 AWS 账户中使用亚马逊 VPC 设置的 A SageMaker I 域。

  有关设置域名的说明，请参阅[使用快速设置登录到 Amazon SageMaker AI 域](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)。您还需要为单个用户添加域用户配置文件，以便访问 Profiler 用户界面应用程序。有关更多信息，请参阅[添加用户配置文件](https://docs.aws.amazon.com/sagemaker/latest/dg/domain-user-profile-add.html)。
+ 以下列表显示了一组使用探查器 UI 应用程序的最低权限。
  + `sagemaker:CreateApp`
  + `sagemaker:DeleteApp`
  + `sagemaker:DescribeTrainingJob`
  + `sagemaker:Search`
  + `s3:GetObject`
  + `s3:ListBucket`

# 使用 P SageMaker rofiler 准备和运行训练作业
<a name="profiler-prepare"></a>

使用 SageMaker Profiler 设置运行训练作业包括两个步骤：调整训练脚本和配置 SageMaker 训练作业启动器。

**Topics**
+ [第 1 步：使用 P SageMaker rofiler Python 模块调整训练脚本](#profiler-prepare-training-script)
+ [第 2 步：创建 A SageMaker I 框架估算器并激活 Profiler SageMaker](#profiler-profilerconfig)
+ [（可选）安装 P SageMaker rofiler Python 软件包](#profiler-install-python-package)

## 第 1 步：使用 P SageMaker rofiler Python 模块调整训练脚本
<a name="profiler-prepare-training-script"></a>

要在训练作业运行 GPUs 时开始捕获内核运行情况，请使用 P SageMaker rofiler Python 模块修改训练脚本。导入库并添加 `start_profiling()` 和 `stop_profiling()` 方法来定义分析的开始和结束。您还可以使用可选的自定义注释在训练脚本中添加标记，以便可视化每个步骤中的特定操作期间的硬件活动。

请注意，注释器从中提取操作。 GPUs对于中的性能分析操作 CPUs，您无需添加任何其他注释。在指定分析配置（您将在[第 2 步：创建 A SageMaker I 框架估算器并激活 Profiler SageMaker](#profiler-profilerconfig)中使用此配置）时也将激活 CPU 分析。

**注意**  
对整个训练作业进行分析并不能最有效地利用资源。我们建议对训练作业的最多 300 个步骤进行分析。

**重要**  
[2023 年 12 月 14 日](profiler-release-notes.md#profiler-release-notes-20231214) 的发布涉及重大变更。P SageMaker rofiler Python 包名称已从更改为`smppy`。`smprof`这在 TensorFlow v2.12 及更高版本的 [SageMaker AI 框架容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)中有效。  
如果你使用的是早期版本的 [SageMaker AI 框架容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)，比如 TensorFlow v2.11.0，Profiler SageMaker Python 包仍然可用作。`smppy`如果您不确定应使用哪个版本或软件包名称，请将 P SageMaker rofiler 软件包的 import 语句替换为以下代码片段。  

```
try:
    import smprof 
except ImportError:
    # backward-compatability for TF 2.11 and PT 1.13.1 images
    import smppy as smprof
```

**方法 1.** 使用上下文管理器 `smprof.annotate` 为所有函数添加注释

您可以通过 `smprof.annotate()` 上下文管理器封装所有函数。如果您想按函数而不是代码行进行分析，建议使用此包装器。以下示例脚本说明如何实施上下文管理器，以便在每次迭代中包装训练循环和完整函数。

```
import smprof

SMProf = smprof.SMProfiler.instance()
config = smprof.Config()
config.profiler = {
    "EnableCuda": "1",
}
SMProf.configure(config)
SMProf.start_profiling()

for epoch in range(args.epochs):
    if world_size > 1:
        sampler.set_epoch(epoch)
    tstart = time.perf_counter()
    for i, data in enumerate(trainloader, 0):
        with smprof.annotate("step_"+str(i)):
            inputs, labels = data
            inputs = inputs.to("cuda", non_blocking=True)
            labels = labels.to("cuda", non_blocking=True)
    
            optimizer.zero_grad()
    
            with smprof.annotate("Forward"):
                outputs = net(inputs)
            with smprof.annotate("Loss"):
                loss = criterion(outputs, labels)
            with smprof.annotate("Backward"):
                loss.backward()
            with smprof.annotate("Optimizer"):
                optimizer.step()

SMProf.stop_profiling()
```

**方法 2.** 使用 `smprof.annotation_begin()` 和 `smprof.annotation_end()` 为函数中的特定代码行添加注释

您还可以定义注释来分析特定的代码行。可以在单个代码行级别而不是按函数来设置分析的确切起始点和结束点。例如，在以下脚本中，`step_annotator` 会在每次迭代开始时被定义，并在迭代结束时终止。同时，还为每个操作定义了其他详细注释器，并在每次迭代中包装目标操作。

```
import smprof

SMProf = smprof.SMProfiler.instance()
config = smprof.Config()
config.profiler = {
    "EnableCuda": "1",
}
SMProf.configure(config)
SMProf.start_profiling()

for epoch in range(args.epochs):
    if world_size > 1:
        sampler.set_epoch(epoch)
    tstart = time.perf_counter()
    for i, data in enumerate(trainloader, 0):
        step_annotator = smprof.annotation_begin("step_" + str(i))

        inputs, labels = data
        inputs = inputs.to("cuda", non_blocking=True)
        labels = labels.to("cuda", non_blocking=True)
        optimizer.zero_grad()

        forward_annotator = smprof.annotation_begin("Forward")
        outputs = net(inputs)
        smprof.annotation_end(forward_annotator)

        loss_annotator = smprof.annotation_begin("Loss")
        loss = criterion(outputs, labels)
        smprof.annotation_end(loss_annotator)

        backward_annotator = smprof.annotation_begin("Backward")
        loss.backward()
        smprof.annotation_end(backward_annotator)

        optimizer_annotator = smprof.annotation_begin("Optimizer")
        optimizer.step()
        smprof.annotation_end(optimizer_annotator)

        smprof.annotation_end(step_annotator)

SMProf.stop_profiling()
```

注释并设置探查器初始模块后，在接下来的步骤 2 中使用 SageMaker 训练作业启动器保存脚本以提交。示例启动器假定训练脚本已命名为 `train_with_profiler_demo.py`。

## 第 2 步：创建 A SageMaker I 框架估算器并激活 Profiler SageMaker
<a name="profiler-profilerconfig"></a>

以下过程说明如何使用 Pyth SageMaker on SDK 准备用于训练的 SageMaker AI 框架估算器。

1. 使用 `ProfilerConfig` 和 `Profiler` 模块设置 `profiler_config` 对象，如下所示。

   ```
   from sagemaker import ProfilerConfig, Profiler
   profiler_config = ProfilerConfig(
       profile_params = Profiler(cpu_profiling_duration=3600)
   )
   ```

   以下是 `Profiler` 模块及其参数的描述。
   +  `Profiler`：用于通过训练作业激活 SageMaker Profiler 的模块。
     +  `cpu_profiling_duration`(int)：指定进行性能分析的持续时间（以秒为单位） CPUs。默认为 3600 秒。

1. 使用上 SageMaker 一步中创建的`profiler_config`对象创建 AI 框架估算器。以下代码显示了创建 PyTorch 估算器的示例。如果要创建 TensorFlow 估算器，请`sagemaker.tensorflow.TensorFlow`改为导入，然后指定 Profiler 支持的[TensorFlow SageMaker 版本](profiler-support.md#profiler-support-frameworks-tensorflow)之一。有关支持的框架和实例类型的更多信息，请参阅[SageMaker Profiler 中预装的 AI 框架镜像 SageMaker](profiler-support.md#profiler-support-frameworks)。

   ```
   import sagemaker
   from sagemaker.pytorch import PyTorch
   
   estimator = PyTorch(
       framework_version="2.0.0",
       role=sagemaker.get_execution_role(),
       entry_point="train_with_profiler_demo.py", # your training job entry point
       source_dir=source_dir, # source directory for your training script
       output_path=output_path,
       base_job_name="sagemaker-profiler-demo",
       hyperparameters=hyperparameters, # if any
       instance_count=1, # Recommended to test with < 8
       instance_type=ml.p4d.24xlarge,
       profiler_config=profiler_config
   )
   ```

1. 通过运行 `fit` 方法开始训练作业。利用 `wait=False`，您可以将训练作业日志设为静音，并让它在后台运行。

   ```
   estimator.fit(wait=False)
   ```

在运行训练作业时或作业完成后，您可以转到 [打开 SageMaker Profiler 用户界面应用程序](profiler-access-smprofiler-ui.md) 上的下一个主题，并开始探究和可视化已保存的配置文件。

如果您想直接访问保存在 Amazon S3 存储桶中的配置文件数据，请使用以下脚本来检索 S3 URI。

```
import os
# This is an ad-hoc function to get the S3 URI
# to where the profile output data is saved
def get_detailed_profiler_output_uri(estimator):
    config_name = None
    for processing in estimator.profiler_rule_configs:
        params = processing.get("RuleParameters", dict())
        rule = config_name = params.get("rule_to_invoke", "")
        if rule == "DetailedProfilerProcessing":
            config_name = processing.get("RuleConfigurationName")
            break
    return os.path.join(
        estimator.output_path, 
        estimator.latest_training_job.name, 
        "rule-output",
        config_name,
    )

print(
    f"Profiler output S3 bucket: ", 
    get_detailed_profiler_output_uri(estimator)
)
```

## （可选）安装 P SageMaker rofiler Python 软件包
<a name="profiler-install-python-package"></a>

要在中未列出的 TensorFlow 框架映像上 PyTorch 使用 SageMaker Profiler[SageMaker Profiler 中预装的 AI 框架镜像 SageMaker](profiler-support.md#profiler-support-frameworks)，或者在您自己的自定义 Docker 容器上使用 Profiler 进行训练，您可以使用其中一个来安装 SageMaker Profiler。[SageMaker Profiler Python 包二进制文件](profiler-support.md#profiler-python-package)

**选项 1：在启动训练作业时安装 SageMaker Profiler 软件包**

[如果要使用 SageMaker Profiler 训练作业 PyTorch 或未在中列出的 TensorFlow 图像[SageMaker Profiler 中预装的 AI 框架镜像 SageMaker](profiler-support.md#profiler-support-frameworks)，请创建一个`requirements.txt`文件并将其定位在步骤 2 中为 SageMaker AI 框架估算器`source_dir`参数指定的路径下。](#profiler-profilerconfig)有关一般设置`requirements.txt`文件的更多信息，请参阅 *SageMaker Python SDK 文档*中的[使用第三方库](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#using-third-party-libraries)。在 `requirements.txt` 文件中，为 [SageMaker Profiler Python 包二进制文件](profiler-support.md#profiler-python-package) 文件添加一个 S3 存储桶路径。

```
# requirements.txt
https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl
```

**选项 2：在您的自定义 Dock SageMaker er 容器中安装 Profiler 软件包**

如果您使用自定义 Docker 容器进行训练，请将 [SageMaker Profiler Python 包二进制文件](profiler-support.md#profiler-python-package) 之一添加到您的 Dockerfile 中。

```
# Install the smprof package version compatible with your CUDA version
RUN pip install https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl
```

有关运行自定义 Docker 容器进行一般 SageMaker 人工智能训练的指南，请参阅[调整自己的训练容器](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)。

# 打开 SageMaker Profiler 用户界面应用程序
<a name="profiler-access-smprofiler-ui"></a>

您可以通过以下选项访问 SageMaker Profiler 用户界面应用程序。

**Topics**
+ [选项 1：从域名详情页面启动 SageMaker Profiler 用户界面](#profiler-access-smprofiler-ui-console-smdomain)
+ [选项 2：从 AI 控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序 SageMaker](#profiler-access-smprofiler-ui-console-profiler-landing-page)
+ [选项 3：使用 SageMaker AI Python SDK 中的应用程序启动器功能](#profiler-access-smprofiler-ui-app-launcher-function)

## 选项 1：从域名详情页面启动 SageMaker Profiler 用户界面
<a name="profiler-access-smprofiler-ui-console-smdomain"></a>

如果您有权访问 SageMaker AI 控制台，则可以选择此选项。

**导航到域详细信息页面**

 以下过程展示如何导航到域详细信息页面。

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左侧导航窗格上，选择**域**。

1. 从域列表中，选择要在其中启动 SageMaker Profiler 应用程序的域。

**启动 SageMaker Profiler 用户界面应用程序**

以下过程说明如何启动范围为用户 SageMaker 配置文件的 Profiler 应用程序。

1. 在域详细信息页面上，选择**用户配置文件**选项卡。

1. 确定要为其启动 P SageMaker rofiler UI 应用程序的用户个人资料。

1. 为选定的用户配置文件选择**启动**，然后选择**探查器**。

## 选项 2：从 AI 控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序 SageMaker
<a name="profiler-access-smprofiler-ui-console-profiler-landing-page"></a>

以下过程介绍如何从 SageMaker AI 控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序。如果您有权访问 SageMaker AI 控制台，则可以选择此选项。

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左侧导航窗格中，选择**探查器**。

1. 在**开始使用**下，选择要在其中启动 Studio Classic 应用程序的域。如果您的用户配置文件仅属于一个域，则看不到用于选择域的选项。

1. 选择要为其启动 P SageMaker rofiler UI 应用程序的用户配置文件。如果域中没有用户配置文件，请选择**创建用户配置文件**。有关创建新的用户配置文件的更多信息，请参阅[添加用户配置文件](https://docs.aws.amazon.com/sagemaker/latest/dg/domain-user-profile-add.html)。

1. 选择**打开探查器**。

## 选项 3：使用 SageMaker AI Python SDK 中的应用程序启动器功能
<a name="profiler-access-smprofiler-ui-app-launcher-function"></a>

如果您是 A SageMaker I 域用户并且只能访问 SageMaker Studio，则可以通过运行该[https://sagemaker.readthedocs.io/en/stable/api/utility/interactive_apps.html#module-sagemaker.interactive_apps.detail_profiler_app](https://sagemaker.readthedocs.io/en/stable/api/utility/interactive_apps.html#module-sagemaker.interactive_apps.detail_profiler_app)功能通过 SageMaker Studio Classic 访问 SageMaker Profiler 用户界面应用程序。

请注意， SageMaker Studio Classic 是 re: Invent 2023 之前的 Studio 用户界面体验，在 re: Invent 2023 上作为应用程序迁移到新设计的 Studio 用户界面中。 SageMaker Profiler UI 应用程序在 SageMaker AI 域级别可用，因此需要您的域 ID 和用户配置文件名称。目前，该`DetailedProfilerApp`功能仅在 SageMaker Studio Classic 应用程序中运行；该功能可以正确接收 Studio Class SageMaker ic 中的域和用户配置文件信息。

对于 re: Invent 2023 之前创建的域名、域名用户和 Studio，除非您按照[从亚马 SageMaker 逊](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-migrate.html) Studio Classic 迁移中的说明进行更新，否则 Studio Classic 将是默认体验。如果是这种情况，则无需执行进一步的操作，您可以通过运行该`DetailProfilerApp`函数直接启动 SageMaker Profiler UI 应用程序。

如果你在 re: Invent 2023 之后创建了新的域名和 Studio，请在 Studio 用户界面中启动 Studio Classic 应用程序，然后运行该`DetailProfilerApp`函数以启动 SageMaker Profiler 用户界面应用程序。

请注意，该`DetailedProfilerApp`功能不适用于其他 SageMaker AI 机器学习 IDEs，例如 SageMaker Studio JupyterLab 应用程序、St SageMaker udio 代码编辑器应用程序和 SageMaker 笔记本实例。如果你在其中运行该`DetailedProfilerApp`函数 IDEs，它会返回指向 SageMaker AI 控制台中 Profiler 登录页面的 URL，而不是打开 Profiler UI 应用程序的直接链接。

# 浏览在 Profiler 用户界面中可视化的 SageMaker 配置文件输出数据
<a name="profiler-explore-viz"></a>

本节 SageMaker 介绍了 Profiler 用户界面，并提供了有关如何使用它并从中获得见解的提示。

## 加载配置文件
<a name="profiler-explore-viz-load"></a>

打开 SageMaker Profiler 用户界面时，将打开 “**加载配置文件**” 页面。要加载和生成**控制面板**和**时间线**，请执行以下过程。<a name="profiler-explore-viz-load-procedure"></a>

**加载训练作业的配置文件**

1. 在**训练作业列表**部分中，使用复选框选择要为其加载配置文件的训练作业。

1. 选择 **Load**（加载）。作业名称应显示在顶部的**已加载配置文件**部分中。

1. 选择**作业名称**左侧的单选按钮以生成**控制面板**和**时间线**。请注意，当您选择单选按钮时，UI 会自动打开**控制面板**。另请注意，如果您在作业状态和加载状态似乎仍在进行时生成可视化效果， SageMaker Profiler UI 会生成**仪表板**图和**时间表**，直到从正在进行的训练作业或部分加载的配置文件数据中收集的最新配置文件数据。

**提示**  
您一次可以加载和可视化一个配置文件。要加载其他配置文件，必须先卸载之前加载的配置文件。要卸载配置文件，请使用**已加载配置文件**部分中配置文件右端的垃圾桶图标。

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


## 控制面板
<a name="profiler-explore-viz-overview"></a>

加载并选择训练作业后，UI 会打开**控制面板**页面，此页面默认包含以下面板。
+ **GPU 活动时间** – 此饼图显示了 GPU 活动时间与 GPU 空闲时间的百分比。在整个训练作业 GPUs 中，您可以检查自己的活动程度是否高于闲置状态。GPU 活动时间基于利用率大于 0% 的配置文件数据点，而 GPU 闲置时间是利用率为 0% 的已分析数据点。
+ **一段时间内的 GPU 利用率** – 此时间线图显示每个节点一段时间内的平均 GPU 利用率，并将所有节点聚合到一个图表中。您可以检查在特定时间间 GPUs隔内是否存在工作负载不平衡、利用率不足问题、瓶颈或空闲问题。要跟踪单个 GPU 级别的利用率和相关的内核运行，请使用[时间线界面](#profiler-explore-viz-timeline)。请注意，GPU 活动集合从您在训练脚本中添加探查器 starter 函数 `SMProf.start_profiling()` 的位置开始，并在 `SMProf.stop_profiling()` 停止。
+ **CPU 活动时间** – 此饼图显示了 CPU 活动时间与 CPU 空闲时间的百分比。在整个训练作业 CPUs 中，您可以检查自己的活动程度是否高于闲置状态。CPU 活动时间基于利用率大于 0% 的配置文件数据点，而 CPU 闲置时间是利用率为 0% 的已分析数据点。
+ **一段时间内的 CPU 利用率** – 此时间线图显示每个节点一段时间内的平均 CPU 利用率，并将所有节点聚合到一个图表中。您可以检查在特定的时间间隔内 CPUs是否存在瓶颈或未得到充分利用。要跟踪与各个 GPU 利用率和内核运行情况 CPUs 对齐的利用率，请使用[时间线界面](#profiler-explore-viz-timeline)。请注意，利用率指标从作业初始化开始。
+ **所有 GPU 内核花费的时间** – 此饼图显示了在整个训练作业中运行的所有 GPU 内核。默认情况下，它将前 15 个 GPU 内核显示为单个扇区，并在一个扇区内显示所有其他内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示 GPU 内核的总运行时间（以秒为单位），而百分比基于配置文件的整个时间。
+ **前 15 个 GPU 内核花费的时间** – 此饼图显示了在整个训练作业中运行的所有 GPU 内核。它将前 15 个 GPU 内核显示为单个扇区。将鼠标悬停在扇区上方可查看更多详细信息。该值显示 GPU 内核的总运行时间（以秒为单位），而百分比基于配置文件的整个时间。
+ **所有 GPU 内核的启动次数** – 此饼图显示了整个训练作业中每个 GPU 内核的启动次数。它将前 15 个 GPU 内核显示为单个扇区，并在一个扇区内显示所有其他内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示已启动的 GPU 内核的总数，而百分比基于所有内核的总数。
+ **前 15 个 GPU 内核的启动次数** – 此饼图显示了整个训练作业中每个 GPU 内核的启动次数。它显示了前 15 个 GPU 内核。将鼠标悬停在扇区上方可查看更多详细信息。该值显示已启动的 GPU 内核的总数，而百分比基于所有内核的总数。
+ **步长分布-此直方图显示步长持续时间的**分布。 GPUs仅在训练脚本中添加步长注释器后才会生成此图。
+ **内核精度分布**-此饼图显示了在不同数据类型（例如 FP32、 FP16 INT32、和 INT8）中运行内核所花费的时间百分比。
+ **GPU 活动分布** – 此饼图显示了在 GPU 活动上花费的时间的百分比，例如运行内核、内存（`memcpy` 和 `memset`）和同步 (`sync`)。
+ **GPU 内存操作分布** – 此饼图显示了在 GPU 内存操作上花费的时间的百分比。这将可视化 `memcopy` 活动，并有助于确定您的训练作业是否在某些内存操作上花费了过多的时间。
+ **创建新的直方图** – 为在 [第 1 步：使用 P SageMaker rofiler Python 模块调整训练脚本](profiler-prepare.md#profiler-prepare-training-script) 期间手动注释的自定义指标创建新的直方图。在向新的直方图添加自定义注释时，请选择或键入您在训练脚本中添加的注释的名称。例如，在步骤 1 的演示训练脚本中，`step`、`Forward`、`Backward`、`Optimize` 和 `Loss` 是自定义注释。在创建新的直方图时，这些注释名称将出现在指标选择的下拉菜单中。如果您选择 `Backward`，UI 会将整个分析时间内向后传递所花费时间的直方图添加到**控制面板**中。这种类型的直方图有助于检查是否有异常值占用了异常长的时间，从而导致瓶颈问题。

以下屏幕截图显示了 GPU 和 CPU 的活动时间比率以及相对于每个计算节点的时间的平均 GPU 和 CPU 利用率。

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


以下屏幕截图显示了一个饼图示例，用于比较 GPU 内核的启动次数并测量运行它们所花费的时间。在**所有 GPU 内核花费的时间**面板和**所有 GPU 内核的启动次数**面板中，您还可以在输入字段中为 *k* 指定一个整数，调整要在图中显示的图例数。例如，如果您指定 10，则图将分别显示运行次数和启动次数排名前 10 的内核。

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


以下屏幕截图显示了步长持续时间直方图的示例，以及内核精度分布、GPU 活动分布和 GPU 内存操作分布的饼图。

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


## 时间线界面
<a name="profiler-explore-viz-timeline"></a>

要详细了解在上调度并在上运行的操作级别和内核级别的 CPUs 计算资源 GPUs，请使用**时间轴**界面。

您可以使用鼠标、`[w, a, s, d]` 键或键盘上的四个箭头键在时间线界面中进行放大和缩小以及向左或向右平移。

**提示**  
有关与**时间线**界面交互的键盘快捷键的更多提示，请在左侧窗格中选择**键盘快捷键**。

时间线轨迹采用树形结构，为您提供从主机级别到设备级别的信息。例如，如果您运行每个`N`实例 GPUs 中包含八个实例，则每个实例的时间表结构将如下所示。
+ **algo-i node** — 这是为预配置实例分配任务的 SageMaker AI 标签。数字 inode 是随机分配的。例如，如果您使用 4 个实例，则此部分将从 **algo-1** 扩展为 **algo- 4**。
  + **CPU** – 在此部分中，您可以查看平均 CPU 利用率和性能计数器。
  + **GPUs**— 在本节中，您可以查看平均 GPU 利用率、单个 GPU 利用率和内核。
    + **总利用率** – 每个实例的平均 GPU 利用率。
    + **HOST-0 PID-123** – 为每个进程轨迹分配的唯一名称。首字母缩略词 PID 是进程 ID，其后面附加的数字是在从进程中捕获数据期间记录的进程 ID 号。此部分显示了进程中的以下信息。
      + **GPU-inum\$1gpu 利用率** – 第 inum\$1gpu 个 GPU 在一段时间内的利用率。
      + **GPU-inum\$1gpu 设备** – 第 inum\$1gpu 个 GPU 设备上的内核运行。
        + **stream icuda\$1stream** – 显示 GPU 设备上的内核运行的 CUDA 流。要了解有关 CUDA 流的更多信息，请参阅 NVIDIA 提供的 [CUDA C/C\$1\$1 流和并发](https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf)上的 PDF 中的幻灯片。
      + **GPU-inum\$1gpu 主机** – 内核在第 inum\$1gpu 个 GPU 主机上启动。

以下几张屏幕截图显示了在`ml.p4d.24xlarge`实例上运行的训练作业配置文件**的时间表**，每个实例 GPUs 中都配有 8 个 NVIDIA A100 Tensor Core。

以下是配置文件的缩小视图，其中列明了十几个步骤，包括 `step_232` 和 `step_233` 之间的间歇性数据加载器，用于获取下一个数据批处理。

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


对于每个 CPU，您可以跟踪 CPU 利用率和性能计数器，例如 `"clk_unhalted_ref.tsc"` 和 `"itlb_misses.miss_causes_a_walk"`，它们表示 CPU 上的指令运行。

对于每个 GPU，您可以查看主机时间线和设备时间线。内核启动位于主机时间线上，内核运行位于设备时间线上。如果您已在 GPU 主机时间线的训练脚本中添加了注释（例如向前、向后和优化），则也将看到这些注释。

在时间轴视图中，您还可以跟踪内核 launch-and-run对。这有助于您了解主机 (CPU) 上计划的内核启动如何在相应的 GPU 设备上运行。

**提示**  
按 `f` 键可放大选定内核。

以下屏幕截图是上一个屏幕截图中的 `step_233` 和 `step_234` 的放大视图。以下屏幕截图中选定的时间线间隔是在 GPU-0 设备上运行的 `AllReduce` 操作，它是分布式训练中必不可少的通信和同步步骤。在屏幕截图中，请注意，GPU-0 主机中的内核启动会连接到 GPU-0 设备流 1 中的内核运行，用青色箭头表示。

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


在选择时间线间隔时，UI 的底部窗格中还会显示两个信息选项卡，如上一个屏幕截图中所示。**当前选择**选项卡显示主机中的选定内核以及已连接的内核启动的详细信息。连接方向始终是从主机 (CPU) 到设备 (GPU)，因为总是会从 CPU 调用每个 GPU 内核。**连接**选项卡显示选定的内核启动和运行对。您可以选择其中任一项来将其移动到**时间线**视图的中心。

以下屏幕截图进一步放大了 `AllReduce` 操作启动和运行对。

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


## 信息
<a name="profiler-expore-viz-information"></a>

在 “**信息**” 中，您可以访问有关已加载训练作业的信息，例如实例类型、为任务预配置的计算资源的 Amazon 资源名称 (ARNs)、节点名称和超参数。

## 设置
<a name="profiler-expore-viz-settings"></a>

默认情况下， SageMaker AI Profiler 用户界面应用程序实例配置为在空闲时间 2 小时后关闭。在**设置**中，使用以下设置来调整自动关闭计时器。
+ **启用应用程序自动关闭** – 选择并设置为**启用**，让应用程序在闲置时间超过指定小时数后自动关闭。要禁用自动关闭功能，请选择**禁用**。
+ **自动关闭阈值（以小时为单位）**– 如果您为**启用应用程序自动关闭**选择**启用**，则可以设置应用程序自动关闭的阈值时间（以小时为单位）。默认情况下，该选项设置为 2。

# SageMaker Profiler 疑难解答
<a name="profiler-faq"></a>

使用以下 question-and-answer配对来解决使用 P SageMaker rofiler 时出现的问题。

**问：我收到一条错误消息，`ModuleNotFoundError: No module named 'smppy'`**

自 2023 年 12 月起，P SageMaker rofiler Python 包的名称已从更改为，`smppy``smprof`以解决包名重复的问题；`smppy`已被开源包使用。

因此，如果您在 2023 年 12 月之前一直在使用 `smppy` 并遇到此 `ModuleNotFoundError` 问题，则可能是由于您的训练脚本中的软件包名称过时，同时安装了最新的 `smprof` 软件包或使用了最新的 [SageMaker Profiler 中预装的 AI 框架镜像 SageMaker](profiler-support.md#profiler-support-frameworks) 软件包。在这种情况下，请确保在整个训练脚本中将所有提及的 `smppy` 替换为 `smprof`。

在训练脚本中更新 P SageMaker rofiler Python 包名称时，为避免混淆应使用哪个版本的包名称，请考虑使用条件导入语句，如以下代码片段所示。

```
try:
    import smprof 
except ImportError:
    # backward-compatability for TF 2.11 and PT 1.13.1 images
    import smppy as smprof
```

另请注意，如果您`smppy`在升级到最新 PyTorch 或 TensorFlow 版本时一直在使用，请确保按照中的说明安装最新的`smprof`软件包[（可选）安装 P SageMaker rofiler Python 软件包](profiler-prepare.md#profiler-install-python-package)。

**问：我收到一条错误消息，`ModuleNotFoundError: No module named 'smprof'`**

首先，请确保使用官方支持的 SageMaker AI Framework 容器之一。如果您不使用其中一个，则可以按照 [（可选）安装 P SageMaker rofiler Python 软件包](profiler-prepare.md#profiler-install-python-package) 中的说明安装 `smprof` 软件包。

**问：我无法导入 `ProfilerConfig`**

如果您无法使用 SageMaker Python SDK 导入`ProfilerConfig`任务启动器脚本，则您的本地环境或 Jupyter 内核的 Pyth SageMaker on SDK 版本可能已经过时了。确保将 SDK 升级到最新版本。

```
$ pip install --upgrade sagemaker
```

**问：我收到一条错误消息，`aborted: core dumped when importing smprof into my training script`**

在的早期版本中`smprof`， PyTorch 2.0\$1 和 PyTorch Lightning 会出现此问题。要解决此问题，还要按照 [（可选）安装 P SageMaker rofiler Python 软件包](profiler-prepare.md#profiler-install-python-package) 中的说明安装最新的 `smprof` 软件包。

**问：我无法从 SageMaker Studio 中找到 SageMaker Profiler 用户界面。如何找到它？**

如果您有权访问 SageMaker AI 控制台，请选择以下选项之一。
+ [选项 1：从域名详情页面启动 SageMaker Profiler 用户界面](profiler-access-smprofiler-ui.md#profiler-access-smprofiler-ui-console-smdomain)
+ [选项 2：从 AI 控制台的 SageMaker Profiler 登录页面启动 SageMaker Profiler 用户界面应用程序 SageMaker](profiler-access-smprofiler-ui.md#profiler-access-smprofiler-ui-console-profiler-landing-page)

如果您是网域用户并且无权访问 SageMaker AI 控制台，则可以通过 SageMaker Studio Classic 访问该应用程序。如果是这种情况，请选择以下选项。
+ [选项 3：使用 SageMaker AI Python SDK 中的应用程序启动器功能](profiler-access-smprofiler-ui.md#profiler-access-smprofiler-ui-app-launcher-function)

# 在 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()`

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

# Amazon A SageMaker I 分析功能的发行说明
<a name="profiler-release-notes"></a>

请参阅以下发行说明，了解有关 Amazon A SageMaker I 分析功能的最新更新。

## 2024 年 3 月 21 日
<a name="profiler-release-notes-20240321"></a>

**通用更新**

[SageMaker Profiler](train-use-sagemaker-profiler.md) 增加了对 PyTorch v2.0、v2.1.0 和 v2.0.1 的支持。

**AWS 预装了探查器的 Deep Learning Container SageMaker **

[SageMaker Profiler](train-use-sagemaker-profiler.md) 封装在以下 Dee [AWS p Learning](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) Containers 中。
+ SageMaker 适用于 PyTorch v2.2.0 的 AI 框架容器
+ SageMaker 适用于 PyTorch v2.1.0 的 AI 框架容器
+ SageMaker 适用于 PyTorch v2.0.1 的 AI 框架容器

## 2023 年 12 月 14 日
<a name="profiler-release-notes-20231214"></a>

**通用更新**

[SageMaker Profiler](train-use-sagemaker-profiler.md) 增加了对 TensorFlow v2.13.0 的支持。

**重大更改**

本次发布涉及一项重大更改。P SageMaker rofiler Python 包名称已从更改为`smppy`。`smprof`如果您在开始使用下一节中 TensorFlow 列出的最新 [SageMaker AI Framework 容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)时一直在使用该包的先前版本，请确保在训练脚本的导入语句`smprof`中`smppy`将包名称从更新为。

**AWS 预装了探查器的 Deep Learning Container SageMaker **

[SageMaker Profiler](train-use-sagemaker-profiler.md) 封装在以下 Dee [AWS p Learning](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) Containers 中。
+ SageMaker 适用于 TensorFlow v2.13.0 的 AI 框架容器
+ SageMaker 适用于 TensorFlow v2.12.0 的 AI 框架容器

如果你使用先前版本的[框架容器](profiler-support.md#profiler-support-frameworks)，比如 TensorFlow v2.11.0，Profiler SageMaker Python 包仍然可用作。`smppy`如果您不确定应使用哪个版本或软件包名称，请将 P SageMaker rofiler 软件包的 import 语句替换为以下代码片段。

```
try:
    import smprof 
except ImportError:
    # backward-compatability for TF 2.11 and PT 1.13.1 images
    import smppy as smprof
```

## 2023 年 8 月 24 日
<a name="profiler-release-notes-20230824"></a>

**新功能**

发布 Amazon SageMaker Profiler，这是一项 SageMaker AI 的分析和可视化功能，用于深入研究在训练深度学习模型时配置的计算资源，并深入了解操作级别的细节。 SageMaker Profiler 提供了 Python 模块 (`smppy`)，用于在脚本中添加注释 PyTorch 或 TensorFlow训练脚本并激活 P SageMaker rofiler。你可以通过 SageMaker AI Python SDK 和 Dee AWS p Learning Containers 访问这些模块。对于使用 P SageMaker rofiler Python 模块运行的任何作业，您都可以在提供摘要仪表板和详细时间轴的 P SageMaker rofiler UI 应用程序中加载配置文件数据。要了解更多信息，请参阅[Amazon P SageMaker rofiler](train-use-sagemaker-profiler.md)。

此版本的 P SageMaker rofiler Python 包已集成到以下适用于 PyTorch 和 TensorFlow的 [SageMaker AI 框架容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)中。
+ PyTorch v2.0.0
+ PyTorch v1.13.1
+ TensorFlow v2.12.0
+ TensorFlow v2.11.0