SageMaker Profiler を使用してトレーニングジョブを準備して実行する - Amazon SageMaker

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

SageMaker Profiler を使用してトレーニングジョブを準備して実行する

SageMaker Profiler を使用してトレーニングジョブを実行するように を設定する手順には、トレーニングスクリプトの適応と SageMaker トレーニングジョブランチャーの設定の 2 つのステップがあります。

ステップ 1: SageMaker Profiler Python モジュールを使用してトレーニングスクリプトを適応させる

トレーニングジョブの実行GPUs中に で実行されるカーネルのキャプチャを開始するには、 SageMaker Profiler Python モジュールを使用してトレーニングスクリプトを変更します。ライブラリをインポートし、start_profiling()stop_profiling() メソッドを追加して、プロファイリングの開始と終了を定義します。オプションのカスタム注釈を使用してトレーニングスクリプトにマーカーを追加し、各ステップの特定のオペレーション中のハードウェアアクティビティを視覚化することもできます。

アノテーターは からオペレーションを抽出することに注意してくださいGPUs。でのプロファイリングオペレーションではCPUs、注釈を追加する必要はありません。CPU プロファイリングは、 で練習するプロファイリング設定を指定するときにもアクティブ化されますステップ 2: SageMaker フレームワーク推定器を作成し、 SageMaker Profiler をアクティブ化する

注記

トレーニングジョブ全体をプロファイリングすることが、リソースの最も効率的な使い方ではありません。トレーニングジョブの最大 300 ステップをプロファイリングすることをお勧めします。

重要

のリリースには、重大な変更2023 年 12 月 14 日が含まれます。 SageMaker Profiler Python パッケージ名が から smppy に変更されましたsmprof。これは、 TensorFlow v2.12 以降のSageMaker フレームワークコンテナで有効です。

TensorFlow v2.11.0 などの以前のバージョンのSageMaker フレームワークコンテナのいずれかを使用する場合、 SageMaker Profiler Python パッケージは引き続き として使用できますsmppy。使用するバージョンまたはパッケージ名が不明な場合は、 SageMaker Profiler パッケージのインポートステートメントを次のコードスニペットに置き換えます。

try: import smprof except ImportError: # backward-compatability for TF 2.11 and PT 1.13.1 images import smppy as smprof

アプローチ 1. コンテキストマネージャー smprof.annotate を使用して関数全体に注釈を付けます。

フル関数はsmprof.annotate()コンテキストマネージャーでラップできます。このラッパーは、コード行ではなく関数別にプロファイリングする場合に推奨されます。次のスクリプト例では、各イテレーションでトレーニングループと関数全体をラップするコンテキストマネージャーの実装方法を示しています。

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): with smprof.annotate("step_"+str(i)): inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() with smprof.annotate("Forward"): outputs = net(inputs) with smprof.annotate("Loss"): loss = criterion(outputs, labels) with smprof.annotate("Backward"): loss.backward() with smprof.annotate("Optimizer"): optimizer.step() SMProf.stop_profiling()

アプローチ 2. smprof.annotation_begin()smprof.annotation_end() を使用して、関数内の特定のコード行に注釈を付けます。

特定のコード行をプロファイリングする注釈を定義することもできます。プロファイリングの正確な開始点と終了点は、関数ごとではなく、個々のコード行のレベルで設定できます。例えば、次のスクリプトでは、step_annotator は各イテレーションの開始時に定義され、イテレーションの終了時に終了します。一方、オペレーションごとに他の詳細な注釈が定義され、各イテレーションを通じて対象となるオペレーションをラップしています。

import smprof SMProf = smprof.SMProfiler.instance() config = smprof.Config() config.profiler = { "EnableCuda": "1", } SMProf.configure(config) SMProf.start_profiling() for epoch in range(args.epochs): if world_size > 1: sampler.set_epoch(epoch) tstart = time.perf_counter() for i, data in enumerate(trainloader, 0): step_annotator = smprof.annotation_begin("step_" + str(i)) inputs, labels = data inputs = inputs.to("cuda", non_blocking=True) labels = labels.to("cuda", non_blocking=True) optimizer.zero_grad() forward_annotator = smprof.annotation_begin("Forward") outputs = net(inputs) smprof.annotation_end(forward_annotator) loss_annotator = smprof.annotation_begin("Loss") loss = criterion(outputs, labels) smprof.annotation_end(loss_annotator) backward_annotator = smprof.annotation_begin("Backward") loss.backward() smprof.annotation_end(backward_annotator) optimizer_annotator = smprof.annotation_begin("Optimizer") optimizer.step() smprof.annotation_end(optimizer_annotator) smprof.annotation_end(step_annotator) SMProf.stop_profiling()

プロファイラー開始モジュールに注釈を付けて設定したら、次のステップ 2 で SageMaker トレーニングジョブランチャーを使用して送信するスクリプトを保存します。サンプルランチャーでは、トレーニングスクリプトの名前が train_with_profiler_demo.py であることを想定しています。

ステップ 2: SageMaker フレームワーク推定器を作成し、 SageMaker Profiler をアクティブ化する

次の手順は、 SageMaker Python を使用してトレーニング用の SageMaker フレームワーク推定器を準備する方法を示していますSDK。

  1. 次のように、ProfilerConfig モジュールと Profiler モジュールを使用して profiler_config オブジェクトを設定します。

    from sagemaker import ProfilerConfig, Profiler profiler_config = ProfilerConfig( profile_params = Profiler(cpu_profiling_duration=3600) )

    以下は Profiler モジュールとその引数の説明です。

    • Profiler: トレーニングジョブで SageMaker Profiler をアクティブ化するためのモジュール。

      • cpu_profiling_duration (int): でプロファイリングする時間を秒単位で指定しますCPUs。デフォルトは 3600 秒です。

  2. 前のステップで作成したprofiler_configオブジェクトを使用して SageMaker フレームワーク推定器を作成します。次のコードは、 PyTorch 推定器を作成する例を示しています。 TensorFlow 推定器を作成する場合は、sagemaker.tensorflow.TensorFlow代わりに をインポートし、 SageMaker Profiler でサポートされているTensorFlowバージョンのいずれかを指定します。サポートされているフレームワークとインスタンスタイプの詳細については、「SageMaker SageMaker Profiler がプリインストールされたフレームワークイメージ」を参照してください。

    import sagemaker from sagemaker.pytorch import PyTorch estimator = PyTorch( framework_version="2.0.0", role=sagemaker.get_execution_role(), entry_point="train_with_profiler_demo.py", # your training job entry point source_dir=source_dir, # source directory for your training script output_path=output_path, base_job_name="sagemaker-profiler-demo", hyperparameters=hyperparameters, # if any instance_count=1, # Recommended to test with < 8 instance_type=ml.p4d.24xlarge, profiler_config=profiler_config )
  3. fit メソッドを実行してトレーニングジョブを開始します。wait=False を使用すると、トレーニングジョブのログを消音し、バックグラウンドで実行させることができます。

    estimator.fit(wait=False)

トレーニングジョブの実行中またはジョブの完了後に、 SageMaker Profiler UI アプリケーションを開く にある次のトピックに進み、保存したプロファイルの調査と視覚化を開始できます。

Amazon S3 バケットに保存されているプロファイルデータに直接アクセスする場合は、次のスクリプトを使用して S3 を取得しますURI。

import os # This is an ad-hoc function to get the S3 URI # to where the profile output data is saved def get_detailed_profiler_output_uri(estimator): config_name = None for processing in estimator.profiler_rule_configs: params = processing.get("RuleParameters", dict()) rule = config_name = params.get("rule_to_invoke", "") if rule == "DetailedProfilerProcessing": config_name = processing.get("RuleConfigurationName") break return os.path.join( estimator.output_path, estimator.latest_training_job.name, "rule-output", config_name, ) print( f"Profiler output S3 bucket: ", get_detailed_profiler_output_uri(estimator) )

(オプション) SageMaker Profiler Python パッケージをインストールする

SageMaker Profiler を にリストされていない PyTorch イメージや TensorFlow フレームワークイメージSageMaker SageMaker Profiler がプリインストールされたフレームワークイメージ、またはトレーニング用の独自のカスタム Docker コンテナで使用するには、 のいずれかを使用して SageMaker Profiler をインストールしますSageMaker Profiler Python パッケージバイナリファイル

オプション 1: トレーニングジョブの起動中に SageMaker Profiler パッケージをインストールする

PyTorch または にリストされていない TensorFlow イメージを使用してジョブをトレーニングするために SageMaker Profiler を使用する場合はSageMaker SageMaker Profiler がプリインストールされたフレームワークイメージrequirements.txtファイルを作成し、ステップ 2 で SageMaker フレームワーク推定器の source_dirパラメータに指定したパスの下に配置します。requirements.txt ファイルの設定全般の詳細については、SageMaker Python SDKドキュメント「サードパーティーライブラリの使用」を参照してください。requirements.txt ファイルで、 の S3 バケットパスのいずれかを追加しますSageMaker Profiler Python パッケージバイナリファイル

# requirements.txt https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

オプション 2: カスタム Docker コンテナに SageMaker Profiler パッケージをインストールする

トレーニングにカスタム Docker コンテナを使用する場合は、Dockerfile SageMaker Profiler Python パッケージバイナリファイルに のいずれかを追加します。

# Install the smprof package version compatible with your CUDA version RUN pip install https://smppy.s3.amazonaws.com/tensorflow/cu112/smprof-0.3.332-cp39-cp39-linux_x86_64.whl

でトレーニングするためのカスタム Docker コンテナの実行に関する SageMaker 一般的なガイダンスについては、「独自のトレーニングコンテナの適応」を参照してください。