SageMaker 调试器性能分析报告 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

SageMaker 调试器性能分析报告

对于任何 SageMaker 培训作业,调试器剖析器报告规则调用所有监控和分析规则并将规则分析汇总到一份综合报告中。遵循本指南,使用Amazon SageMaker Python 开发工具包或 S3 控制台,然后从性能分析结果中了解可以解释什么。

重要

报告中提供了地块和建议供参考,但不是确定性的。您有责任对信息进行单独评估。

下载调试器性能分析报告

在训练作业运行期间或作业完成后使用Amazon SageMaker Python 开发工具包和Amazon Command Line Interface(CLI)。

提示

您还可以通过 SageMaker Studio 调试器见解仪表板只需单击一下即可下载报告,而无需进行其他脚本编写。要了解如何从 Studio 下载报告,请参阅打开 Amazon SageMaker 调试程序见解控制面板.

Download using SageMaker Python SDK and Amazon CLI
  1. 检查当前作业的默认 S3 输出基础 URI。

    estimator.output_path
  2. 检查当前作业名称。

    estimator.latest_training_job.job_name
  3. 调试器性能分析报告存储在<default-s3-output-base-uri>/<training-job-name>/rule-output. 按如下所示配置规则输出路径:

    rule_output_path = estimator.output_path + estimator.latest_training_job.job_name + "/rule-output"
  4. 要检查报告是否已生成,请在rule_output_path使用aws s3 ls使用--recursive选项。

    ! aws s3 ls {rule_output_path} --recursive

    这应返回命名为自动生成的文件夹下的完整文件列表ProfilerReport-1234567890. 文件夹名称是字符串的组合:ProfilerReport以及基于 ProfilerReport 规则启动时 Unix 时间戳的唯一 10 位数标签。

    
                                        规则输出示例

    这些区域有:profiler-report.html是调试器自动生成的性能分析报告。其余文件是存储在 JSON 中的内置规则分析组件和用于将它们聚合到报告中的 Jupyter 笔记本。

  5. 使用递归下载文件aws s3 cp. 以下命令将所有规则输出文件保存到ProfilerReport-1234567890当前工作目录下的文件夹。

    ! aws s3 cp {rule_output_path} ./ --recursive
    提示

    如果使用 Jupyter 笔记本服务器,请运行!pwd仔细检查当前的工作目录。

  6. /ProfilerReport-1234567890/profiler-output目录,打开profiler-report.html. 如果使用 jupyterLab,请选择信任 HTML以查看自动生成的调试器性能分析报告。

    
                                        规则输出示例
  7. 打开profiler-report.ipynb文件以探索报告的生成方式。您还可以使用 Jupyter 笔记本文件自定义和扩展分析报告。

Download using Amazon S3 Console
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Simple Storage Service(Amazon S3)控制台:https://console.aws.amazon.com/s3/

  2. 搜索基本 S3 存储桶。例如,如果您尚未指定任何基本任务名称,则基本 S3 存储桶名称应采用以下格式:sagemaker-<region>-111122223333. 通过查找基本 S3 存储桶按名称查找存储桶字段中返回的子位置类型。

    
                                        规则输出 S3 存储桶 URI 的示例
  3. 在基本 S3 存储桶中,通过在按前缀查找对象输入字段。选择训练任务名称。

    
                                        规则输出 S3 存储桶 URI 的示例
  4. 在培训作业的 S3 存储桶中,调试器收集的训练数据必须有三个子文件夹:调试输出/剖析器输出/, 和规则输出/. 选择规则输出/.

    
                                        规则输出 S3 存储桶 URI 的示例
  5. 规则输出/文件夹,选择分析器报告 -1234567890,然后选择剖析器输出/folder。这些区域有:剖析器输出/包含文件夹profiler-report.html(html 中的自动生成的分析报告),分析器报告 .ipynb(带有用于生成报告的脚本的 Jupyter 笔记本)和分析器报告/文件夹(包含用作报告组件的规则分析 JSON 文件)。

  6. 选择profiler-report.html文件,选择操作, 和下载.

    
                                        规则输出 S3 存储桶 URI 的示例
  7. 打开已下载的profiler-report.html在 Web 浏览器中使用文件。

注意

如果您在没有配置调试器特定参数的情况下开始训练作业,则调试器仅根据系统监控规则生成报告,因为调试器参数未配置为保存框架指标。要启用框架指标分析并接收扩展的调试器性能分析报告,请配置profiler_config构建或更新 SageMaker 估计器时的参数。

要了解如何配置profiler_config参数在开始训练作业之前,请参阅配置调试器框架分析.

要更新当前的培训作业并启用框架指标分析,请参阅更新调试器框架分析配置.

调试器性能分析报告演练

本节指导您逐节完成调试器分析报告。分析报告是根据监控和分析的内置规则生成的。该报告仅显示发现问题的规则的结果图。

重要

报告中提供了地块和建议供参考,但不是确定性的。您有责任对信息进行单独评估。

训练 Job 摘要

在报告的开头,调试器提供了训练工作的摘要。在本节中,您可以概述不同训练阶段的时间持续时间和时间戳。


                        调试器性能分析报告的示例

汇总表包含以下信息:

  • start_time— 培训工作开始的确切时间。

  • end_time— 培训工作完成的确切时间。

  • job_持续时间 _in_秒/秒— 从start_timeend_time.

  • 训练_loop _start— 第一个时代的第一步开始的确切时间。

  • 训练_loop _end— 最后一个时代的最后一步完成的确切时间。

  • 训练_loop _ 持续时间 _in_秒— 训练循环开始时间和训练循环结束时间之间的总时间。

  • 初始化 _in_秒数— 在初始化培训工作上花费的时间。初始化阶段涵盖从start_time训练_loop _start时间。初始化时间花在编译训练脚本、启动训练脚本、创建和初始化模型、启动 EC2 实例和下载训练数据上。

  • 最终化 _in_秒数— 花在完成培训任务上的时间,例如完成模型训练、更新模型工件和关闭 EC2 实例。最后定稿阶段涵盖从训练_loop _end是时候去end_time.

  • 初始化 (%)— 花在上面的时间百分比初始化总数超过job_持续时间 _in_秒/秒.

  • 训练循环 (%)— 花在上面的时间百分比训练循环超过总数job_持续时间 _in_秒/秒.

  • 最后定稿 (%)— 花在上面的时间百分比最后确定总数超过job_持续时间 _in_秒/秒.

系统计数据

在本节中,您可以看到系统利用率统计信息的概述。


                        调试器性能分析报告的示例

调试器分析报告包括以下信息:

  • 节点— 列出节点的名称。如果在多节点(多个 EC2 实例)上使用分布式训练,则节点名称的格式为algo-n.

  • 公制— 调试器收集的系统指标:CPU、GPU、CPU 内存、GPU 内存、I/O 和网络指标。

  • 单元— 系统指标的单位。

  • max— 每个系统指标的最大值。

  • p99— 每个系统利用率的 99%。

  • p95— 每个系统利用率的第 95 个百分位。

  • p50— 每个系统利用率的第 50 个百分位数(中位数)。

  • 分钟— 每个系统指标的最小值。

框架指标摘要

在本节中,以下饼图显示了 CPU 和 GPU 上的框架操作的细分。


                        调试器性能分析报告的示例

每个饼图分析收集的框架指标的各个方面,如下所示:

  • TRAIN/EVAL 阶段与其他阶段之间的比率— 显示在不同训练阶段花费的时间之间的比率。

  • 向前和向后传递之间的比率— 显示训练循环中前向和向后传递花费的时间之间的比率。

  • CPU/GPU 运营商之间的比率— 显示花在 CPU 或 GPU 上运行的操作员(例如卷积运算符)上的时间之间的比率。

  • 框架中记录的一般指标— 显示花在主要框架指标(例如数据加载、向前和向后传递)上的时间之间的比率。

概述:CPU 运营商

本节详细介绍 CPU 操作员的信息。该表显示了花在最常称为 CPU 运算符的时间百分比和绝对累计时间。


                            调试器性能分析报告的示例

概述:GPU 运营商

本节详细介绍 GPU 运算符的信息。该表显示了花在最常称为 GPU 运算符的时间百分比和绝对累计时间。


                            调试器性能分析报告的示例

规则摘要

在本节中,调试器汇总了所有规则评估结果、分析、规则描述和建议。


                        调试器性能分析报告的示例

分析训练循环 — 步骤持续时间

在本节中,您可以在每个节点中找到有关每个 GPU 核心的步长持续时间的详细统计信息。调试器评估步长持续时间的平均值、最大值、p99、p95、p50 和最小值,并计算步长异常值。下面的直方图显示了在不同工作节点和 GPU 上捕获的步长持续时间。您可以通过选择右侧的图例来启用或禁用每个工作人员的直方图。您可以检查是否有特定 GPU 导致步长持续时间异常值。


                        调试器性能分析报告的示例

GPU 利用率分析

本节显示了基于 LowGPU 利用率规则的 GPU 核心利用率的详细统计信息。它还总结了 GPU 利用率统计数据,均值、p95 和 p5,以确定培训作业是否未充分利用 GPU。

Batch 大小

本节显示了 CPU 总使用率、单个 GPU 利用率和 GPU 内存占用量的详细统计信息。BatchSize 规则决定是否需要更改批处理大小以更好地利用 GPU。您可以检查批处理大小是太小导致利用不足还是过大导致过度利用和内存不足问题。在图中,方框显示中位数 (p50) 中的 p25 和 p75 百分位数范围(分别填充深紫色和亮黄色),误差条显示下限的第 5 个百分位数和上限的第 95 个百分位数。


                        调试器性能分析报告的示例

CPU 瓶颈

在本节中,您可以深入了解 CPU瓶颈规则在培训作业中检测到的CPU 瓶颈。该规则检查 CPU 使用率是否高于cpu_threshold(默认情况下为 90%)以及 GPU 利用率低于gpu_threshold(默认情况下为 10%)。


                        调试器性能分析报告的示例

饼图显示以下信息:

  • CPU 瓶颈导致的 GPU 使用率低— 显示 GPU 使用率高于和低于阈值的数据点与符合 CPU 瓶颈标准的数据点之间的比率。

  • TRAIN/EVAL 阶段与其他阶段之间的比率— 显示在不同训练阶段花费的时间之间的比率。

  • 向前和向后传递之间的比率— 显示训练循环中前向和向后传递花费的时间之间的比率。

  • CPU/GPU 运营商之间的比率— 显示 Python 操作员(例如数据加载器进程以及前向和向后传递运算符)在 GPU 和 CPU 上花费的时间之间的比率。

  • 框架中记录的一般指标— 显示主要框架指标以及在指标上花费的时间持续时间之间的比率。

I/O 瓶颈

在本节中,您可以找到 I/O 瓶颈的摘要。该规则评估 I/O 等待时间和 GPU 利用率,并监控在 I/O 请求上花费的时间是否超过总训练时间的阈值百分比。这可能表明 GPU 正在等待数据从存储到达的 I/O 瓶颈。

多 GPU 训练中的负载均衡

I在本节中,您可以识别 GPU 之间的工作负载平衡问题。


                        调试器性能分析报告的示例

GPU 内存分析

在本部分中,您可以分析 GpumemoryGress 规则收集的 GPU 内存利用率。在图中,方框显示中位数 (p50) 中的 p25 和 p75 百分位数范围(分别填充深紫色和亮黄色),误差条显示下限的第 5 个百分位数和上限的第 95 个百分位数。


                        调试器性能分析报告的示例