本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
访问 Python 分析统计数据
Python 分析提供与训练脚本和 SageMaker AI 深度学习框架中的 Python 函数和运算符相关的框架指标。
Python 分析的训练模式和阶段
为了在训练期间分析特定的时间间隔,以便对每个这些时间间隔的统计信息进行分区,Debugger 提供了用于设置模式和阶段的工具。
对于训练模式,请使用以下 PythonProfileModes
类:
from smdebug.profiler.python_profile_utils import PythonProfileModes
此类提供以下选项:
-
PythonProfileModes.TRAIN
– 如果您要对训练阶段的目标步骤进行分析,请使用此项。此模式选项仅适用于 TensorFlow。 -
PythonProfileModes.EVAL
– 如果您要对评估阶段的目标步骤进行分析,请使用此项。此模式选项仅适用于 TensorFlow。 -
PythonProfileModes.PREDICT
– 如果您要对预测阶段的目标步骤进行分析,请使用此项。此模式选项仅适用于 TensorFlow。 -
PythonProfileModes.GLOBAL
– 如果您要分析全局阶段(包括前三个阶段)中的目标步骤,请使用此项。此模式选项仅适用于 PyTorch。 -
PythonProfileModes.PRE_STEP_ZERO
– 如果您要在第一个纪元的第一个训练步骤开始之前,对初始化阶段的目标步骤进行分析,请使用此项。此阶段包括初始任务提交、将训练脚本上传到EC2实EC2例、准备实例以及下载输入数据。此模式选项适用于 TensorFlow 和 PyTorch。 -
PythonProfileModes.POST_HOOK_CLOSE
– 如果您要在训练任务完成并且 Debugger 钩子已关闭后,对完成阶段的目标步骤进行分析,请使用此项。此阶段包括在训练作业完成和结束时分析数据。此模式选项适用于 TensorFlow 和 PyTorch。
对于训练阶段,请使用以下 StepPhase
类:
from smdebug.profiler.analysis.utils.python_profile_analysis_utils import StepPhase
此类提供以下选项:
-
StepPhase.START
– 用于指定初始化阶段的起点。 -
StepPhase.STEP_START
– 用于指定训练阶段的开始步骤。 -
StepPhase.FORWARD_PASS_END
– 用于指定结束向前传递的步骤。此选项仅适用于 PyTorch。 -
StepPhase.STEP_END
– 用于指定训练阶段的结束步骤。此选项仅适用于 TensorFlow。 -
StepPhase.END
— 用于指定定稿 (post-hook-close) 阶段的终点。如果回调钩子没有关闭,则不会进行完成阶段分析。
Python 分析的分析工具
Debugger 提供了两种分析工具用于支持 Python 分析:
-
cProfile — 标准的 python 探查器。 cProfile 按时收集启用分析CPU时调用的每个函数的框架指标。
-
Pyinstrument – 这是一个低开销的 Python 探查器,对事件进行每毫秒的采样分析。
要了解有关 Python 分析选项和所收集数据的更多信息,请参阅提供不同剖析选项的默认系统监控和自定义框架剖析。
系统提供了 PythonProfileAnalysis
、cProfileAnalysis
、PyinstrumentAnalysis
类的以下方法用于获取和分析 Python 分析数据。每个函数都加载默认 S3 中的最新数据URI。
from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis
要设置 Python 分析对象进行分析,请使用 cProfileAnalysis 或 PyinstrumentAnalysis 类,如以下示例代码所示。它显示了如何设置 cProfileAnalysis
对象,如果您想使用 PyinstrumentAnalysis
,则可以替换类名。
python_analysis = cProfileAnalysis( local_profile_dir=tf_python_stats_dir, s3_path=tj.profiler_s3_output_path )
cProfileAnalysis
和 PyinstrumentAnalysis
类可以使用以下方法提取 Python 分析统计数据:
-
python_analysis.fetch_python_profile_stats_by_time(start_time_since_epoch_in_secs, end_time_since_epoch_in_secs)
– 获取开始时间和结束时间,并针对其开始或结束时间与提供的间隔重叠的步骤统计数据,返回其函数统计数据。 -
python_analysis.fetch_python_profile_stats_by_step(start_step, end_step, mode, start_phase, end_phase)
– 获取起始步骤和结束步骤,对于已分析的step
满足start_step <= step < end_step
条件的所有步骤统计数据,返回其函数统计数据。-
start_step
和end_step
(字符串)– 指定开始步骤和结束步骤以提取 Python 分析统计数据。 -
mode
(字符串)– 使用PythonProfileModes
枚举器类。默认为PythonProfileModes.TRAIN
。Python 分析的训练模式和阶段部分中提供了可用选项。 -
start_phase
(字符串)– 使用StepPhase
枚举器类指定目标步骤中的起始阶段。此参数允许在训练的不同阶段之间进行分析。默认为StepPhase.STEP_START
。Python 分析的训练模式和阶段部分中提供了可用选项。 -
end_phase
(字符串)– 使用StepPhase
枚举器类指定目标步骤中的结束阶段。此参数设置训练的结束阶段。可用选项与可用于start_phase
参数的选项相同。默认为StepPhase.STEP_END
。Python 分析的训练模式和阶段部分中提供了可用选项。
-
-
python_analysis.fetch_profile_stats_between_modes(start_mode, end_mode)
– 从开始和结束模式之间的 Python 分析中提取统计数据。 -
python_analysis.fetch_pre_step_zero_profile_stats()
– 从 Python 分析中提取直至步骤 0 的统计数据。 -
python_analysis.fetch_post_hook_close_profile_stats()
– 钩子关闭后从 Python 分析中提取统计数据。 -
python_analysis.list_profile_stats()
— 返回一个 DataFrame Python 分析统计信息。每个行保存所进行每个分析的元数据以及对应的统计数据文件(每个步骤一个文件)。 -
python_analysis.list_available_node_ids()
— 返回 Python 分析统计信息的可用节点IDs列表。
cProfileAnalysis
类特定的方法:
-
fetch_profile_stats_by_training_phase()
– 针对开始和结束模式的所有可能组合,提取并聚合 Python 分析统计数据。例如,如果在启用详细分析的情况下完成了训练和验证阶段,则组合为(PRE_STEP_ZERO, TRAIN)
、(TRAIN, TRAIN)
、(TRAIN, EVAL)
、(EVAL, EVAL)
以及(EVAL, POST_HOOK_CLOSE)
。每个这些组合中的所有统计数据文件都将汇总。 -
fetch_profile_stats_by_job_phase()
– 按作业阶段提取和聚合 Python 分析统计数据。作业阶段包括initialization
(分析直到步骤 0)、training_loop
(训练和验证)以及finalization
(钩子关闭后进行分析)。