

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

# Python プロファイリング統計データにアクセスする
<a name="debugger-access-data-python-profiling"></a>

Python プロファイリングは、トレーニングスクリプトおよび SageMaker AI 深層学習フレームワークに含まれる Python 関数と演算子に関連するフレームワークメトリクスを提供します。

<a name="debugger-access-data-python-profiling-modes"></a>**Python プロファイリングのトレーニングモードとフェーズ**

トレーニング中に特定の間隔をプロファイリングして、これらの間隔ごとに統計を分割するために、デバッガーにはモードとフェーズを設定するツールが用意されています。

トレーニングモードには、次の `PythonProfileModes` クラスを使用します。

```
from smdebug.profiler.python_profile_utils import PythonProfileModes
```

このクラスでは、次のオプションを使用できます。
+ `PythonProfileModes.TRAIN` - トレーニングフェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.EVAL` - 評価フェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.PREDICT` - 予測フェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは TensorFlow にのみ使用できます。
+ `PythonProfileModes.GLOBAL` - 前の 3 つのフェーズを含むグローバルフェーズでターゲットステップをプロファイリングする場合に使用します。このモードオプションは PyTorch にのみ使用できます。
+ `PythonProfileModes.PRE_STEP_ZERO` - 最初のエポックの最初のトレーニングステップを開始する前に、初期化段階でターゲットステップをプロファイリングする場合に使用します。このフェーズには、最初のジョブ送信、EC2 インスタンスへのトレーニングスクリプトのアップロード、EC2 インスタンスの準備、入力データのダウンロードが含まれます。このモードオプションは、TensorFlow と PyTorch の両方に使用できます。
+ `PythonProfileModes.POST_HOOK_CLOSE` - トレーニングジョブが完了し、デバッガーフックが閉じられた後に、最終段階でターゲットステップをプロファイリングする場合に使用します。このフェーズには、トレーニングジョブがファイナライズし完了するまでのプロファイリングデータが含まれます。このモードオプションは、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` - ファイナライズ (ポストフッククローズ) フェーズの終了点を指定するために使用します。コールバックフックが閉じられていない場合、ファイナライズフェーズのプロファイリングは行われません。

**Python プロファイリング分析ツール**

デバッガーは、次の 2 つのプロファイリングツールで Python プロファイリングをサポートしています。
+ cProfile - 標準の Python プロファイラー。cProfile は、プロファイリングが有効な場合に、呼び出されたすべての関数について、CPU 時間に関するフレームワークメトリクスを収集します。
+ Pyinstrument - これは、ミリ秒ごとにプロファイリングイベントをサンプリングするオーバーヘッドの少ない Python プロファイラーです。

Python プロファイリングオプションと収集される内容の詳細については、「[デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズしたフレームワークプロファイリング](debugger-configure-framework-profiling-options.md)」を参照してください。

Python プロファイリングデータを取得して分析するために、`PythonProfileAnalysis`、`cProfileAnalysis`、`PyinstrumentAnalysis` クラスの次のメソッドが用意されています。各関数は、デフォルトの 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` (str) - Python プロファイリング統計データを取得するための開始ステップと終了ステップを指定します。
  + `mode` (str) - `PythonProfileModes` 列挙子クラスを使ってトレーニングジョブのモードを指定します。デフォルトは `PythonProfileModes.TRAIN` です。使用可能なオプションについては、「[Python プロファイリングのトレーニングモードとフェーズ](#debugger-access-data-python-profiling-modes)」セクションを参照してください。
  + `start_phase` (str) - `StepPhase` 列挙子クラスを使ってターゲットステップの開始フェーズを指定します。このパラメータを使うと、トレーニングの異なるフェーズ間のプロファイリングが可能になります。デフォルトは `StepPhase.STEP_START` です。使用可能なオプションについては、「[Python プロファイリングのトレーニングモードとフェーズ](#debugger-access-data-python-profiling-phases)」セクションを参照してください。
  + `end_phase` (str) - `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()` - Python プロファイリング統計の DataFrame を返します。各行には、プロファイリングの各インスタンスのメタデータと、対応する統計ファイル (ステップごとに 1 つ) が格納されています。
+ `python_analysis.list_available_node_ids()` - Python プロファイリング統計に使用可能なノード ID のリストを返します。

`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` (フックを閉じた後のプロファイリング) です。