分析数据加载器
在 PyTorch 中,数据加载器迭代器(例如 SingleProcessingDataLoaderIter
和 MultiProcessingDataLoaderIter
)在对数据集的每次迭代开始时初始化。在初始化阶段,PyTorch 根据配置的工作线程数量启用工作线程进程,建立数据队列以提取数据和 pin_memory
线程。
要使用 PyTorch 数据加载器分析的分析工具,请导入以下 PT_dataloader_analysis
类:
from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis
将检索到的分析数据传递作为使用 Pandas 数据解析工具访问分析数据部分中的 Pandas 帧数据对象:
pt_analysis = PT_dataloader_analysis(pf)
pt_analysis
对象可以使用以下函数:
SMDebug S3SystemMetricsReader
类从 s3_trial_path
参数中指定的 S3 存储桶读取系统指标。
-
pt_analysis.analyze_dataloaderIter_initialization()
分析会输出这些初始化的中位数持续时间和最大持续时间。如果存在异常值(即持续时间大于 2 * 中位数持续时间),函数会输出这些持续时间的开始和结束时间。这些指标可用于检查这段时间间隔内的系统指标。
下面的列表显示了从此类方法可用的分析:
-
初始化了哪种类型的数据加载器迭代器。
-
每个迭代器的工作线程数量。
-
检查是否使用 pin_memory 初始化迭代器。
-
训练期间迭代器初始化的次数。
-
-
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=[".*"])
Debugger 收集所有 GetNext 调用的开始和结束时间。您可以查找训练脚本在一批数据上花费的时间。在指定的时间范围内,您可以识别对训练没有直接贡献的调用。这些调用可以来自以下操作:对准确性进行计算,为调试或日志记录目的添加损失,以及输出调试信息。此类操作可能是计算密集型或者非常耗时。我们可以通过关联 Python 探查器、系统指标和框架指标来识别此类操作。
下面的列表显示了从此类方法可用的分析:
-
通过查找当前与后续 GetNext 调用之间的开始时间之间的差异,来分析在每个数据批次上花费的时间
BatchTime_in_seconds
。 -
在
BatchTime_in_seconds
中查找异常值以及这些异常值的开始和结束时间。 -
获取在这些
BatchTime_in_seconds
时间戳期间的系统和框架指标。这说明了哪些步骤耗费时间。
-
-
pt_analysis.plot_the_window()
绘制在开始时间戳和结束时间戳之间的时间轴图表。