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

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

配置调试器框架分析

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

注意

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

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

使用默认系统监控和框架分析开始培训 Job

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

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

有了这个profiler_config参数配置时,调试器调用监控和分析的默认设置。调试器每 500 毫秒监视系统指标;使用详细分析选项分析第五步;使用数据加载器分析选项分析选项分析第七步;使用 Python 分析选项执行第九、第十和第十一步。

要查找可用的性能分析配置选项、默认参数设置以及如何配置这些选项的示例,请参阅使用默认系统监控和使用不同的分析选项的自定义框架分析开始训练 JobSageMaker调试程序 API —FrameworkProfile中的亚马逊SageMakerPython 开发工具包.

如果要更改系统监视时间间隔并启用默认框架分析,则可以指定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调试程序 API —FrameworkProfile中的亚马逊SageMakerPython 开发工具包.

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

如果要指定目标步骤或目标时间间隔来分析训练作业,则需要为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调试程序 API —FrameworkProfile中的亚马逊SageMakerPython 开发工具包.

    下一节将为您展示如何为可用分析选项编写脚本。

使用默认系统监控和使用不同的分析选项的自定义框架分析开始训练 Job

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

  • DetailedProfilingConfig— 使用本机框架分析器指定目标步长或时间范围来分析框架操作 (TensorFlow和分析程序PyTorch分析器)。例如,如果使用TensorFlow,调试器挂钩启用TensorFlow要收集的分析器TensorFlow特定的框架指标。通过详细的分析,您可以在培训作业的前一步(在第一步之前)、步骤内以及在培训作业的步骤之间对所有框架运营商进行分析。

    注意

    详细的分析可能会显著增加 GPU 内存消耗。我建议不要启用详细的分析功能超过几个步骤。

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

    注意

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

    调试器已预配置为仅针对Amazon深度学习容器。调试器无法从任何其他自定义或外部培训容器中分析数据加载器流程。

  • PythonProfilingConfig— 指定目标步长或时间范围来分析 Python 函数。您还可以在两个 Python 分析器之间进行选择:cProfile 和 Py仪器。

    • C 个人资料— 标准 Python 分析器。cProfile 会为训练期间调用的每个 Python 运算符收集信息。借助 cProfile,调试器可以节省每个函数调用的累积时间和注释,从而提供了 Python 函数的完整详细信息。例如,在深度学习中,最常被调用的函数可能是卷积过滤器和向后传递运算符,以及 cProfile 对其中的每一个函数进行分析。对于 cProfile 选项,您可以进一步选择计时器选项:总时间、CPU 时间和 CPU 外时间。虽然您可以分析 CPU 时间内在处理器(包括 CPU 和 GPU)上执行的每个函数调用,但也可以使用 “非 CPU 时间” 选项识别 I/O 或网络瓶颈。默认值为总时间,调试器会分析 CPU 和 CPU 外时间。借助 cProfile,您可以在分析配置文件数据时向下钻取到每个功能。

    • py仪器/仪器— Py仪器是基于采样工作的低开销 Python 分析器。使用 Py仪器选项,调试器每毫秒对性能分析事件进行一次采样。由于 Py仪器测量的是挂钟时间而不是 CPU 时间,因此 Py仪器选项是减少性能分析噪声(过滤累计速度不相关的函数调用)和捕获实际计算密集型运算符(训练模型的过程中,累计缓慢)。有了 Py仪器,你可以看到一棵函数调用树,并更好地了解缓慢的结构和根本原因。

    注意

    启用 Python 分析可能会减慢整体训练时间。cProfile 会在每次调用时分析最常被调用的 Python 运算符,因此性能分析的处理时间随调用次数而增加。对于 Py仪器而言,由于其取样机制,累计分析时间相对于时间而增加。

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

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 ) ) )

有关可用分析选项的更多信息,请参阅DetailedProfilingConfigDataloaderProfilingConfig, 和PythonProfilingConfig中的亚马逊SageMakerPython 开发工具包.