フレームワークプロファイリング用に設定する - Amazon SageMaker

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

フレームワークプロファイリング用に設定する

警告

Amazon SageMaker Profiler を優先して、 SageMakerデバッガーは TensorFlow 2.11 および PyTorch 2.0 以降のフレームワークプロファイリング機能を廃止します。以前のバージョンのフレームワークと SDK でも、次のようにこの機能を引き続き使用できます。

  • SageMaker Python SDK <= v2.130.0

  • PyTorch >= v1.6.0、< v2.0

  • TensorFlow >= v2.3.1、< v2.11

2023 年 3 月 16 日」も参照してください。

デバッガーフレームワークプロファイリングを有効にするには、推定器を構築するときに framework_profile_params パラメータを設定します。デバッガーフレームワークプロファイリングは、初期化段階のデータ、データローダープロセス、深層学習フレームワークとトレーニングスクリプトの Python 演算子、ステップ内およびステップ間の詳細なプロファイリングなどのフレームワークメトリクスを、cProfile または Pyinstrument オプションを使って収集します。FrameworkProfile クラスを使用すると、カスタムフレームワークのプロファイリングオプションを設定できます。

注記

デバッガーフレームワークのプロファイリングを始める前に、モデルの構築に使用されるフレームワークがフレームワークプロファイリングのためにデバッガーでサポートされていることを確認してください。詳細については、「サポート対象のアルゴリズムとフレームワーク」を参照してください。

デバッガーは、フレームワークメトリクスをデフォルトの S3 バケットに保存します。デフォルトの S3 バケット URI の形式は、s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/ です。

デフォルトのフレームワークプロファイリングを使ってトレーニングジョブを開始する

次のサンプルコードは、デフォルトのシステムモニタリングとデフォルトのフレームワークプロファイリングを開始するための最も簡単な profiler_config パラメータ設定です。次のサンプルコードの FrameworkProfile クラスは、トレーニングジョブの開始時にデフォルトのフレームワークプロファイリングを開始します。デバッガーフレームワークプロファイリングには、詳細なプロファイリング、データローダープロファイリング、 Python プロファイリングのオプションがあります。

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )

この profiler_config パラメータ設定を使用して、デバッガーはモニタリングとプロファイリングのデフォルト設定を呼び出します。デバッガーは 500 ミリ秒ごとにシステムメトリクスをモニタリングし、5 番目のステップを詳細なプロファイリングオプションで、7 番目のステップをデータローダープロファイリングオプションで、9、10、11 番目のステップを Python プロファイリングオプションでプロファイリングします。

使用可能なプロファイリング設定オプション、デフォルトのパラメータ設定、および設定方法の例については、Amazon Python SDK のデフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズされたフレームワークプロファイリングを使ってトレーニングジョブを開始する「」およびSageMaker 「デバッガー APIs FrameworkProfile」を参照してください。 SageMaker

システムモニタリング間隔を変更し、デフォルトのフレームワークプロファイリングを有効にするには、framework_profile_params パラメータを使用して system_monitor_interval_millis パラメータを明示的に指定できます。例えば、1000 ミリ秒ごとにモニタリングし、デフォルトのフレームワークプロファイリングを有効にするには、次のサンプルコードを使用します。

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile() )

FrameworkProfile クラスの詳細については、Amazon SageMaker Python SDK SageMaker のAPIs – FrameworkProfile 」を参照してください。

デフォルトのシステムモニタリングとターゲットステップまたはターゲット時間範囲に対するカスタマイズされたフレームワークプロファイリングを使ってトレーニングジョブを開始する

トレーニングジョブをプロファイリングするためにターゲットステップまたはターゲット時間間隔を指定する場合は、FrameworkProfile クラスのパラメータを指定する必要があります。次のコード例は、システムモニタリングと共にプロファイリングのターゲット範囲を指定する方法を示しています。

  • ターゲットステップ範囲の場合

    次の設定例では、デバッガーはトレーニングジョブ全体を 500 ミリ秒ごとにモニタリングし (デフォルトのモニタリング)、ステップ 5 からステップ 15 まで (10 ステップ分) のターゲットステップ範囲をプロファイリングします。

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )

    次の設定例では、デバッガーはトレーニングジョブ全体を 1000 ミリ秒ごとにモニタリングし、ステップ 5 からステップ 15 まで (10 ステップ分) のターゲットステップ範囲をプロファイリングします。

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )
  • ターゲット時間範囲の場合

    次の設定例では、デバッガーはトレーニングジョブ全体を 500 ミリ秒ごとにモニタリングし (デフォルトのモニタリング)、現在の Unix 時間から 600 秒間のターゲット時間範囲をプロファイリングします。

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    次の設定例では、デバッガーはトレーニングジョブ全体を 1000 ミリ秒ごとにモニタリングし、現在の Unix 時間から 600 秒間のターゲット時間範囲をプロファイリングします。

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    フレームワークプロファイリングは、ターゲットステップまたは時間範囲のすべてのプロファイリングオプションに対して実行されます。

    使用可能なプロファイリングオプションの詳細については、Amazon SageMaker Python SDK SageMaker のAPIs – FrameworkProfile 」を参照してください。

    次のセクションでは、使用可能なプロファイリングオプションをスクリプト化する方法を示します。

デフォルトのシステムモニタリングとさまざまなプロファイリングオプションでカスタマイズされたフレームワークプロファイリングを使ってトレーニングジョブを開始する

次のプロファイリング設定クラスを使って、フレームワークのプロファイリングオプションを管理できます。

  • DetailedProfilingConfig – ネイティブフレームワークプロファイラー (プロファイラーとTensorFlow プロファイラー) を使用してフレームワークオペレーションをプロ PyTorch ファイリングするターゲットステップまたは時間範囲を指定します。例えば、 を使用する場合 TensorFlow、デバッガーフックは TensorFlow プロファイラーが TensorFlow固有のフレームワークメトリクスを収集できるようにします。詳細なプロファイリングによって、トレーニングジョブのステップの前 (最初のステップの前)、ステップ内、ステップ間で、すべてのフレームワーク演算子をプロファイリングできます。

    注記

    詳細なプロファイリングにより、GPU メモリ消費量が大幅に増加する場合があります。詳細なプロファイリングを数ステップ以上で有効にすることはお勧めしません。

  • DataloaderProfilingConfig – 深層学習フレームワークのデータローダープロセスをプロファイリングするためのターゲットステップまたは時間範囲を指定します。デバッガーは、フレームワークのすべてのデータローダーイベントを収集します。

    注記

    データローダープロファイリングは、データローダーから情報を収集する間、トレーニングパフォーマンスを低下させる場合があります。データローダープロファイリングを数ステップ以上で有効にすることはお勧めしません。

    デバッガーは、 AWS Deep Learning Containers に対してのみ、データローダープロセスに注釈を付けるように事前設定されています。デバッガーは、他のカスタムまたは外部トレーニングコンテナからのデータローダープロセスをプロファイリングできません。

  • PythonProfilingConfig – Python 関数をプロファイリングするためのターゲットステップまたは時間範囲を指定します。また、cProfile と Pyinstrument という 2 つの Python プロファイラーから選択することもできます。

    • cProfile - 標準の Python プロファイラー。cProfile は、トレーニング中に呼び出されたすべての Python 演算子の情報を収集します。cProfile を使うと、デバッガーは各関数呼び出しに対する累積の時間とアノテーションを節約して、Python 関数に関する完全な詳細情報を提供できます。例えば、深層学習では、最も頻繁に呼び出される関数は、畳み込みフィルターとバックワードパス演算子と考えられますが、cProfile はそれらすべてをプロファイリングします。cProfile オプションでは、合計時間、CPU 時間、オフ CPU 時間といったタイマーオプションをさらに選択できます。プロセッサ (CPU と GPU の両方) で実行されるすべての関数呼び出しを CPU 時間内にプロファイリングできますが、オフ CPU 時間オプションを使って I/O またはネットワークのボトルネックを特定することもできます。デフォルトは合計時間で、デバッガーは CPU 時間とオフ CPU 時間の両方をプロファイリングします。cProfile を使うと、プロファイルデータを分析するときに、すべての関数にドリルダウンできます。

    • Pyinstrument - Pyinstrument は、サンプリングに基づいて動作するオーバーヘッドの低い Python プロファイラーです。Pyinstrument オプションを使うと、デバッガーはプロファイリングイベントをミリ秒ごとにサンプリングします。Pyinstrument は CPU 時間ではなく実際の経過時間を測定するため、プロファイリングノイズを減らし (累積的に速くなる無関係な関数呼び出しを除外し)、モデルをトレーニングするために実際にコンピューティング集約型である (累積的に遅くなる) 演算子をキャプチャするには、cProfile オプションよりも Pyinstrument オプションが適しています。Pyinstrument を使うと、関数呼び出しのツリーが見え、速度低下の構造と根本原因をよりよく理解できます。

    注記

    Python プロファイリングを有効にすると、全体的なトレーニング時間が遅くなる場合があります。cProfile は、呼び出しのたびに最も頻繁に呼び出される Python 演算子をプロファイリングするため、呼び出し数に対してプロファイリングの処理時間が増加します。Pyinstrument の場合、サンプリングメカニズムにより、時間に対して累積プロファイリング時間が増えます。

次の設定例では、指定した値でさまざまなプロファイリングオプションを使用した場合の完全な構造を示しています。

import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig, PythonProfiler, cProfileTimer) profiler_config=ProfilerConfig( system_monitor_interval_millis=500, framework_profile_params=FrameworkProfile( detailed_profiling_config=DetailedProfilingConfig( start_step=5, num_steps=1 ), dataloader_profiling_config=DataloaderProfilingConfig( start_step=7, num_steps=1 ), python_profiling_config=PythonProfilingConfig( start_step=9, num_steps=1, python_profiler=PythonProfiler.CPROFILE, cprofile_timer=cProfileTimer.TOTAL_TIME ) ) )

使用可能なプロファイリングオプションの詳細については、Amazon SageMaker Python SDK DetailedProfilingのDataloaderProfiling「Config 」、「Config 」、およびPythonProfiling「Config」を参照してください。