访问 Python 分析统计数据 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

访问 Python 分析统计数据

Python 分析提供了与您训练脚本和 SageMaker 深度学习框架中的 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 分析选项和所收集数据的更多信息,请参阅使用默认系统监控以及采用不同分析选项的自定义框架分析,启动训练作业

系统提供了 PythonProfileAnalysiscProfileAnalysisPyinstrumentAnalysis 类的以下方法用于获取和分析 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 )

cProfileAnalysisPyinstrumentAnalysis 类可以使用以下方法提取 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_stepend_step(字符串)– 指定开始步骤和结束步骤以提取 Python 分析统计数据。

    • mode(字符串)– 使用 PythonProfileModes 枚举器类。默认为 PythonProfileModes.TRAINPython 分析的训练模式和阶段部分中提供了可用选项。

    • start_phase(字符串)– 使用 StepPhase 枚举器类指定目标步骤中的起始阶段。此参数允许在训练的不同阶段之间进行分析。默认为 StepPhase.STEP_STARTPython 分析的训练模式和阶段部分中提供了可用选项。

    • end_phase(字符串)– 使用 StepPhase 枚举器类指定目标步骤中的结束阶段。此参数设置训练的结束阶段。可用选项与可用于 start_phase 参数的选项相同。默认为 StepPhase.STEP_ENDPython 分析的训练模式和阶段部分中提供了可用选项。

  • 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() – 返回 Python 分析统计数据的 DataFrame。每个行保存所进行每个分析的元数据以及对应的统计数据文件(每个步骤一个文件)。

  • python_analysis.list_available_node_ids() – 返回 Python 分析统计数据的可用节点 ID 列表。

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(钩子关闭后进行分析)。