

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

# Amazon SageMaker AI の分散トレーニングのトラブルシューティング
<a name="distributed-troubleshooting-data-parallel"></a>

ライブラリを使用するトレーニングジョブの実行中に問題が発生した場合は、次のリストを使用してトラブルシュートを試みることができます。さらにサポートが必要な場合は、[AWS サポートセンター](https://console.aws.amazon.com/support/)または [Amazon SageMaker AI のAWS デベロッパーフォーラム](https://forums.aws.amazon.com/forum.jspa?forumID=285)を通して、SageMaker AI チームに連絡してください。

**Topics**
+ [SageMaker AI 分散データ並列を Amazon SageMaker Debugger およびチェックポイントと共に使う](#distributed-ts-data-parallel-debugger)
+ [モデルパラメータキーに予期しないプレフィックスが添付される](#distributed-ts-data-parallel-pytorch-prefix)
+ [SageMaker AI 分散トレーニングジョブが初期化中に停止する](#distributed-ts-data-parallel-efa-sg)
+ [SageMaker AI 分散トレーニングジョブがトレーニング終了時に停止する](#distributed-ts-data-parallel-stall-at-the-end)
+ [Amazon FSx スループットのボトルネックによるスケーリング効率の低下のモニタリング](#distributed-ts-data-parallel-fxs-bottleneck)
+ [PyTorch を使用した SageMaker AI 分散トレーニングジョブが非推奨の警告を返す](#distributed-ts-data-parallel-deprecation-warnings)

## SageMaker AI 分散データ並列を Amazon SageMaker Debugger およびチェックポイントと共に使う
<a name="distributed-ts-data-parallel-debugger"></a>

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

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

```
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
```

これは、SageMaker AI 分散データ並列を有効にした場合に発生する、デバッガーとチェックポイントの間の内部エラーが原因です。
+ 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 AI 分散データ並列と SageMaker デバッガーの両方を使い続ける場合の回避策としては、推定器から `checkpoint_s3_uri` と `checkpoint_local_path` のパラメータを指定する代わりに、トレーニングスクリプトにチェックポイント関数を手動で追加します。トレーニングスクリプトにチェックポイントを手動で設定する方法の詳細については、「[チェックポイントを保存する](distributed-troubleshooting-model-parallel.md#distributed-ts-model-parallel-checkpoints)」を参照してください。

## モデルパラメータキーに予期しないプレフィックスが添付される
<a name="distributed-ts-data-parallel-pytorch-prefix"></a>

PyTorch 分散トレーニングジョブの場合、予期しないプレフィックス (例えば `model`) が `state_dict` キー (モデルパラメータ) に添付される場合があります。SageMaker AI データ並列ライブラリは、PyTorch トレーニングジョブがモデルアーティファクトを保存するときに、モデルパラメータ名を直接変更したり先頭に追加したりすることはありません。PyTorch の分散トレーニングは、ネットワークに行き渡るよう `state_dict` にある名前を変更して、プレフィックスを付加します。SageMaker AI データ並列ライブラリと PyTorch トレーニング用のチェックポイントを使っている間に、パラメータ名が異なるためにモデル障害の問題が発生した場合は、次のサンプルコードを適応させて、トレーニングスクリプトでチェックポイントをロードするステップでプレフィックスを削除します。

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

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

プレフィックスの問題の詳細については、PyTorch ディスカッションフォーラムのディスカッションスレッド「[マルチ GPU でトレーニングした場合、保存したモデルのパラメータ名にプレフィックスが付きますか?](https://discuss.pytorch.org/t/prefix-parameter-names-in-saved-model-if-trained-by-multi-gpu/494)」を参照してください。**

モデルの保存とロードを行う PyTorch メソッドの詳細については、PyTorch ドキュメントの「[デバイス間でのモデルの保存とロード](https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-model-across-devices)」を参照してください。**

## SageMaker AI 分散トレーニングジョブが初期化中に停止する
<a name="distributed-ts-data-parallel-efa-sg"></a>

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

**セキュリティグループのインバウンドルールとアウトバウンドルールを設定するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

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

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

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

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

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

   1. [**Add rule**] を選択してください。

   1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。

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

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

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

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

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

VPC および EFA のためのセキュリティグループの設定の詳細については、「[VPC のセキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)」と「[Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)」を参照してください。

## SageMaker AI 分散トレーニングジョブがトレーニング終了時に停止する
<a name="distributed-ts-data-parallel-stall-at-the-end"></a>

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

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

## Amazon FSx スループットのボトルネックによるスケーリング効率の低下のモニタリング
<a name="distributed-ts-data-parallel-fxs-bottleneck"></a>

スケーリング効率低下の考えられる原因の 1 つは、FSx のスループット制限です。大規模なトレーニングクラスターに切り替えたときにスケーリング効率が突然低下する場合は、スループット制限の大きい FSx for Lustre ファイルシステムを使用してみてください。詳細については、「*Amazon FSx for Lustre ユーザーガイド*」の「[ファイルシステムのパフォーマンスの集計](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)」と「[ストレージとスループット容量の管理](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html)」を参照してください。

## PyTorch を使用した SageMaker AI 分散トレーニングジョブが非推奨の警告を返す
<a name="distributed-ts-data-parallel-deprecation-warnings"></a>

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

```
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI 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 以降では、ライブラリをトレーニングスクリプトの先頭で一度インポートし、PyTorch の分散初期化中にバックエンドとして設定するだけで済みます。バックエンド仕様を 1 行記述するだけで、PyTorch トレーニングスクリプトを変更せずに、PyTorch の分散モジュールを直接使用できます。重大な変更点と、PyTorch でライブラリを使用する新しい方法については、「[PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)」を参照してください。