访问 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 性能分析选项和收集的内容的详细信息,请参阅使用默认系统监视和具有不同性能分析选项的自定义框架分析启动培训作业.

以下方法PythonProfileAnalysiscProfileAnalysisPyinstrumentAnalysis类用于获取和分析 Python 分析数据。每个函数从默认 S3 URI 加载最新数据。

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

要设置用于分析的 Python 性能分析对象,请使用 CProfileFile Analyst 或 PyProducts Analyst 类,如以下示例代码所示。它显示如何设置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(挂钩关闭后分析)。