SageMaker Debugger 交互式报告 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

SageMaker Debugger 交互式报告

接收 Debugger 自动生成的分析报告。通过 Debugger 报告,您可以深入了解训练作业,并获得有关改善模型性能的建议。以下屏幕截图显示了 Debugger 分析报告拼贴图。要了解更多信息,请参阅SageMaker Debugger 分析报告

注意

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

重要

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


            Debugger 训练作业摘要报告示例

SageMaker Debugger 分析报告

对于任何 SageMaker 训练作业,SageMaker Debugger ProfilerReport 规则都会调用所有监控和分析规则,并将规则分析汇总到一份综合报告中。按照本指南,使用 Amazon SageMaker Python SDK 或 S3 控制台下载报告,学习您从分析结果中可以得到哪些结论。

重要

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

下载 SageMaker Debugger 分析报告

在训练作业运行期间或作业完成后,使用 Amazon SageMaker Python SDK 和 Amazon Command Line Interface (CLI) 下载 SageMaker Debugger 分析报告。

注意

要获取 SageMaker Debugger 生成的分析报告,您必须使用 SageMaker Debugger 提供的内置 ProfilerReport 规则。要在训练作业中激活规则,请参阅配置内置探查器规则

提示

您也可以在 SageMaker Studio Debugger Insights 控制面板中,只需一次单击即可下载报告。此操作不需要编写任何额外的脚本即可下载报告。要了解如何从 Studio 下载报告,请参阅打开 Amazon SageMaker Debugger Insights 控制面板

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

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

    estimator.latest_training_job.job_name
  3. 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"
  4. 要检查报告是否已生成,请在 rule_output_path 下,使用 aws s3 ls 以及 --recursive 选项递归列出目录和文件。

    ! aws s3 ls {rule_output_path} --recursive

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

    
                                        规则输出示例

    profiler-report.html 是 Debugger 自动生成的分析报告。其余文件是存储为 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 以查看自动生成的 Debugger 分析报告。

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

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

  2. 搜索基本 S3 存储桶。例如,如果您尚未指定任何基本作业名称,则基本 S3 存储桶名称应采用以下格式:sagemaker-<region>-111122223333。通过按名称查找存储桶字段,查找基本 S3 存储桶。

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

    
                                        规则输出 S3 存储桶 URI 示例
  4. 在训练作业的 S3 存储桶中,对于 Debugger 收集的训练数据,必须要有三个子文件夹:debug-output/profiler-output/rule-output/。选择 rule-output/

    
                                        规则输出 S3 存储桶 URI 示例
  5. rule-output/ 文件夹中,选择 ProfilerReport-1234567890,然后选择 profiler-output/ 文件夹。profiler-output/ 文件夹包含 profiler-report.html(自动生成的分析报告,html 格式)、profiler-report.ipynb(Jupyter 笔记本,包含用于生成报告的脚本)以及 profiler-report/ 文件夹(包含规则分析 JSON 文件,用作报告的组件)。

  6. 选择 profiler-report.html 文件,然后依次选择操作下载

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

注意

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

要了解如何在启动训练作业之前配置 profiler_config 参数,请参阅配置框架分析

要更新当前训练作业并启用框架指标分析,请参阅更新 Debugger 框架分析配置

Debugger 分析报告演练

本节将向您逐个介绍 Debugger 分析报告中的不同部分。分析报告根据内置的监控和分析规则生成。报告仅显示发现了问题的规则的结果图。

重要

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

训练作业摘要

在报告的开头,Debugger 会提供训练作业的摘要。在此部分中,您可以概要了解不同训练阶段的持续时间和时间戳。


                        Debugger 分析报告示例

概要表包含以下信息:

  • start_time – 启动训练作业的确切时间。

  • end_time – 完成训练作业的确切时间。

  • job_duration_in_seconds – 从 start_timeend_time 的训练总时间。

  • training_loop_start – 启动第一个纪元的第一个步骤的确切时间。

  • training_loop_end – 完成最后一个纪元的最后一个步骤的确切时间。

  • training_loop_duration_in_seconds – 训练循环开始时间与训练循环结束时间所隔的总时间。

  • initialization_in_seconds – 初始化训练作业所用的时间。初始化阶段涵盖从 start_timetraining_loop_start 时间之间的时段。初始化时间用于编译训练脚本、启动训练脚本、创建和初始化模型、启动 EC2 实例和下载训练数据。

  • finalization_in_seconds – 完成训练作业所花费的时间,例如完成模型训练、更新模型构件和关闭 EC2 实例。完成阶段涵盖从 training_loop_end 时间到 end_time 之间的时段。

  • initialization (%) – 用在 initialization 上的时间占总 job_duration_in_seconds 的百分比。

  • training loop (%) – 用在 training loop 上的时间占总 job_duration_in_seconds 的百分比。

  • finalization (%) – 用在 finalization 上的时间占总 job_duration_in_seconds 的百分比。

系统使用情况统计数据

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


                        Debugger 分析报告示例

Debugger 分析报告包含以下信息:

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

  • 指标 – Debugger 收集的系统指标:CPU、GPU、CPU 内存、GPU 内存、I/O 和网络指标。

  • 单位 – 指标的单位。

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

  • p99 – 每个系统使用情况的第 99 个百分位数。

  • p95 – 每个系统使用情况的第 95 个百分位数。

  • p50 – 每个系统使用情况的第 50 个百分位数(中位数)。

  • 最小值 – 每个系统指标的最小值。

框架指标摘要

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


                        Debugger 分析报告示例

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

  • 训练/评估阶段及其他阶段之间的比率 – 显示不同训练阶段所花费时间的比率。

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

  • CPU/GPU 运算符之间的比率 – 显示运行在 CPU 或 GPU 上的运算符(例如卷积运算符)所花费时间之间的比率。

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

概述:CPU 运算符

此部分详细介绍 CPU 运算符的信息。表中显示了在最频繁调用的 CPU 运算符上所花费时间的百分比和绝对累计时间。


                            Debugger 分析报告示例
概述:GPU 运算符

此部分详细介绍 GPU 运算符的信息。表中显示了在最频繁调用的 GPU 运算符上所花费时间的百分比和绝对累计时间。


                            Debugger 分析报告示例

规则摘要

在此部分中,Debugger 汇总了所有规则评估结果、分析、规则描述和建议。


                        Debugger 分析报告示例

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

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


                        Debugger 分析报告示例

GPU 利用率分析

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

批次大小

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


                        Debugger 分析报告示例

CPU 瓶颈

在此部分中,您可以深入了解 CPUBottleneck 规则在训练作业中检测到的 CPU 瓶颈。该规则检查 CPU 使用率是否高于 cpu_threshold(默认值为 90%)以及 GPU 利用率是否低于 gpu_threshold(默认值为 10%)。


                        Debugger 分析报告示例

饼图显示以下信息:

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

  • 训练/评估阶段及其他阶段之间的比率 – 显示不同训练阶段所花费时间的比率。

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

  • CPU/GPU 运算符之间的比率 – 显示 Python 运算符(例如数据加载出现进程以及前向和向后传递运算符)在 GPU 和 CPU 上所花费时间的比率。

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

I/O 瓶颈

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

多 GPU 训练中的负载均衡

在此部分中,您可以识别 GPU 之间的工作负载均衡问题。


                        Debugger 分析报告示例

GPU 内存分析

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


                        Debugger 分析报告示例