

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

# 分析数据加载器
<a name="debugger-data-loading-time"></a>

在中 PyTorch，数据加载器迭代器（例如`SingleProcessingDataLoaderIter`和`MultiProcessingDataLoaderIter`）是在数据集的每次迭代开始时启动的。在初始化阶段，根据配置的工作器数量 PyTorch 打开工作进程，建立数据队列以获取数据和`pin_memory`线程。

要使用 PyTorch 数据加载器分析工具，请导入以下`PT_dataloader_analysis`类：

```
from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis
```

将检索到的分析数据传递作为[使用 Pandas 数据解析工具访问分析数据](debugger-access-data-profiling-pandas-frame.md)部分中的 Pandas 帧数据对象：

```
pt_analysis = PT_dataloader_analysis(pf)
```

`pt_analysis` 对象可以使用以下函数：

该 SMDebug `S3SystemMetricsReader`类从为`s3_trial_path`参数指定的 S3 存储桶中读取系统指标。
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  分析会输出这些初始化的中位数持续时间和最大持续时间。如果存在异常值（即持续时间大于 2 \$1 中位数持续时间），函数会输出这些持续时间的开始和结束时间。这些指标可用于检查这段时间间隔内的系统指标。

  下面的列表显示了从此类方法可用的分析：
  + 初始化了哪种类型的数据加载器迭代器。
  + 每个迭代器的工作线程数量。
  + 检查是否使用 pin\$1memory 初始化迭代器。
  + 训练期间迭代器初始化的次数。
+ `pt_analysis.analyze_dataloaderWorkers()`

  下面的列表显示了从此类方法可用的分析：
  + 在整个训练期间分拆的工作线程进程的数量。
  + 工作线程进程的中位数持续时间和最长持续时间。
  + 有异常值的工作线程进程的开始和结束时间。
+ `pt_analysis.analyze_dataloader_getnext()`

  下面的列表显示了从此类方法可用的分析：
  + 训练期间 GetNext 拨打的电话数量。
  +  GetNext 呼叫的中位数和最大时长（以微秒为单位）。
  + 异常值 GetNext呼叫持续时间的开始时间、结束时间、持续时间和工作人员 ID。
+ `pt_analysis.analyze_batchtime(start_timestamp, end_timestamp, select_events=[".*"], select_dimensions=[".*"])`

  调试器收集所有 GetNext 呼叫的开始和结束时间。您可以查找训练脚本在一批数据上花费的时间。在指定的时间范围内，您可以识别对训练没有直接贡献的调用。这些调用可以来自以下操作：对准确性进行计算，为调试或日志记录目的添加损失，以及输出调试信息。此类操作可能是计算密集型或者非常耗时。我们可以通过关联 Python 探查器、系统指标和框架指标来识别此类操作。

  下面的列表显示了从此类方法可用的分析：
  + 通过查找当前调用和后续 GetNext 调用的开始时间之间的差异`BatchTime_in_seconds`，来分析在每个数据批次上花费的时间。
  + 在 `BatchTime_in_seconds` 中查找异常值以及这些异常值的开始和结束时间。
  + 获取在这些 `BatchTime_in_seconds` 时间戳期间的系统和框架指标。这说明了哪些步骤耗费时间。
+ `pt_analysis.plot_the_window()`

  绘制在开始时间戳和结束时间戳之间的时间轴图表。