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

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

SageMaker 调试程序 分析报告

对于任何 SageMaker 训练作业,调试程序 ProfilerReport 规则调用所有监控和分析规则,并将规则分析聚合到一个全面报告中。按照本指南的说明,使用 Amazon SageMaker Python SDK 或 S3 控制台下载报告,并了解您可以从分析结果解释的内容。

重要

要使用新的 调试程序 功能,您需要升级 SageMaker Python 开发工具包和 SMDebug 客户端库。在您的 iPython 内核、Jupyter 笔记本或 JupyterLab 环境中,运行以下代码以安装最新版本的库并重新启动内核。

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

下载 调试程序 分析报告

在使用 调试程序 和 Amazon SageMaker Python SDK (CLI) 在训练作业运行时或作业完成后下载 AWS Command Line Interface 分析报告。

提示

您也可以通过 SageMaker Studio 调试程序 见解控制面板进行一键式下载报告,而无需编写其他脚本。要了解如何从 Studio 下载报告,请参阅Open Amazon SageMaker 调试程序 Insights 控制面板

Download using SageMaker Python SDK and AWS 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_pathaws 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,请选择 Trust HTML (信任 HTML) 以查看自动生成的 调试程序 分析报告。

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

Download using Amazon S3 Console
  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

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

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

    
                                        规则输出 S3 存储桶 URI 的示例
  4. 在训练作业的 S3 存储桶中,必须有三个用于由 调试程序 收集的训练数据的子文件夹: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 文件,然后依次选择 Actions (操作)Download (下载)

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

注意

如果您启动训练作业时未配置特定于 调试程序 的参数,则 调试程序 仅基于系统监控规则生成报告,因为 调试程序 参数未配置为保存框架指标。要启用框架指标分析并接收扩展的 调试程序 分析报告,请在构建或更新 profiler_config 评估程序时配置 SageMaker 参数。

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

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

调试程序 分析报告演练

本部分将指导您按部分完成 调试程序 分析报告。分析报告基于内置的监控和分析规则生成。报告仅显示发现问题的规则的结果图表。

训练作业摘要

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


                        分析报告的示例调试程序

摘要表包含以下信息:

  • 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_endend_time

  • initialization (%) – 在初始化方面花费的总 job_duration_in_seconds 的时间百分比。

  • 训练循环 (%) – 在训练循环上花费的总 job_duration_in_seconds 中所占的时间百分比。

  • 最终确定 (%) – 在最终确定上花费的总 job_duration_in_seconds 时间的百分比。

系统使用情况统计数据

在本节中,您可以查看系统利用率统计数据的概述。


                        分析报告的示例调试程序

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

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

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

  • 单位 – 系统指标的单位。

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

  • p99 – 每个系统利用率的第 99 个百分位数。

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

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

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

框架指标摘要

在本节中,以下饼图显示对 CPUs 和 GPUs 执行的框架操作的明细。


                        分析报告的示例调试程序

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

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

  • Ratio between forward and backward pass (前向传递与后向传递之间的比率) 显示训练循环中前向与后向传递所耗费的时长之间的比率。–

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

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

概述:CPU 运算符

此部分提供了有关 CPU 运算符的详细信息。该表显示了在最常调用的 CPU 运算符上花费的时间的百分比和绝对累积时间。


                        分析报告的示例调试程序

概述:GPU 运算符

此部分详细介绍了 GPU 运算符。该表显示了在最常调用的 GPU 运算符上花费的时间的百分比和绝对累积时间。


                        分析报告的示例调试程序

规则摘要

在本节中,调试程序 聚合所有规则评估结果、分析、规则描述和建议。


                        分析报告的示例调试程序

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

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


                        分析报告的示例调试程序

GPU 利用率分析

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

批处理大小

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


                        分析报告的示例调试程序

CPU 瓶颈

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


                        分析报告的示例调试程序

饼图显示以下信息:

  • 由于 CPU 瓶颈导致的低 GPU 使用率 显示 GPU 利用率高于和低于阈值的数据点与 CPU 瓶颈条件匹配的数据点的比率。–

  • TRAIN/EVL 阶段与其他阶段的比率 显示在不同训练阶段上花费的持续时间之间的比率。–

  • Ratio between forward and backward pass (前向传递与后向传递之间的比率) 显示训练循环中前向与后向传递所耗费的时长之间的比率。–

  • CPU/GPU 运算符之间的比率 – 显示 Python 运算符(如数据加载程序进程以及向前和向后传递运算符)在 GPUs 上花费的持续时间与 CPUs 之间的比率。

  • 框架中记录的一般指标 显示主要框架指标与花在这些指标上的持续时间之间的比率。–

I/O 瓶颈

在本节中,您可以找到 IO 瓶颈的摘要。

多 GPU 训练中的LoadBalancing

在本节中,您可以跨 确定工作负载均衡问题。GPUs


                        分析报告的示例调试程序

GPU 内存分析

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


                        分析报告的示例调试程序