本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为框架分析配置调试器
要启用调试器框架分析,请在构造估计器时配置framework_profile_params
参数。调试器框架分析使用 cProfile 或 Pyinstrument 选项收集框架指标,例如来自初始化阶段的数据、数据加载器进程、深度学习框架和训练脚本的 Python 运算符、步骤内和步骤间的详细分析。使用该FrameworkProfile
类,您可以配置自定义框架分析选项。
警告
SageMaker 调试器从 TensorFlow 2.11 和 PyTorch 2.0 开始弃用框架分析功能。您仍然可以在框架和软件开发工具包的先前版本中使用该功能,如下所示。
-
SageMaker Python SDK <= v2.130.0
-
PyTorch >= v1.6.0,< v2.0
-
TensorFlow >= v2.3.1,< v2.11
注意
在开始使用 Debugger 框架分析之前,请验证用于构建模型的框架是否受调试器支持,以进行框架分析。有关更多信息,请参阅支持的框架和算法:
调试器将框架指标保存在默认 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
参数配置,Debugger 调用监控和分析的默认设置。调试器每 500 毫秒监控一次系统指标;使用详细分析选项分析第五步;使用数据加载器分析选项分析第七步;使用 Python 分析选项分析第九、第十和第十一步。
要查找可用的分析配置选项、默认参数设置以及如何配置这些选项的示例,请参阅使用默认系统监控和带有不同性能分析选项的自定义框架分析开始训练Job Amaz SageMaker on Python SDK FrameworkProfile
如果要更改系统监控间隔并启用默认框架分析,则可以使用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 Python SDK FrameworkProfile
使用针对目标步骤或目标时间范围的默认系统监控和自定义框架分析开始训练Job
如果您想指定目标步骤或目标时间间隔来概述您的训练作业,则需要为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
) )在目标步骤或时间范围内对所有性能分析选项执行框架分析。
要了解有关可用分析选项的更多信息,请参阅 Amaz SageMaker on Python SDK FrameworkProfile
中的SageMaker 调试器 API 。 下一部分将为您展示如何将可用分析选项脚本。
使用默认系统监控和带有不同性能分析选项的自定义框架分析开始训练Job
您可以使用以下性能分析配置类来管理框架分析选项:
-
DetailedProfilingConfig
— 指定目标步骤或时间范围,使用原生框架分析器(分析器和TensorFlow 分析 PyTorch 器)分析框架操作。例如,如果使用 TensorFlow,则调试器挂钩使 TensorFlow 分析器能够收集 TensorFlow特定的框架指标。详细分析使您能够在训练作业的步骤前(第一步之前)、步骤内和步骤之间对所有框架操作员进行概要分析。 注意
详细的分析可能会显著增加 GPU 内存消耗。我们不建议启用超过几个步骤的详细分析。
-
DataloaderProfilingConfig
— 指定目标步骤或时间范围,以分析深度学习框架数据加载器进程。调试器收集框架的每个数据加载器事件。 注意
在从数据加载器收集信息时,数据加载器分析可能会降低训练性能。我们建议启用数据加载器分析的步骤不要超过几个步骤。
调试器已预先配置为仅注释Amazon深度学习容器的数据加载器进程。调试器无法分析来自任何其他自定义或外部训练容器的数据加载器进程。
-
PythonProfilingConfig
— 指定目标步骤或时间范围以分析 Python 函数。你也可以在两个 Python 分析器之间进行选择:cProfile 和 Pyinstrument。 -
cPro file — 标准的 Python 分析器。cProfile 收集训练期间调用的每个 Python 运算符的信息。使用 cProfile,调试器可以节省每个函数调用的累积时间和注释,从而提供有关 Python 函数的完整细节。例如,在深度学习中,最常调用的函数可能是卷积过滤器和反向传递运算符,而 cProfile 会分析它们中的每一个函数。对于 cProfile 选项,您可以进一步选择计时器选项:总时间、CPU 时间和非 CPU 时间。虽然您可以在 CPU 时间内分析在处理器(CPU 和 GPU)上执行的每个函数调用,但也可以使用 Off-CPU 时间选项来识别 I/O 或网络瓶颈。默认为总时间,调试器会分析 CPU 和非 CPU 时间。使用 cProfile,您可以在分析配置文件数据时深入了解每个函数。
-
Pyinstr ument — Pyinstrument 是一款低开销的 Python 分析器,它基于采样 使用 Pyinstrument 选项,调试器每毫秒对分析事件进行一次采样。由于 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
) ) )
有关可用分析选项的更多信息,请参阅 DetailedProfilingConfig