访问 Python 分析统计数据 - Amazon SageMaker

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

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

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