

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

# 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)