配置框架分析 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置框架分析

警告

为了支持 Amazon SageMaker 探查器,SageMaker Debugger 从 TensorFlow 2.11 和 PyTorch 2.0 开始弃用了框架分析功能。您仍然可以在以前版本的框架和 SDK 中使用该功能,如下所示。

  • SageMaker Python SDK <= v2.130.0

  • PyTorch >= v1.6.0 且 < v2.0

  • TensorFlow >= v2.3.1 且 < v2.11

另请参阅 2023 年 3 月 16 日

要启用 Debugger 框架分析,请在构造估算器时配置 framework_profile_params。Debugger 框架使用 cProfile 或 Pyinstrument 选项,分析收集框架指标,例如初始化阶段的数据、数据加载器进程、深度学习框架和训练脚本的 Python 运算符、步骤内部和步骤之间的详细分析。使用 FrameworkProfile 类,您可以配置自定义框架分析选项。

注意

在开始使用 Debugger 框架分析之前,请验证 Debugger 是否支持对构建模型所用的框架进行框架分析。有关更多信息,请参阅 支持的框架和算法

Debugger 将框架指标保存在默认 S3 存储桶中。默认 S3 存储桶 URI 的格式为 s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/

使用默认框架分析启动训练作业

以下示例代码是最简单的 profiler_config 参数设置,用于启动默认系统监控和默认框架分析。以下示例代码中的 FrameworkProfile 类在训练作业启动时启动默认框架分析。Debugger 框架分析包括以下选项:详细的分析、数据加载器分析和 Python 分析。

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )

使用 profiler_config 参数配置,Debugger 调用监控和分析的默认设置。Debugger 每 500 毫秒监视系统指标;使用详细分析选项分析第 5 个步骤;使用数据加载器分析选项分析第 7 个步骤;使用 Python 分析选项分析第 9、第 10 和第 11 个步骤。

要查找可用的性能分析配置选项、默认参数设置以及如何配置这些选项的示例,请参阅 Amazon SageMaker Python SDK 中的使用默认系统监控以及采用不同分析选项的自定义框架分析,启动训练作业SageMaker Debugger API – 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 类的更多信息,请参阅 Amazon SageMaker Python SDK 中的 SageMaker Debugger API – FrameworkProfile

启动训练作业,采用针对目标步骤或目标时间范围的默认系统监控和自定义框架分析

如果要指定目标步骤或目标时间间隔来分析训练作业,您需要为 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) )

    框架分析在目标步骤或时间范围上对所有分析选项执行。

    要查找有关可用分析选项的详细信息,请参阅 Amazon SageMaker Python SDK 中的 SageMaker Debugger API – FrameworkProfile

    下一个部分将演示如何编写可用分析选项的脚本。

使用默认系统监控以及采用不同分析选项的自定义框架分析,启动训练作业

您可以使用以下分析配置类来管理框架分析选项:

  • DetailedProfilingConfig – 指定目标步骤或时间范围,以使用原生框架探查器(TensorFlow 探查器和 PyTorch 探查器)来分析框架操作。例如,如果使用 TensorFlow,则 Debugger 钩子允许 TensorFlow 探查器收集特定于 TensorFlow 的框架指标。通过详细的分析,您可以在训练作业执行步骤之前(在第一步之前)、在步骤内以及在步骤之间对所有框架运算符进行分析。

    注意

    详细分析可能会显著增加 GPU 内存消耗。我们建议不要为多个步骤启用详细分析。

  • DataloaderProfilingConfig – 指定目标步骤或时间范围以分析深度学习框架数据加载器流程。Debugger 收集框架的每个数据加载器事件。

    注意

    数据加载器分析在从数据加载器收集信息时,可能会降低训练性能。我们建议不要为多个步骤启用数据加载器分析。

    Debugger 已预配置为仅对 Amazon Deep Learning Containers 数据加载器进程进行标注。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 ) ) )

有关可用的分析选项的更多信息,请参阅 Amazon SageMaker Python SDK 中的 DetailedProfilingConfigDataloaderProfilingConfigPythonProfilingConfig