Python プロファイリング統計データにアクセスする - Amazon SageMaker

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

Python プロファイリング統計データにアクセスする

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

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。

トレーニングトレーニングには、次の 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 プロファイリングオプションと収集される内容の詳細については、「デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズされたフレームワークプロファイリングを使ってトレーニングジョブを開始する」を参照してください。

Python プロファイリングデータを取得して分析するために、PythonProfileAnalysiscProfileAnalysisPyinstrumentAnalysis クラスの次のメソッドが用意されています。各関数は、デフォルトの 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 )

cProfileAnalysisPyinstrumentAnalysis クラスでは、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) - 開始ステップと終了ステップを受け取り、そのプロファイルされた stepstart_step <= step < end_step を満たすすべてのステップ統計の関数統計を返します。

    • start_step および end_step (str) - Python プロファイリング統計データを取得するための開始ステップと終了ステップを指定します。

    • mode (str) - PythonProfileModes 列挙子クラスを使ってトレーニングジョブのモードを指定します。デフォルトは PythonProfileModes.TRAIN です。使用可能なオプションについては、「Python プロファイリングのトレーニングモードとフェーズ」セクションを参照してください。

    • start_phase (str) - StepPhase 列挙子クラスを使ってターゲットステップの開始フェーズを指定します。このパラメータを使うと、トレーニングの異なるフェーズ間のプロファイリングが可能になります。デフォルトは StepPhase.STEP_START です。使用可能なオプションについては、「Python プロファイリングのトレーニングモードとフェーズ」セクションを参照してください。

    • end_phase (str) - StepPhase 列挙子クラスを使ってターゲットステップの終了フェーズを指定します。このパラメータは、トレーニングの終了フェーズを設定します。使用可能なオプションは、start_phase パラメータの場合と同じです。デフォルトは StepPhase.STEP_END です。使用可能なオプションについては、「Python プロファイリングのトレーニングモードとフェーズ」セクションを参照してください。

  • 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() – DataFramePython プロファイリング統計の を返します。各行には、プロファイリングの各インスタンスのメタデータと、対応する統計ファイル (ステップごとに 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 (フックを閉じた後のプロファイリング) です。