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

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

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

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

分散型トレーニングに適した構成を設定する

SMP v2 が提供する分散型トレーニング技術を適用するための最適な出発点を見積もり、見つけるには、以下のリストを確認してください。各リスト項目では、を使用することの利点と、 SageMaker モデル並列処理ライブラリ v2 の主な機能考えられるトレードオフについて説明しています。

設定のヒント

このセクションでは、グローバルなバッチサイズ要件を満たす最適なスループットを実現する最適なモデル構成を決定する方法に関するガイドラインを示します。

まず、モデルのサイズに関係なく、以下の設定をお勧めします。

  1. 使用できる最も強力なインスタンスタイプを使用してください。

  2. 混合精度は常にオンにしてください。パフォーマンスとメモリ削減に大きなメリットがあるからです。bfloat16float16よりも精度が高いので使用することをおすすめします。

  3. に示すように、必要に応じて (NCCL を使用する代わりに) SageMaker 分散データ並列処理ライブラリを有効にしてくださいAWS インフラストラクチャに最適化された SMDDP ライブラリとの互換性ただし、 tensor-parallelism-only ユースケース (と) は例外です。hybrid_shard_degree = 1 tensor_paralle_degree > 1

  4. モデルに約 600 億を超えるパラメーターがある場合は、遅延パラメータの初期化を使用することをおすすめします。また、遅延パラメーター初期化を使用すると、どのモデルでも初期化の速度を上げることができます。

  5. 有効にすることをおすすめします。アクティベーションチェックポイント

モデルのサイズによっては、以下のガイダンスから始めることをおすすめします。

  1. シャードデータ並列処理を使用してください。

    1. GPU メモリに収まるバッチサイズに応じて、適切なシャーディングデータのparallel 度を選択します。通常は、ネットワーク通信によるオーバーヘッドを最小限に抑えながら、モデルが GPU メモリに収まる最小次数から始める必要があります。キャッシュフラッシュが発生しているという警告が表示される場合は、シャーディング度を上げることをおすすめします。

    2. ローカルバッチの最大サイズと、必要なグローバルバッチサイズ (ある場合) world_size に基づいて決定してください。

    3. アクティベーションオフロードを試してみることができます。シナリオによっては、シャーディングの度合いを上げなくても必要なメモリ量に対応できるため、通信量が減ります。

  2. で紹介したように、 PyTorch FSDP のシャードデータ並列処理と SMP v2 のテンソル並列処理を同時に使用します。テンソル並列性

    1. 大規模なクラスターでトレーニングを行う場合、FSDP だけではグローバルバッチサイズが大きくなりすぎて、モデルの収束の問題が発生する可能性があります。通常、ほとんどの研究ではバッチサイズを 400 万トークン未満に抑えています。この場合、SMP v2 のテンソル並列処理で PyTorch FSDP を構成してバッチサイズを小さくすることで問題を解決できます。

      たとえば、ノード数が 256 でシーケンス長が 4096 の場合、GPU あたり 1 つのバッチサイズでも、グローバルバッチサイズは 800 万トークンになります。ただし、次数2のテンソル並列処理を使用し、テンソルparallel グループごとにバッチサイズを1つにすると、これはGPUあたりバッチサイズの1/2になり、400万トークンに相当します。

    2. 8k のように長いコンテキスト長でトレーニングを行うと、16k のアクティベーションメモリが非常に多くなる可能性があります。FSDP はアクティベーションをシャードしないため、アクティベーションによって GPU がメモリ不足になる可能性があります。このようなシナリオでは、SMP v2 のテンソル並列処理で PyTorch FSDP を構成することで効率的にトレーニングできます。

リファレンス設定

SageMaker モデル並列処理トレーニングチームは、Llama 2 モデルを SMP トランスフォーマーモデルに変換し、シーケンス長 4096 で混合精度 (FP16 または BF16) ml.p4d.24xlarge のインスタンスでトレーニングした実験に基づいてtorch.sagemaker.transform、以下の参照点を提供します。

モデル モデルサイズ (モデルパラメータの数) インスタンスの数 シャーディングデータ並列度 テンソル並列度 アクティベーションチェックポイント アクティベーションオフロード バッチサイズ
ラマ 2 7B 1 8 1 TRUE FALSE 4
70B 32 256 1 TRUE FALSE 2
175 64 128 4 TRUE TRUE 6

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

SageMaker コンソールと Amazon を使用してトレーニングジョブのモニタリングとロギングを行う CloudWatch

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

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

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

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

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

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

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

アクセス許可

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