

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 效能分析資料載入器
<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 框架資料物件傳遞到[使用 Pandas 資料剖析工具存取分析資料](debugger-access-data-profiling-pandas-frame.md) 區段中：

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

`pt_analysis` 物件可使用下列函式：

SMDebug `S3SystemMetricsReader` 類別會從指定給 `s3_trial_path` 參數的 S3 儲存貯體讀取系統指標。
+ `pt_analysis.analyze_dataloaderIter_initialization()`

  分析會輸出這些初始化的中間值和最長持續時間。如果有極端值 (即持續時間大於中間值 2 倍)，該函式將列印這些持續時間的開始和結束時間。可用於在這些時間間隔內檢查系統指標。

  下面的清單顯示此類別的方法可用於哪種分析：
  + 哪種類型的資料載入迭代器被初始化。
  + 每個迭代器的工作者數量。
  + 檢查迭代器的初始化有無 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()`

  繪製開始時間戳記與結束時間戳記之間的時間軸圖表。