Amazon での分散トレーニングのトラブルシューティング SageMaker - Amazon SageMaker

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

Amazon での分散トレーニングのトラブルシューティング SageMaker

ライブラリを使用するトレーニングジョブの実行中に問題が発生した場合は、次のリストを使用してトラブルシュートを試みることができます。さらにサポートが必要な場合は、AWS サポートセンターまたは AWS Amazon のデベロッパーフォーラム SageMakerから SageMaker チームにお問い合わせください。

Amazon SageMaker Debugger とチェックポイントでの SageMaker 分散データ並列の使用

SageMaker 分散データ並列を使用したトレーニングジョブのシステムボトルネックのモニタリング、フレームワークオペレーションのプロファイリング、モデル出力テンソルのデバッグを行うには、Amazon SageMaker Debugger を使用します。

ただし、 SageMaker デバッガー、 SageMaker 分散データ並列、 SageMakerチェックポイントを使用すると、次の例のようなエラーが表示されることがあります。

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

これは、デバッガーとチェックポイントの間の内部エラーが原因です。これは、 SageMaker 分散データ並列を有効にしたときに発生します。

  • 3 つの機能をすべて有効にすると、 SageMaker Python SDK は debugger_hook_config=Falseを渡してデバッガーを自動的にオフにします。これは、次のフレームワークestimatorの例と同等です。

    bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False )
  • SageMaker 分散データ並列と SageMaker デバッガーの両方を引き続き使用する場合の回避策は、推定器から checkpoint_s3_uriおよび checkpoint_local_pathパラメータを指定するのではなく、トレーニングスクリプトにチェックポイント関数を手動で追加することです。トレーニングスクリプトにチェックポイントを手動で設定する方法の詳細については、「チェックポイントを保存する」を参照してください。

モデルパラメータキーにアタッチされた予期しないプレフィックス

PyTorch 分散トレーニングジョブの場合、予期しないプレフィックス (model など) がstate_dictキー (モデルパラメータ) にアタッチされる可能性があります。データ SageMaker並列ライブラリは、 PyTorch トレーニングジョブがモデルアーティファクトを保存するときに、モデルパラメータ名を直接変更または追加しません。 PyTorchの分散トレーニングでは、 の名前が ネットワークを通過するstate_dictように変更され、プレフィックスが付加されます。 SageMaker データ並列ライブラリとチェックポイントを PyTorch トレーニングに使用しているときに、異なるパラメータ名が原因でモデル障害の問題が発生した場合は、次のサンプルコードを調整して、トレーニングスクリプトでチェックポイントをロードするステップでプレフィックスを削除します。

state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}

これは、各 state_dict キーを文字列値として受け取り、最初に 'model.' が現れた時点で文字列を分割し、分割された文字列の 3 番目のリスト項目 (インデックス 2) を取り出します。

プレフィックスの問題の詳細については、ディスカッションPyTorch フォーラム「マルチ GPU でトレーニングした場合の保存済みモデルのプレフィックスパラメータ名」の説明スレッドを参照してください。

モデルを保存およびロード PyTorch する方法の詳細については、 PyTorchドキュメント「デバイス間でのモデルの保存とロード」を参照してください。

SageMaker 初期化中の分散トレーニングジョブの停止

EFA 対応インスタンスの使用時に、初期化中に SageMaker 分散データ並列トレーニングジョブが停止した場合、トレーニングジョブに使用される VPC サブネットのセキュリティグループの設定ミスが原因である可能性があります。EFA では、ノード間のトラフィックを有効にするために、適切なセキュリティグループ設定が必要です。

セキュリティグループのインバウンドルールとアウトバウンドルールを設定するには
  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/vpc/ で Amazon VPC コンソールを開きます。

  2. 左側のナビゲーションペインで [Security Groups] (セキュリティグループ) を選択します。

  3. トレーニングに使う VPC サブネットに紐付けられているセキュリティグループを選択します。

  4. [Details] (詳細) セクションで、[Security group ID] (セキュリティグループ ID) をコピーします。

  5. [インバウンドルール] タブで、[インバウンドルールの編集] を選択します。

  6. [インバウンドルールの編集] ページで、次の操作を行います。

    1. [Add rule] を選択します。

    2. [Type] で、[All traffic] を選択します。

    3. [Source] (ソース) で、[Custom] (カスタム) を選択し、セキュリティグループ ID を検索ボックスに貼り付けて、ポップアップ表示されるセキュリティグループを選択します。

  7. [Save rules] (ルールの保存) を選択して、セキュリティグループのインバウンドルールの設定を完了します。

  8. [Outbound rules] (アウトバウンドルール) タブで [Edit outbound rules] (アウトバウンドルールの編集) を選択します。

  9. ステップ 6 と 7 を繰り返して、アウトバウンドルールと同じルールを追加します。

インバウンドルールとアウトバウンドルールを使用してセキュリティグループを設定する前述のステップを完了したら、トレーニングジョブを再実行し、停止の問題が解決したかどうかを確認します。

VPC および EFA のためのセキュリティグループの設定の詳細については、「VPC のセキュリティグループ」と「Elastic Fabric Adapter」を参照してください。

SageMaker トレーニング終了時の分散トレーニングジョブの停止

トレーニング終了時の停止問題の根本原因の 1 つは、異なるランク間での、エポックごとに処理されるバッチ数の不一致です。すべてのワーカー (GPU) はバックワードパスの中でローカル勾配を同期させ、バッチ反復の終了時点ですべてのワーカーがモデルの同じコピーを持つようにします。トレーニングの最終エポック中に、異なるワーカーグループにバッチサイズが不均等に割り当てられると、トレーニングジョブが停止します。例えば、あるワーカーグループ (グループ A) がすべてのバッチ処理を終了し、トレーニングループを出る間、別のワーカーグループ (グループ B) が別のバッチ処理を開始し、グループ A からの勾配を同期させる通信を期待している場合です。これにより、グループ B はグループ A を待機しますが、グループ A は既にトレーニングを完了しており、同期させる勾配がありません。

したがって、トレーニングデータセットを設定するときは、各ワーカーがトレーニング中に同じ数のバッチを処理するように、各ワーカーが同じ数のデータサンプルを取得することが重要です。この停止問題を回避するために、各ランクが同じ数のバッチを取得するようにしてください。

Amazon FSx スループットのボトルネックによるスケーリング効率の低下の監視

スケーリング効率低下の考えられる原因の 1 つは、FSx のスループット制限です。大規模なトレーニングクラスターに切り替えたときにスケーリング効率が突然低下する場合は、スループット制限の大きい FSx for Lustre ファイルシステムを使用してみてください。詳細については、「Amazon FSx for Lustre ユーザーガイド」の「ファイルシステムのパフォーマンスの集計」と「ストレージとスループット容量の管理」を参照してください。

SageMaker を含む分散トレーニングジョブが非推奨の警告 PyTorch を返す

v1.4.0 以降、 SageMaker 分散データ並列処理ライブラリは PyTorch 分散のバックエンドとして機能します。ライブラリを で使用するという重大な変更により PyTorch、 PyTorch 分散パッケージの smdistributed API が非推奨であるという警告メッセージが表示される場合があります。 APIs 警告メッセージは次の例のようになります。

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html

v1.4.0 以降では、ライブラリをトレーニングスクリプトの最上部に 1 回だけインポートし、 PyTorch 分散初期化中にバックエンドとして設定する必要があります。バックエンド仕様の単一行では、 PyTorch トレーニングスクリプトを変更せずに、 PyTorch 分散モジュールを直接使用できます。 PyTorch トレーニングスクリプトでSMDDPライブラリを使用する 重大な変更と、 でライブラリを使用する新しい方法については、「」を参照してください PyTorch。