翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker 分散型モデル並列処理のベストプラクティス
SageMaker モデルparallel ライブラリ v2 (SMP v2) を使用して分散トレーニングジョブを実行する場合は、次のガイドラインを使用してください。
分散型トレーニングに適した構成を設定する
SMP v2 が提供する分散型トレーニング技術を適用するための最適な出発点を見積もり、見つけるには、以下のリストを確認してください。各リスト項目では、を使用することの利点と、 SageMaker モデル並列処理ライブラリ v2 のコア機能考えられるトレードオフについて説明しています。
設定のヒント
このセクションでは、グローバルなバッチサイズ要件を満たす最適なスループットを実現する最適なモデル構成を決定する方法に関するガイドラインを示します。
まず、モデルのサイズに関係なく、以下の設定をお勧めします。
-
使用できる最も強力なインスタンスタイプを使用してください。
-
混合精度は常にオンにしてください。パフォーマンスとメモリ削減に大きなメリットがあるからです。
bfloat16
float16
よりも精度が高いので使用することをおすすめします。 -
に示すように、必要に応じて (NCCL を使用する代わりに) SageMaker 分散データ並列処理ライブラリを有効にしてください。AWS インフラストラクチャに最適化されたSMDDPライブラリとの互換性ただし、 tensor-parallelism-only ユースケース (と) は例外です。
hybrid_shard_degree = 1
tensor_paralle_degree > 1
-
モデルに約 600 億を超えるパラメーターがある場合は、遅延パラメータの初期化を使用することをおすすめします。また、遅延パラメーター初期化を使用すると、どのモデルでも初期化の速度を上げることができます。
-
有効にすることをおすすめします。アクティベーションチェックポイント
モデルのサイズによっては、以下のガイダンスから始めることをおすすめします。
-
シャードデータ並列処理を使用してください。
-
GPU メモリに収まるバッチサイズに応じて、適切なシャーディングデータのparallel 度を選択します。通常は、ネットワーク通信によるオーバーヘッドを最小限に抑えながら、モデルが GPU メモリに収まる最小次数から始める必要があります。キャッシュフラッシュが発生しているという警告が表示される場合は、シャーディング度を上げることをおすすめします。
-
ローカルバッチの最大サイズと、必要なグローバルバッチサイズ (ある場合)
world_size
に基づいて決定してください。 -
アクティベーションオフロードを試してみることができます。シナリオによっては、シャーディングの度合いを上げなくても必要なメモリ量に対応できるため、通信量が減ります。
-
-
で紹介したように、 PyTorch FSDP のシャードデータ並列処理と SMP v2 のテンソル並列処理を同時に使用します。テンソル並列性
-
大規模なクラスターでトレーニングを行う場合、FSDP だけではグローバルバッチサイズが大きくなりすぎて、モデルの収束の問題が発生する可能性があります。通常、ほとんどの研究ではバッチサイズを 400 万トークン未満に抑えています。この場合、SMP v2 のテンソル並列処理で PyTorch FSDP を構成してバッチサイズを小さくすることで問題を解決できます。
たとえば、ノード数が 256 でシーケンス長が 4096 の場合、GPU あたり 1 つのバッチサイズでも、グローバルバッチサイズは 800 万トークンになります。ただし、次数2のテンソル並列処理を使用し、テンソルparallel グループごとにバッチサイズを1つにすると、これはGPUあたりバッチサイズの1/2になり、400万トークンに相当します。
-
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
-
左のナビゲーションペインで [トレーニング] を選択します。
-
[トレーニングジョブ] を選択します。
-
メインペインで、詳細を表示するトレーニングジョブ名を選択します。
-
メインペインの [モニタリング] セクションを参照し、自動ビジュアライゼーションを確認します。
-
トレーニングジョブログを表示するには、[モニタリング] セクションの [ログの表示] を選択します。内のトレーニングジョブの分散トレーニングジョブログにアクセスできます。 CloudWatchマルチノード分散トレーニングを開始した場合は、[algo-n-1234567890] 形式のタグを含む複数のログストリームが表示されます。algo-1 ログストリームは、メイン (0 番目) ノードからのトレーニングログを追跡します。
詳細については、「トレーニングジョブのモニタリングと分析のための Amazon CloudWatch メトリクス」を参照してください。
アクセス許可
SageMaker モデル並列処理を使用してトレーニングジョブを実行するには、IAM ロールに次のような適切な権限があることを確認してください。
-
FSx for Lustre
を使用するには、 AmazonFSxFullAccess
を追加します。 -
Amazon S3 をデータチャネルとして使用するには、
AmazonS3FullAccess
を追加します。 -
Docker を使用するには、独自のコンテナを構築して Amazon ECR にプッシュし、
AmazonEC2ContainerRegistryFullAccess
を追加します。 -
すべての機能を使用するためのフルアクセス権を付与するには、を追加してください。 SageMaker
AmazonSageMakerFullAccess