Amazon SageMaker Profiler を使用して AWS コンピューティングリソースのアクティビティをプロファイリングする - Amazon SageMaker

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

Amazon SageMaker Profiler を使用して AWS コンピューティングリソースのアクティビティをプロファイリングする

Amazon SageMaker Profiler は現在プレビューリリース中で、サポートされている で無料で利用できます AWS リージョン。Amazon SageMaker Profiler の一般提供バージョン (存在する場合) には、プレビューで提供される機能と料金とは異なる機能が含まれる場合があります。

Amazon SageMaker Profiler は、 SageMaker での深層学習モデルのトレーニング中にプロビジョニングされたコンピューティングリソースの詳細 AWS ビューを提供する Amazon の一機能です SageMaker。CPU と GPUの使用状況のプロファイリング、 でのカーネル実行GPUs、 CPUsと でのカーネル起動、CPUs同期オペレーションGPUs、カーネル起動と対応する実行の間のレイテンシー、 CPUsと 間のデータ転送に重点を置いていますGPUs。 SageMaker Profiler は、プロファイル を視覚化するユーザーインターフェイス (UI)、プロファイリングされたイベントの統計概要、および GPUsと 間のイベントの時間関係を追跡および理解するためのトレーニングジョブのタイムラインも提供しますCPUs。

注記

SageMaker Profiler は PyTorch と をサポート TensorFlow しており、 AWS の Deep Learning Containers SageMakerで利用できます。詳細については、「サポートされているフレームワークイメージ AWS リージョン、およびインスタンスタイプ」を参照してください。

データサイエンティスト向け

大規模なコンピューティングクラスターで深層学習モデルをトレーニングすると、ボトルネック、カーネル起動レイテンシー、メモリ制限、リソース使用率の低下など、計算最適化の問題が発生することがよくあります。

このような計算パフォーマンスの問題を特定するには、コンピューティングリソースを詳細に分析して、どのカーネルがレイテンシーを発生させ、どのオペレーションがボトルネックの原因となっているかを理解する必要があります。データサイエンティストは、 SageMaker Profiler UI を使用してトレーニングジョブの詳細なプロファイルを視覚化することでメリットを得ることができます。UI は、要約グラフとコンピューティングリソース上のすべてのイベントを追跡するためのタイムラインインターフェースを備えたダッシュボードを提供します。データサイエンティストは、 SageMaker Profiler Python モジュールを使用してトレーニングジョブの特定の部分を追跡するためのカスタム注釈を追加することもできます。

管理者向け

SageMaker コンソールまたはSageMaker ドメイン の Profiler ランディングページから、 AWS アカウントまたは SageMakerドメインの管理者であれば Profiler アプリケーションユーザーを管理できます。各ドメインユーザーは、付与されたアクセス許可があれば、独自の Profiler アプリケーションにアクセスできます。 SageMaker ドメイン管理者およびドメインユーザーは、アクセス許可レベルに応じて Profiler アプリケーションを作成および削除できます。

サポートされているフレームワークイメージ AWS リージョン、およびインスタンスタイプ

この機能では、次の機械学習フレームワークと AWS リージョンをサポートしています。

注記

この機能を使用するには、 SageMaker Python のバージョン 2.180.0 以上SDKがインストールされていることを確認してください。

SageMaker SageMaker Profiler がプリインストールされたフレームワークイメージ

SageMaker Profiler は、次の AWS の Deep Learning Containers SageMakerにプリインストールされています。

PyTorch イメージ

PyTorch バージョン AWS DLC イメージ URI
2.2.0

763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker

2.1.0

763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker

2.0.1

763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker

763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu121-ubuntu20.04-sagemaker

1.13.1

763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker

TensorFlow イメージ

TensorFlow バージョン AWS DLC イメージ URI
2.13.0

763104351884.dkr.ecr。<region>.amazonaws.com/tensorflow-training:2.13.0-gpu-py310-cu118-ubuntu20.04-sagemaker

2.12.0

763104351884.dkr.ecr。<region>.amazonaws.com/tensorflow-training:2.12.0-gpu-py310-cu118-ubuntu20.04-sagemaker

2.11.0

763104351884.dkr.ecr。<region>.amazonaws.com/tensorflow-training:2.11.0-gpu-py39-cu112-ubuntu20.04-sagemaker

重要

上記の表のフレームワークコンテナの配布とメンテナンスは、 AWS Deep Learning Containers サービスによって管理されるフレームワークサポートポリシーの下にあります。サポートされなくなった以前のフレームワークバージョンを使用している場合は、現在サポートされているフレームワークバージョン にアップグレードすることを強くお勧めします。

注記

SageMaker Profiler を他のフレームワークイメージまたは独自の Docker イメージに使用する場合は、次のセクションで提供される SageMaker Profiler Python パッケージバイナリファイルを使用して SageMaker Profiler をインストールできます。

SageMaker Profiler Python パッケージバイナリファイル

独自の Docker コンテナを設定する場合、 SageMaker PyTorch および 用の他の構築済みコンテナで Profiler を使用する場合 TensorFlow、または SageMaker Profiler Python パッケージをローカルにインストールする場合は、次のいずれかのバイナリファイルを使用します。環境内の Python とCUDAバージョンに応じて、次のいずれかを選択します。

PyTorch

TensorFlow

バイナリファイルを使用して SageMaker Profiler をインストールする方法の詳細については、「」を参照してください(オプション) SageMaker Profiler Python パッケージをインストールする

サポート対象 AWS リージョン

SageMaker Profiler は、次の で使用できます AWS リージョン。

  • 米国東部 (バージニア北部) (us-east-1)

  • 米国東部 (オハイオ) (us-east-2)

  • 米国西部 (オレゴン) (us-west-2)

  • 欧州 (フランクフルト) (eu-central-1)

  • 欧州 (アイルランド) (eu-west-1)

サポートされるインスタンスタイプ

SageMaker Profiler は、次のインスタンスタイプでトレーニングジョブのプロファイリングをサポートしています。

CPU とGPUプロファイリング

  • ml.g4dn.12xlarge

  • ml.g5.24xlarge

  • ml.g5.48xlarge

  • ml.p3dn.24xlarge

  • ml.p4de.24xlarge

  • ml.p4d.24xlarge

  • ml.p5.48xlarge

GPU プロファイリングのみ

  • ml.g5.2xlarge

  • ml.g5.4xlarge

  • ml.g5.8xlarge

  • ml.g5.16.xlarge

前提条件

次のリストは、 SageMaker Profiler の使用を開始するための前提条件を示しています。

  • VPC AWS アカウントの Amazon でセットアップされた SageMaker ドメイン。

    ドメインの設定手順については、「クイックセットアップを使用して Amazon SageMaker ドメインにオンボードする」を参照してください。また、Profiler UI アプリケーションにアクセスするには、個々のユーザーのドメインユーザープロファイルを追加する必要があります。詳細については、 SageMaker 「ドメインユーザープロファイルの追加と削除」を参照してください。

  • 以下のリストは、Profiler UI アプリケーションを使用するための最小アクセス許可セットです。

    • sagemaker:CreateApp

    • sagemaker:DeleteApp

    • sagemaker:DescribeTrainingJob

    • sagemaker:Search

    • s3:GetObject

    • s3:ListBucket

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 コンテナを使用する場合は、 のいずれかSageMaker Profiler Python パッケージバイナリファイルを Dockerfile に追加します。

# 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

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

SageMaker Profiler UI アプリケーションを開く

SageMaker Profiler UI アプリケーションには、次のオプションを使用してアクセスできます。

オプション 1: ドメインの詳細ページから SageMaker Profiler UI を起動する

SageMaker コンソールにアクセスできる場合は、このオプションを使用できます。

ドメインの詳細ページに移動する

次の手順は、ドメインの詳細ページに移動する方法を示しています。

  1. で Amazon SageMaker コンソールを開きますhttps://console.aws.amazon.com/sagemaker/

  2. 左側のナビゲーションペインで、ドメイン を選択します。

  3. ドメインのリストから、 SageMaker Profiler アプリケーションを起動するドメインを選択します。

SageMaker Profiler UI アプリケーションを起動する

次の手順は、ユーザープロファイルを対象とする SageMaker Profiler アプリケーションを起動する方法を示しています。

  1. ドメインの詳細ページで、ユーザープロファイルタブを選択します。

  2. SageMaker Profiler UI アプリケーションを起動するユーザープロファイルを特定します。

  3. 選択したユーザープロファイルの [起動] を選択し、[Profiler] を選択します。

オプション 2: コンソールの SageMaker Profiler ランディングページから SageMaker Profiler UI アプリケーションを起動する SageMaker

次の手順では、コンソールの SageMaker Profiler ランディングページから SageMaker Profiler UI アプリケーションを起動する方法について説明します SageMaker 。コンソール SageMakerにアクセスできる場合は、このオプションを使用できます。

  1. で Amazon SageMaker コンソールを開きますhttps://console.aws.amazon.com/sagemaker/

  2. 左側のナビゲーションペインで、[Profiler] を選択します。

  3. 開始方法 で、Studio Classic アプリケーションを起動するドメインを選択します。ユーザープロファイルが 1 つのドメインにのみ属している場合、ドメインを選択するオプションは表示されません。

  4. SageMaker Profiler UI アプリケーションを起動するユーザープロファイルを選択します。ドメインにユーザープロファイルがない場合は、ユーザープロファイルの作成 を選択します。新しいユーザープロファイルの作成の詳細は、「ユーザープロファイルの追加と削除」を参照してください。

  5. [Profiler を開く] を選択します。

オプション 3: SageMaker Python でアプリケーションランチャー関数を使用する SDK

SageMaker ドメインユーザーで SageMaker Studio にのみアクセスできる場合は、 sagemaker.interactive_apps.detail_profiler_app.DetailProfilerApp関数を実行して SageMaker Studio Classic から SageMaker Profiler UI アプリケーションにアクセスできます。

SageMaker Studio Classic は re:Invent 2023 以前の Studio UI エクスペリエンスであり、re:Invent 2023 に新しく設計された Studio UI にアプリケーションとして移行されることに注意してください。 SageMaker Profiler UI アプリケーションは SageMaker ドメインレベルで利用できるため、ドメイン ID とユーザープロファイル名が必要です。現在、このDetailedProfilerApp関数は SageMaker Studio Classic アプリケーション内でのみ機能します。この関数は SageMaker Studio Classic からドメインとユーザープロファイル情報を適切に取得します。

re:Invent 2023 より前に作成されたドメイン、ドメインユーザー、および Studio の場合、「Amazon Studio Classic からの移行」の手順に従って更新しない限り、 SageMaker Studio Classic がデフォルトのエクスペリエンスになります。この場合、これ以上のアクションは必要なく、DetailProfilerApp関数を実行して SageMaker Profiler UI アプリケーションを直接起動できます。

re:Invent 2023 後に新しいドメインと Studio を作成した場合は、Studio UI 内で Studio Classic アプリケーションを起動し、 DetailProfilerApp関数を実行して SageMaker Profiler UI アプリケーションを起動します。

このDetailedProfilerApp関数は、 SageMaker Studio JupyterLab アプリケーションIDEs、Studio SageMaker Code Editor アプリケーション、 SageMaker ノートブックインスタンスなど、他の SageMaker機械学習 では機能しないことに注意してください。これらの でDetailedProfilerApp関数を実行するとIDEs、URLProfiler UI アプリケーションを開くための直接リンクではなく、 SageMaker コンソールの Profiler ランディングページに が返されます。

Profiler UI で視覚化された SageMaker プロファイル出力データを調べる

このセクションでは、 SageMaker Profiler UI を順を追って説明し、Profiler UI を使用してインサイトを得る方法のヒントを提供します。

プロファイルのロード

SageMaker Profiler UI を開くと、プロファイルのロードページが開きます。[ダッシュボード][タイムライン] をロードして生成するには、以下の手順を実行します。

トレーニングジョブのプロファイルをロードするには
  1. [トレーニングジョブのリスト] セクションで、チェックボックスを使用してプロファイルをロードするトレーニングジョブを選択します。

  2. ロード] を選択します。ジョブ名は上部の [ロードされたプロファイル] セクションに表示されるはずです。

  3. [ジョブ名] の左側にあるラジオボタンを選択して、[ダッシュボード][タイムライン] を生成します。ラジオボタンを選択すると、UI が自動的に [ダッシュボード] を開くことに注意してください。また、ジョブのステータスとロードステータスがまだ進行中であるように見えるときに視覚化を生成すると、 SageMaker Profiler UI は、進行中のトレーニングジョブまたは部分的にロードされたプロファイルデータから収集された最新のプロファイルデータまでのダッシュボードプロットとタイムラインを生成することに注意してください。

ヒント

一度にロードして視覚化できるプロファイルは 1 つです。別のプロファイルをロードするには、先にロードしたプロファイルをアンロードする必要があります。プロファイルをアンロードするには、ロードされたプロファイルセクションのプロファイルの右端にあるゴミ箱アイコンを使用します。

SageMaker Profiler UI のロードプロファイルページのスクリーンショット

ダッシュボード

トレーニングジョブのロードと選択が完了すると、UI はデフォルトで以下のパネルを含む [ダッシュボード] ページを開きます。

  • GPU アクティブ時間 – この円グラフには、GPUアクティブ時間とGPUアイドル時間の割合が表示されます。トレーニングジョブ全体で、 GPUsがアイドル状態よりもアクティブかどうかを確認できます。GPU アクティブ時間は、使用率が 0% を超えるプロファイルデータポイントに基づいており、GPUアイドル時間は使用率が 0% のプロファイルデータポイントです。

  • GPU 経時的な使用率 – このタイムライングラフには、ノードごとの経時的な平均GPU使用率が表示され、すべてのノードが 1 つのグラフに集約されます。特定の時間間隔の間に、ワークロードの不均衡、使用率不足の問題、ボトルネック、またはアイドル状態の問題GPUsがあるかどうかを確認できます。個々のGPUレベルでの使用率と関連するカーネル実行を追跡するには、 を使用しますタイムラインインターフェイス。GPU アクティビティ収集は、トレーニングスクリプトにプロファイラースターター関数を追加した場所から開始し、 で停止SMProf.start_profiling()することに注意してくださいSMProf.stop_profiling()

  • CPU アクティブ時間 – この円グラフには、CPUアクティブ時間対CPUアイドル時間の割合が表示されます。トレーニングジョブ全体で、 CPUsがアイドル状態よりもアクティブかどうかを確認できます。CPU アクティブ時間は、使用率が 0% を超えるプロファイリングされたデータポイントに基づいていますが、CPUアイドル時間は使用率が 0% のプロファイリングされたデータポイントです。

  • CPU 経時的な使用率 – このタイムライングラフには、ノードごとの経時的な平均CPU使用率が表示され、すべてのノードが 1 つのグラフに集約されます。特定の時間間隔で CPUsがボトルネックになっているか、十分に活用されていないかを確認できます。個々の使用率とカーネル実行に合わせてCPUs調整された のGPU使用率を追跡するには、 を使用しますタイムラインインターフェイス。使用率メトリクスはジョブの初期化から開始することに注意してください。

  • すべてのGPUカーネルが費やした時間 – この円グラフには、トレーニングジョブ全体で操作されたすべてのGPUカーネルが表示されます。デフォルトでは、上位 15 GPU 個のカーネルが個々のセクターとして表示され、他のすべてのカーネルは 1 つのセクターに表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は、操作されたGPUカーネルの合計時間を秒単位で示し、パーセンテージはプロファイルの全時間に基づきます。

  • 上位 15 GPU 個のカーネルが費やした時間 — この円グラフには、トレーニングジョブ全体で操作されたすべてのGPUカーネルが表示されます。上位 15 GPU 個のカーネルが個々のセクターとして表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は、操作されたGPUカーネルの合計時間を秒単位で示し、パーセンテージはプロファイルの全時間に基づきます。

  • すべてのGPUカーネルの起動数 – この円グラフには、トレーニングジョブ全体で起動されたすべてのGPUカーネルの数が表示されます。上位 15 GPU のカーネルが個々のセクターとして表示され、他のすべてのカーネルが 1 つのセクターに表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動したGPUカーネルの合計数を示し、割合はすべてのカーネルの総数に基づいています。

  • 上位 15 GPU 個のカーネルの起動数 — この円グラフには、トレーニングジョブ全体で起動されたすべてのGPUカーネルの数が表示されます。上位 15 GPU 個のカーネルが表示されます。セクターにカーソルを合わせると、詳細情報が表示されます。値は起動したGPUカーネルの合計数を示し、割合はすべてのカーネルの総数に基づいています。

  • ステップ時間分布 – このヒストグラムは、 でのステップ期間の分布を示していますGPUs。このプロットは、トレーニングスクリプトにステップアノテーターを追加した後にのみ生成されます。

  • カーネル精度分布 – この円グラフは、、FP32、FP16、 INT32などのさまざまなデータ型でカーネルの実行に費やされた時間の割合を示していますINT8。

  • GPU アクティビティ分散 – この円グラフには、カーネルの実行、メモリ (memcpymemset)、同期 () などのGPUアクティビティに費やされた時間の割合が表示されますsync

  • GPU メモリオペレーションの分散 – この円グラフは、GPUメモリオペレーションに費やされた時間の割合を示しています。これにより memcopy アクティビティが視覚化され、トレーニングジョブが特定のメモリオペレーションに過剰な時間を費やしているかどうかを特定するのに役立ちます。

  • 新しいヒストグラムの作成ステップ 1: SageMaker Profiler Python モジュールを使用してトレーニングスクリプトを適応させる の実行中に手動で注釈を付けたカスタムメトリクスの新しい図を作成します。新しいヒストグラムにカスタム注釈を追加する場合は、トレーニングスクリプトに追加した注釈の名前を選択または入力します。例えば、ステップ 1 のデモトレーニングスクリプトでは、stepForwardBackwardOptimizeLoss がカスタム注釈です。新しいヒストグラムを作成するときに、これらの注釈名がドロップダウンメニューに表示され、メトリクスが選択されます。Backward を選択すると、UI はプロファイリングされた時間を通してバックワードパスに費やされた時間のヒストグラムを [ダッシュボード] に追加します。このタイプのヒストグラムは、異常に長い時間がかかり、ボトルネックの問題を引き起こしている外れ値があるかどうかを確認するのに役立ちます。

次のスクリーンショットは、 GPUと のCPUアクティブ時間の比率、およびコンピューティングノードあたりの時間に対する平均GPUとCPU使用率を示しています。

SageMaker Profiler UI の Dashboard ページのスクリーンショット

次のスクリーンショットは、GPUカーネルが起動された回数を比較し、カーネルの実行に費やされた時間を測定する円グラフの例を示しています。すべてのGPUカーネルが費やした時間およびすべてのGPUカーネルパネルの起動数で、k の入力フィールドに整数を指定して、プロットに表示する凡例の数を調整することもできます。例えば、10 を指定すると、プロットには実行回数が最も多いカーネルと起動数の多いカーネルの上位 10 がそれぞれ表示されます。

SageMaker Profiler UI の Dashboard ページのスクリーンショット

次のスクリーンショットは、ステップ期間ヒストグラムの例と、カーネル精度分布、GPUアクティビティ分布、GPUメモリオペレーション分布の円グラフを示しています。

SageMaker Profiler UI の Dashboard ページのスクリーンショット

タイムラインインターフェイス

でスケジュールCPUsされ、 で実行されるオペレーションとカーネルのレベルにおけるコンピューティングリソースの詳細なビューを取得するにはGPUs、タイムラインインターフェイスを使用します。

マウス、[w, a, s, d] キー、またはキーボードの 4 つの矢印キーを使用して、タイムラインインターフェイスでズームインやズームアウトしたり、左右にパンしたりできます。

ヒント

[タイムライン] インターフェイスを操作するためのキーボードショートカットのヒントについて詳しくは、左のペインで [キーボードショートカット] を選択してください。

タイムライントラックはツリー構造になっており、ホストレベルからデバイスレベルまでの情報を提供します。例えば、それぞれに 8 GPUs個の を持つNインスタンスを実行すると、各インスタンスのタイムライン構造は次のようになります。

  • algo-inode – プロビジョニングされたインスタンスにジョブを割り当てる SageMaker タグです。桁 inode はランダムに割り当てられます。例えば、4 つのインスタンスを使用する場合、このセクションは algo-1 から algo-4 に拡張されます。

    • CPU – このセクションでは、平均CPU使用率とパフォーマンスカウンターを確認できます。

    • GPUs – このセクションでは、平均GPU使用率、個々のGPU使用率、カーネルを確認できます。

      • SUM 使用率 — インスタンスあたりの平均GPU使用率。

      • HOST-0 PID-123 – 各プロセストラックに割り当てられた一意の名前。頭字語PIDはプロセス ID で、それに付加される番号はプロセスからのデータキャプチャ中に記録されるプロセス ID 番号です。このセクションには、プロセスの以下の情報が表示されます。

        • GPU-inum_gpu 使用率 – i num_gpu番目の使用率の経時GPU的な変化。

        • GPU-inum_gpu デバイス – カーネルは i num_gpu番目のGPUデバイスで実行されます。

          • ストリーム icuda_stream — CUDA GPUデバイスでのカーネル実行を示すストリーム。ストリームの詳細については、CUDAPDF「」のCUDA「C/C++ Streams and Concurrency provided by 」を参照してくださいNVIDIA。

        • GPU-inum_gpu host – i num_gpu番目のGPUホストでカーネルが起動します。

次のいくつかのスクリーンショットは、GPUsそれぞれに 8 NVIDIA A100 Tensor Core を備えたml.p4d.24xlargeインスタンスで実行されるトレーニングジョブのプロファイルのタイムラインを示しています。

以下はプロファイルのズームアウトビューで、step_232step_233 の間に次のデータバッチをフェッチするための断続的なデータローダーを含む 12 のステップが印刷されています。

Profiler SageMaker UI のタイムラインページ。サンプルのトレーニングジョブのプロファイルを視覚化します。

ごとにCPU、 "clk_unhalted_ref.tsc"や などのCPU使用率とパフォーマンスカウンターを追跡できます。これは"itlb_misses.miss_causes_a_walk"、 で実行される指示を示しますCPU。

ごとにGPU、ホストタイムラインとデバイスタイムラインを確認できます。カーネルの起動はホストタイムラインに、カーネルの実行はデバイスタイムラインに表示されます。GPU ホストタイムラインでトレーニングスクリプトに を追加した場合は、注釈 (フォワード、バックワード、最適化など) を表示することもできます。

タイムラインビューでは、カーネル launch-and-run ペアを追跡することもできます。これにより、ホスト (CPU) でスケジュールされたカーネル起動が対応するGPUデバイスでどのように実行されるかを理解できます。

ヒント

f キーを押すと、選択したカーネルにズームインします。

次のスクリーンショットは、前のスクリーンショットから step_233step_234 にズームインしたビューです。次のスクリーンショットで選択したタイムライン間隔は、分散トレーニングで不可欠な通信と同期のステップである AllReduceオペレーションで、GPU-0 デバイスで実行されます。スクリーンショットでは、GPU-0 ホストでのカーネル起動は、GPU-0 デバイスストリーム 1 で実行されるカーネルに接続され、矢印はシアン色で示されていることに注意してください。

SageMaker Profiler UI のタイムラインページのスクリーンショット

また、前のスクリーンショットに示されているように、タイムライン間隔を選択すると UI の下部のペインに 2 つの情報タブが表示されます。[現在の選択] タブには、選択したカーネルの詳細と、ホストからの接続されたカーネルの起動が表示されます。各カーネルは常に から呼び出されるため、接続の方向は常にホスト (CPU) GPU からデバイス (GPU) になりますCPU。[接続] タブには、選択したカーネルの起動と実行のペアが表示されます。どちらかを選択すると、[タイムライン] ビューの中央に移動できます。

次のスクリーンショットは、AllReduce オペレーションの起動と実行のペアをさらにズームインしています。

SageMaker Profiler UI のタイムラインページのスクリーンショット

情報

情報 では、インスタンスタイプ、ジョブにプロビジョニングされたコンピューティングリソースの Amazon リソースネーム (ARNs)、ノード名、ハイパーパラメータなど、ロードされたトレーニングジョブに関する情報にアクセスできます。

設定

SageMaker Profiler UI アプリケーションインスタンスは、デフォルトでアイドル時間の 2 時間後にシャットダウンするように設定されています。[設定] で、次の設定を使用して自動シャットダウンタイマーを調整します。

  • アプリの自動シャットダウンを有効にする — 指定したアイドル時間の経過後にアプリケーションを自動的にシャットダウンさせる場合は、有効を選択して設定します。自動シャットダウン機能をオフにするには、[無効] を選択します。

  • 自動シャットダウンのしきい値 (時間単位)[アプリの自動シャットダウンを有効にする][有効] を選択すると、アプリケーションが自動的にシャットダウンするまでのしきい値を時間単位で設定できます。デフォルトでは、2 に設定されています。

SageMaker Profiler の使用に関するよくある質問

SageMaker Profiler の使用に関する回答を見つけるには、次のよくある質問を使用します。

Q: エラーメッセージが表示されます。 ModuleNotFoundError: No module named 'smppy'

2023 年 12 月以降、 SageMaker Profiler Python パッケージの名前が から smppysmprofに変更され、パッケージ名の重複が解決されています。 smppyはオープンソースパッケージで既に使用されています。

したがって、2023 年 12 月smppyより前に を使用していて、ModuleNotFoundErrorこの問題が発生した場合は、最新の パッケージがインストールされているか、最新の のいずれかを使用しているときに、トレーニングスクリプトのsmprofパッケージ名が古くなったことが原因である可能性がありますSageMaker SageMaker Profiler がプリインストールされたフレームワークイメージ。この場合、トレーニングスクリプトsmprof全体で、 のすべての言及smppyを に置き換えてください。

トレーニングスクリプトで SageMaker Profiler Python パッケージ名を更新するときに、どのバージョンのパッケージ名を使用するべきかが混乱しないように、次のコードスニペットに示すように、条件付きインポートステートメントを使用することを検討してください。

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

また、最新バージョン PyTorch または TensorFlow バージョンへのアップグレードsmppy中に を使用している場合は、「」の手順に従って最新のsmprofパッケージをインストールしてください(オプション) SageMaker Profiler Python パッケージをインストールする

Q: エラーメッセージが表示されます。 ModuleNotFoundError: No module named 'smprof'

まず、公式にサポートされている SageMaker フレームワークコンテナのいずれかを使用していることを確認してください。これらのいずれかを使用しない場合は、「」の手順に従ってsmprofパッケージをインストールできます(オプション) SageMaker Profiler Python パッケージをインストールする

Q: インポートできません ProfilerConfig

SageMaker Python を使用してジョブランチャースクリプトProfilerConfigに をインポートできない場合SDK、ローカル環境または Jupyter カーネルの SageMaker Python のバージョンが大幅に古くなる可能性がありますSDK。必ず最新バージョンSDKにアップグレードしてください。

$ pip install --upgrade sagemaker

Q: エラーメッセージが表示されています。 aborted: core dumped when importing smprof into my training script

以前のバージョンの ではsmprof、この問題は PyTorch 2.0 以降と PyTorch Lightning で発生します。この問題を解決するには、「」の手順に従って最新のsmprofパッケージもインストールします(オプション) SageMaker Profiler Python パッケージをインストールする

Q: SageMaker Studio から SageMaker Profiler UI が見つかりません。どのように見つけることができますか?

SageMaker コンソールにアクセスできる場合は、次のいずれかのオプションを選択します。

ドメインユーザーで、 SageMaker コンソールにアクセスできない場合は、 SageMaker Studio Classic からアプリケーションにアクセスできます。この場合、次のオプションを選択します。

考慮事項

SageMaker Profiler を使用する場合は、次の点を考慮してください。