

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

# 访问 Python 分析统计数据
<a name="debugger-access-data-python-profiling"></a>

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

<a name="debugger-access-data-python-profiling-modes"></a>**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。

<a name="debugger-access-data-python-profiling-phases"></a>对于训练阶段，请使用以下 `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 分析选项和所收集数据的更多信息，请参阅[提供不同剖析选项的默认系统监控和自定义框架剖析](debugger-configure-framework-profiling-options.md)。

系统提供了 `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 分析的训练模式和阶段](#debugger-access-data-python-profiling-modes)部分中提供了可用选项。
  + `start_phase`（字符串）– 使用 `StepPhase` 枚举器类指定目标步骤中的起始阶段。此参数允许在训练的不同阶段之间进行分析。默认值为 `StepPhase.STEP_START`。[Python 分析的训练模式和阶段](#debugger-access-data-python-profiling-phases)部分中提供了可用选项。
  + `end_phase`（字符串）– 使用 `StepPhase` 枚举器类指定目标步骤中的结束阶段。此参数设置训练的结束阶段。可用选项与可用于 `start_phase` 参数的选项相同。默认值为 `StepPhase.STEP_END`。[Python 分析的训练模式和阶段](#debugger-access-data-python-profiling-phases)部分中提供了可用选项。
+ `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`（钩子关闭后进行分析）。