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

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

配置 调试程序 框架分析

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

注意

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

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

使用默认系统监控和框架分析启动训练作业

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

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

利用此 profiler_config 参数配置,调试程序 调用监控和分析的默认设置。调试程序 每 500 毫秒监控一次系统指标,并使用详细的分析选项分析第五个步骤,使用数据加载程序分析选项第七个步骤,并使用 Python 分析选项进行第 9 个、第 10 个和第 11 个步骤。

要查找可用的分析配置选项、默认参数设置以及如何配置它们的示例,请参阅 通过默认系统监控和不同分析选项的自定义框架分析启动训练作业 中的 和 SageMaker 调试程序 APIs – FrameworkProfile Amazon SageMaker Python SDK

如果要更改系统监控间隔并启用默认框架分析,您可以使用 system_monitor_interval_millis 参数明确指定 framework_profile_params 参数。例如,要每 1000 毫秒监控一次并启用默认框架分析,请使用以下示例代码。

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

有关 FrameworkProfile 类的更多信息,请参阅 中的 SageMaker调试程序 APIs – FrameworkProfile。Amazon SageMaker Python SDK

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

如果要指定目标步骤或目标时间间隔来分析训练作业,您需要为 FrameworkProfile 类指定参数。以下代码示例显示如何指定目标范围以进行分析以及系统监控。

  • 对于目标步骤范围

    通过以下示例配置,调试程序 每 500 毫秒(默认监控)监控一次整个训练作业,并配置从步骤 5 到步骤 15(适用于 10 个步骤)的目标步骤范围。

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )

    通过以下示例配置,调试程序 每 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) )
  • 对于目标时间范围

    通过以下示例配置,调试程序 每 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) )

    使用以下示例配置,调试程序 每 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) )

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

    要查找有关可用分析选项的更多信息,请参阅 中的 SageMaker 调试程序 APIs – FrameworkProfile。Amazon SageMaker Python SDK

    下一节介绍如何编写可用分析选项的脚本。

通过默认系统监控和不同分析选项的自定义框架分析启动训练作业

您可以使用以下分析配置类对框架分析选项进行微管理:

  • DetailedProfilingConfig – 使用本机框架分析器(TensorFlow 分析器和 PyTorch 分析器)指定用于分析框架操作的目标步骤或时间范围。例如,如果使用 TensorFlow,则 调试程序 挂钩使 TensorFlow 分析器能够收集 TensorFlow 特定的框架指标。详细分析使您能够在前面的某个步骤(第一步前)、各个步骤以及训练作业的各个步骤之间分析所有框架运算符。

    注意

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

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

    注意

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

    调试程序 已预配置为仅为 AWS 深度学习容器注释数据加载程序进程。调试程序 无法分析来自任何其他自定义或外部训练容器的数据加载程序进程。

  • PythonProfilingConfig – 指定用于分析 Python 函数的目标步骤或时间范围。您还可以在两个 Python 分析器之间进行选择:cProfile 和 Pininstrument。

    • cProfile – 标准 Python 分析器。cProfile 收集训练期间调用的每个 Python 运算符。借助 cProfile,调试程序 可保存每个函数调用的累积时间和注释,从而提供 Python 函数的完整详细信息。例如,在深度学习中,最常调用的函数可能是卷积筛选条件和后向传递运算符,并且 cProfile 会配置文件中的每一个。对于 cProfile 选项,您可以进一步选择一个计时器选项:总时间、CPU 时间和非 CPU 时间。虽然您可以用 CPU 时间来分析在处理器(CPU 和 GPU)上执行的每个函数调用,但您也可以使用 CPU 外时间选项识别 I/O 或网络瓶颈。默认值为总时间,调试程序 配置文件包括 CPU 和 off-CPU 时间。借助 cProfile,您可以在分析配置文件数据时向下钻取到每个单个 函数。

    • Pininstrument – Pininsstrument 是基于采样工作的低开销 Python 分析器。借助 Pininstrument 选项,调试程序 每隔毫秒对事件进行分析。因为 Pininsrument 度量所用是时钟时间而不是 CPU 时间,所以 Pininsstrument 选项可以比 cProfile 选项更好地选择,以减少分析噪音(筛选掉累积速度不相关的函数调用)并捕获实际计算量较长(逐步变慢)的运算符来训练您的模型。借助 Pinstrument,您可以查看函数调用树并更好地了解慢速的结构和根本原因。

    注意

    启用 Python 分析可能会导致缩短整体训练时间。对于 cProfile,最常调用的 Python 运算符将在每次调用中分析,因此分析上的处理时间将根据调用数量增加。对于 Pininstrument,累积分析时间随着时间而增加,因为其采样机制。

以下示例配置显示了在使用具有指定值的不同分析选项时的完整结构。

import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig) 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="cProfile", cprofile_timer="total_time" ) ) )

要查找有关可用分析选项的更多信息,请参阅 中的 DetailedProfilingConfig、DataloaderProfilingConfig 和 PythonProfilingConfigAmazon SageMaker Python SDK