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

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

访问 Python 分析统计数据

Python 分析提供了与训练脚本和 SageMaker 深度学习框架中的 Python 函数和运算符相关的框架指标。

Python 分析的训练模式和阶段

为了在训练期间分析特定的时间间隔以分区每个时间间隔的统计信息,调试器提供了设置模式和阶段的工具。

对于训练模式,请使用以下内容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— 如果要在训练任务完成并关闭调试器挂钩后分析最终阶段的目标步骤,请使用此选项。此阶段包括在培训作业完成和完成期间的分析数据。此模式选项适用于 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— 用于指定最终定稿(挂钩关闭后)阶段的结束点。如果回调钩子没有关闭,则不会进行定稿阶段分析。

Python 分析分析工具

调试器使用两个分析工具支持 Python 分析:

  • cProfile — 标准 python 分析器。cProfile 为启用分析时调用的每个函数收集有关 CPU 时间的框架指标。

  • Py仪器 — 这是一个低开销的 Python 分析器每毫秒对性能分析事件进行采样。

要了解有关 Python 分析选项和收集内容的更多信息,请参阅使用默认系统监控和使用不同的分析选项的自定义框架分析开始训练 Job.

的以下方法PythonProfileAnalysiscProfileAnalysisPyinstrumentAnalysis提供了类来获取和分析 Python 分析数据。每个函数都从默认 S3 URI 加载最新数据。

from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis

要设置 Python 分析对象以供分析,请使用 CPfileAnalysis 或 Python Analysis 类,如以下示例代码所示。它显示如何设置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(str) — 指定开始步骤和结束步骤以获取 Python 分析统计数据。

    • mode(str) — 使用PythonProfileModes枚举器类。默认为 PythonProfileModes.TRAIN。提供了可用选项,请参阅Python 分析的训练模式和阶段部分。

    • start_phase(str) — 使用StepPhase枚举器类。此参数允许在训练的不同阶段之间进行分析。默认为 StepPhase.STEP_START。提供了可用选项,请参阅Python 分析的训练模式和阶段部分。

    • end_phase(str) — 使用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()— 返回 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(挂钩关闭后进行分析)。