

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データローダーをプロファイリングする
<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 呼び出しの開始時刻と終了時刻を収集します。トレーニングスクリプトが費やした時間を 1 つのバッチのデータで確認できます。指定した時間枠内で、トレーニングに直接貢献していない呼び出しを特定できます。これらの呼び出しは、精度の計算、デバッグやログ目的の損失の追加、デバッグ情報の出力などのオペレーションによるものである可能性があります。このようなオペレーションは、コンピューティング集約型であったり、時間がかかったりすることがあります。Python プロファイラー、システムメトリクス、フレームワークメトリクスを関連付けることで、このようなオペレーションを特定できます。

  次のリストは、このクラスメソッドからどのような分析が得られるかを示しています。
  + 各データバッチに費やされた時間 `BatchTime_in_seconds` を、現在の GetNext 呼び出しと後続の GetNext 呼び出しの開始時刻の差を求めることでプロファイリングします。
  + `BatchTime_in_seconds` の外れ値と、その外れ値の開始時刻と終了時刻を見つけます。
  + それらの `BatchTime_in_seconds` タイムスタンプ間のシステムおよびフレームワークのメトリクスを取得します。これにより、どこに時間が費やされたかがわかります。
+ `pt_analysis.plot_the_window()`

  開始タイムスタンプと終了タイムスタンプの間のタイムライングラフをプロットします。