SageMaker 分散モデル並列処理のベストプラクティス - Amazon SageMaker

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

SageMaker 分散モデル並列処理のベストプラクティス

SageMaker モデルparallel ライブラリを使用して分散トレーニングジョブを実行する場合は、次のガイドラインを使用してください。

特定のモデルに適切な設定をする

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

ヒント

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

大規模な 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 のシナリオの場合より多く必要なためです。その結果、必要なメモリが増加し、より小さなクラスターには収まらない可能性があります。

    詳細については、「オプティマイザ状態シャーディング」を参照してください。

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

    詳細については、「アクティベーションチェックポイント」を参照してください。

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

    詳細については、「テンソル並列処理」を参照してください。

ノード間でのパイプラインの並列処理
  • パイプラインの並列処理は、1 つのノード内と複数のノードの両方で実行できます。パイプライン並列処理をテンソル並列処理と組み合わせて使用する場合は、複数のノードにわたってパイプライン並列処理を実行し、個々のノード内でテンソル並列処理を維持することをお勧めします。

  • パイプラインの並列処理には、microbatchesactive_microbatches、およびprescaled_batch の 3 つのノブがあります。

    • テンソル並列処理をパイプラインの並列処理で使用する場合は、モデル並列グループごとのバッチサイズを増やし効率的なパイプライン処理を行えるよう、prescaled_batch をアクティブにすることをお勧めします。prescaled_batch を有効にすると、トレーニングスクリプトに設定されたバッチサイズは、prescaled_batch を使用しない場合の各ランクのバッチサイズの tp_size 倍になります。

    • microbatches の数を増やすことで、効率的なパイプライン処理とパフォーマンスの向上させることができます。有効なマイクロバッチサイズは、バッチサイズをマイクロバッチ数で割った値であることに注意してください。バッチサイズを一定に保ちながらマイクロバッチの数を増やすと、各マイクロバッチで処理されるサンプルが少なくなります。

    • active_microbatches 数は、パイプライン処理中に同時に処理されるマイクロバッチの最大数です。処理中のアクティブなマイクロバッチごとに、そのアクティベーションとグラデーションが GPU メモリを占有します。したがって、active_microbatches を増やすと、より多くの GPU メモリを消費します。

  • GPU と GPU のメモリの両方が十分に利用されていない場合、active_microbatches を増やしてパイプライン処理中の並列化を改善します。

  • パイプラインの並列処理でテンソル並列処理を使用する方法の詳細については、「テンソル並列処理とパイプライン並列処理の組み合わせ」を参照してください。

  • 前述のパラメータの説明については、SageMaker Python SDK ドキュメントの smdistributed「パラメータ」を参照してください。

アクティベーションを CPU へオフロードする
  • アクティベーションのチェックポイントやパイプラインの並列処理と組み合わせて使用します。オフロードとプリロードがバックグラウンドで確実に行われるよう、microbatches パラメータに 1 より大きい値を指定します。

  • アクティベーションをオフロードする場合、active_microbatches を増やすことができ、マイクロバッチの総数と一致することもあります。これは、チェックポイントされているモジュールと、モデルのパーティション化方法によって異なります。

    詳細については、「アクティベーションオフロード」を参照してください。

リファレンス設定

SageMaker モデル並列処理トレーニングチームは、GPT-2 モデル、シーケンス長 512、ボキャブラリーサイズ 50,000 での実験に基づいて、以下の参照点を提供しています。

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

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

トレーニングスクリプトの変更

  • SageMaker トレーニングスクリプトでモデルparallel ライブラリの機能を使用する前に、確認してください SageMaker 分散モデル並列処理ライブラリの設定のヒントと落とし穴

  • トレーニングジョブをより早く開始するには、SageMaker ローカルモードを使用してください。これにより、 SageMaker ノートブックインスタンス上でトレーニングジョブをローカルにすばやく実行できます。 SageMaker ノートブックインスタンスを実行している ML インスタンスの規模によっては、隠し幅、トランスフォーマーレイヤーの数、アテンションヘッドなどのモデル構成を変更してモデルのサイズを調整する必要がある場合があります。大規模なクラスターを使用してフルモデルのトレーニングを行う前に、縮小モデルがノートブックインスタンスで正常に動作するか検証します。

SageMaker コンソールと Amazon を使ったトレーニングJob モニタリングとロギング CloudWatch

CPU メモリ使用率、GPU メモリ使用率、GPU 使用率などのシステムレベルのメトリクスを監視するには、コンソールで提供される視覚化を使用してください。SageMaker

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

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

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

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

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

詳細については、「Amazon CloudWatch メトリクスを使用したトレーニングジョブのモニタリングと分析」を参照してください。

アクセス許可

SageMaker SageMaker モデル並列処理または分散型トレーニングサンプルノートブックを使用してトレーニングジョブを実行するには、IAM ロールに次のような適切な権限があることを確認してください。