

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

# SageMaker 分散モデル並列処理のベストプラクティス
<a name="model-parallel-best-practices"></a>

SageMaker モデル並列ライブラリで分散トレーニングジョブを実行する場合は、次のガイドラインに従ってください。

## 特定のモデルに適切な設定をする
<a name="model-parallel-best-practices-configuration"></a>

モデルをスケールアップする場合、次のリストを順番に確認することをお勧めします。各リスト項目では、ライブラリの手法を使用する利点と、発生する可能性のあるトレードオフについて説明します。

**ヒント**  
ライブラリの機能のサブセットを使用してモデルがうまく適合できる場合、モデルの並列処理やメモリ節約機能をさらに追加しても、通常はパフォーマンスは向上しません。

**大規模な GPU インスタンスタイプの使用**
+ モデル並列処理の領域では、複数の GPU にまたがるモデルのパーティション化など、モデル並列処理オペレーションによるオーバーヘッドを処理するために大規模な GPU メモリを持つ強力なインスタンスを使用することをお勧めします。大規模な DL モデルをトレーニングするには、`ml.p4d` または `ml.p3dn` インスタンスを使用することをお勧めします。これらのインスタンスには Elastic Fabric Adapter (EFA) も装備されており、ネットワーク帯域幅が向上し、モデルの並列処理による大規模なトレーニングが可能になります。

**シャーディングオプティマイザの状態**
+ シャーディングオプティマイザの状態の影響は、データの並列ランク数によって異なります。通常、データの並列性 (コンピュートノードのサイズに比例する) が高いほど、メモリ使用量の効率が向上します。

  クラスターをダウンサイズする場合は、オプティマイザ状態のシャーディングの構成を確認してください。例えば、オプティマイザー状態のシャーディングを使用した大規模な DL モデルが、16 GPU (2 つの P4d または P4de インスタンスなど) のコンピューティングクラスターに適合する場合でも、8 GPU (単一の P4d または P4de インスタンスなど) を備えたノードに適合するとは限りません。これは、8 GPU の合計メモリが 16 GPU の合計メモリよりも小さく、8 GPU でのシャーディングに必要な GPU ごとのメモリも、16 GPU のシナリオの場合より多く必要なためです。その結果、必要なメモリが増加し、より小さなクラスターには収まらない可能性があります。

  詳細については、「[オプティマイザ状態シャーディング](model-parallel-extended-features-pytorch-optimizer-state-sharding.md)」を参照してください。

**アクティベーションチェックポイント**
+ モジュールのグループに対してアクティベーションチェックポイントを使用することにより、メモリ効率を向上させることができます。モジュールをグループ化すればするほど、メモリ使用効率が上がります。レイヤーのシーケンシャルモジュールをチェックポイントする場合、`smp.set_activation_checkpointing` 関数の `strategy` の引数は、チェックポイントのためにレイヤーをグループ化します。例えば、チェックポイントのために複数のレイヤーをグループ化すると、一度に 1 つのレイヤーにチェックポイントするよりもメモリ効率が高くなります。これにより、余分な計算時間と引き換えにメモリ使用量を削減できます。

  詳細については、「[アクティベーションチェックポイント](model-parallel-extended-features-pytorch-activation-checkpointing.md)」を参照してください。

**テンソル並列性**
+ テンソル並列性の度合いは、2 の累乗 (2、4、8、...、2n) である必要があり、最大度はノードあたりの GPU 数に等しくなければなりません。例えば、8 つの GPU を持つノードを使用する場合、テンソル並列性の度数は 2、4、8 です。テンソル並列性の度合いには、任意の数値 (3、5、6、7 など) を推奨しません。複数のノードを使用する場合、テンソルの並列性の度合いを誤って設定すると、ノード間でテンソル並列処理が実行されることがあります。これにより、ノード間のアクティベーションの通信によりオーバーヘッドが大きく増え、計算コストが高くなる可能性があります。

  詳細については、「[テンソル並列処理](model-parallel-extended-features-pytorch-tensor-parallelism.md)」を参照してください。<a name="model-parallel-best-practices-configuration-pipeline-across-nodes"></a>

**ノード間でのパイプラインの並列処理**
+ パイプラインの並列処理は、1 つのノード内と複数のノードの両方で実行できます。パイプライン並列処理をテンソル並列処理と組み合わせて使用する場合は、複数のノードにわたってパイプライン並列処理を実行し、個々のノード内でテンソル並列処理を維持することをお勧めします。
+ パイプラインの並列処理には、`microbatches`、`active_microbatches`、および`prescaled_batch` の 3 つのノブがあります。
  + テンソル並列処理をパイプラインの並列処理で使用する場合は、モデル並列グループごとのバッチサイズを増やし効率的なパイプライン処理を行えるよう、`prescaled_batch` をアクティブにすることをお勧めします。`prescaled_batch` を有効にすると、トレーニングスクリプトに設定されたバッチサイズは、`prescaled_batch` を使用しない場合の各ランクのバッチサイズの `tp_size` 倍になります。
  + `microbatches` の数を増やすことで、効率的なパイプライン処理とパフォーマンスの向上させることができます。有効なマイクロバッチサイズは、バッチサイズをマイクロバッチ数で割った値であることに注意してください。バッチサイズを一定に保ちながらマイクロバッチの数を増やすと、各マイクロバッチで処理されるサンプルが少なくなります。
  + `active_microbatches` 数は、パイプライン処理中に同時に処理されるマイクロバッチの最大数です。処理中のアクティブなマイクロバッチごとに、そのアクティベーションとグラデーションが GPU メモリを占有します。したがって、`active_microbatches` を増やすと、より多くの GPU メモリを消費します。
+ GPU と GPU のメモリの両方が十分に利用されていない場合、`active_microbatches` を増やしてパイプライン処理中の並列化を改善します。
+ パイプラインの並列処理でテンソル並列処理を使用する方法の詳細については、「[テンソル並列処理とパイプライン並列処理の組み合わせ](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism)」を参照してください。
+ 前述のパラメータの説明については、SageMaker Python SDK ドキュメントの「[Parameters for `smdistributed`](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#parameters-for-smdistributed)」を参照してください。

**アクティベーションを CPU へオフロードする**
+ アクティベーションのチェックポイントやパイプラインの並列処理と組み合わせて使用します。オフロードとプリロードがバックグラウンドで確実に行われるよう、microbatches パラメータに 1 より大きい値を指定します。
+ アクティベーションをオフロードする場合、`active_microbatches` を増やすことができ、マイクロバッチの総数と一致することもあります。これは、チェックポイントされているモジュールと、モデルのパーティション化方法によって異なります。

  詳細については、「[アクティベーションオフロード](model-parallel-extended-features-pytorch-activation-offloading.md)」を参照してください。

### リファレンス設定
<a name="model-parallel-best-practices-configuration-reference"></a>

SageMaker モデル並列処理トレーニングチームは、GPT-2 モデル、シーケンス長 512、語彙サイズ 50,000 での実験に基き、以下の基準点を提供します。


| モデルパラメータの数 | インスタンスタイプ | パイプラインの並列性 | テンソル並列性 | オプティマイザの状態シャーディング | アクティベーションチェックポイント | 事前スケールされたバッチ | バッチサイズ | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 10 億 | 16 ml.p4d.24xlarge | 1 | 4 | 正 | 各トランスフォーマーレイヤー | 正 | batch\_size=40 | 
| 30 億 | 16 ml.p4d.24xlarge | 1 | 8 | 正 | 各トランスフォーマーレイヤー | 正 | batch\_size=32 | 
| 60 億 | 32 ml.p4d.24xlarge | 2 | 8 | 正 | 各トランスフォーマーレイヤー | 正 | batch\_size=56, microbatches=4, active\_microbatches=2 | 

前の構成から外挿して、モデル設定の GPU メモリ使用量を推定することができます。例えば、10 億パラメータモデルのシーケンス長を増やしたり、モデルのサイズを 20 億に増やす場合は、最初にバッチサイズを小さくすることができます。それでもモデルが適合しない場合は、テンソル並列性の度合いを上ることができます。

## トレーニングスクリプトの変更
<a name="model-parallel-best-practices-modify-training-script"></a>
+ SageMaker モデル並列ライブラリの機能をトレーニングスクリプトで使用する前に、「[SageMaker 分散モデル並列処理ライブラリ設定のヒントと落とし穴](model-parallel-customize-tips-pitfalls.md)」を確認してください。
+ トレーニングジョブを迅速に開始するには、[SageMaker AI ローカルモード](https://sagemaker.readthedocs.io/en/v2.199.0/overview.html?highlight=local%20mode#local-mode)を使用してください。これにより、SageMaker ノートブックインスタンス上でトレーニングジョブをローカルですばやく実行できます。SageMaker ノートブックインスタンスが実行されている ML インスタンスのスケールによっては、非表示の幅、トランスフォーマーレイヤー数、アテンションヘッドなどのモデル構成を変更して、モデルのサイズを調整する必要がある場合があります。大規模なクラスターを使用してフルモデルのトレーニングを行う前に、縮小モデルがノートブックインスタンスで正常に動作するか検証します。

## SageMaker AI コンソールと Amazon CloudWatch を使用したトレーニングジョブのモニタリングおよびログ記録
<a name="model-parallel-best-practices-monitoring"></a>

CPU メモリ使用率、GPU メモリ使用率、GPU 使用率などのシステムレベルのメトリックを監視するには、[SageMaker AI コンソール](https://console.aws.amazon.com/sagemaker/)から提供される可視化を使用します。

1. 左のナビゲーションペインで **[トレーニング]** を選択します。

1. [**トレーニングジョブ**] を選択します。

1. メインペインで、詳細を表示するトレーニングジョブ名を選択します。

1. メインペインの **[モニタリング]** セクションを参照し、自動ビジュアライゼーションを確認します。

1. トレーニングジョブログを表示するには、**[モニタリング]** セクションの **[ログの表示]** を選択します。CloudWatch でトレーニングジョブの分散トレーニングジョブログにアクセスできます。マルチノード分散トレーニングを開始した場合は、**[algo-n-1234567890]** 形式のタグを含む複数のログストリームが表示されます。**algo-1** ログストリームは、メイン (0 番目) ノードからのトレーニングログを追跡します。

詳細については、「[トレーニングジョブのモニタリングと分析を行うための Amazon CloudWatch メトリクス](training-metrics.md)」を参照してください。

## アクセス許可
<a name="model-parallel-best-practices-permissions"></a>

モデル並列処理または「[SageMaker distributed training example notebooks](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/index.html)」を使用して SageMaker トレーニングジョブを実行するには、IAM ロールに次のような適切なアクセス権限があることを確認します。
+ [FSx for Lustre](https://aws.amazon.com/fsx/) を使用するには、[https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess) を追加します。
+ Amazon S3 をデータチャネルとして使用するには、[https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess) を追加します。
+ Docker を使用するには、独自のコンテナを構築して Amazon ECR にプッシュし、[https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess) を追加します。
+ SageMaker AI 機能のスイート全体を利用するためにフルアクセス権を取得するためには、[https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess) を追加します。