モデル並列処理の概要 - Amazon SageMaker

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

モデル並列処理の概要

モデル並列処理は、ディープラーニング (DL) モデルを複数の GPU とインスタンスに分割する分散型トレーニング方法です。 SageMaker モデルparallel ライブラリ v2 (SMP v2) は、ネイティブ PyTorch API および機能と互換性があります。これにより、 PyTorch Fully Sharded Data Parallel (FSDP) SageMaker トレーニングスクリプトをトレーニングプラットフォームに適応させて、SMP v2 によるパフォーマンスの向上を活用しやすくなります。

この紹介ページでは、モデルの並列処理に関する大まかな概要と、一般的にサイズが非常に大きいディープラーニング (DL) モデルをトレーニングする際に発生する問題の克服にどのように役立つかについて説明します。また、 SageMakerモデルparallel ストラテジーとメモリ消費量の管理に役立つモデルparallel ライブラリが提供するものの例も示します。

モデル並列処理とは

深層学習モデル (レイヤーとパラメータ) のサイズを大きくすると、コンピュータービジョンや自然言語処理などの複雑なタスクの精度が向上します。ただし、単一の GPU のメモリに収めることができる最大モデルサイズには制限があります。DL モデルをトレーニングする場合、GPU メモリの制限は次の点でボトルネックになる可能性があります。

  • モデルのメモリフットプリントはパラメーターの数に比例して増加するため、トレーニングできるモデルのサイズが制限されます。

  • これにより、トレーニング中の GPU ごとのバッチサイズが制限され、GPU の使用率とトレーニング効率が低下します。

単一の GPU でモデルをトレーニングすることに関連する制限を克服するために、DL モデルを複数のコンピュートノードに効率的に分散してトレーニングするのに役立つモデルparallel SageMaker ライブラリを提供しています。さらに、このライブラリでは、EFA がサポートするデバイスを使用して最適な分散トレーニングを実現できるため、低遅延、高スループット、OS バイパスによるノード間通信のパフォーマンスが向上します。

モデル並列処理を使用する前にメモリ要件を見積もってください。

SageMaker モデルparallel ライブラリを使用する前に、以下の点を考慮して、大規模な DL モデルの学習に必要なメモリ量を把握してください。

float16(FP16) や bfloat16 (BF16) などの自動混合精度と Adam オプティマイザーを使用するトレーニングジョブの場合、パラメーターごとに必要な GPU メモリは約 20 バイトで、次のように分類できます。

  • FP16 または BF16 のパラメーター (最大 2 バイト)

  • FP16 または BF16 のグラデーション (最大 2 バイト)

  • FP32 オプティマイザステート (Adam オプティマイザに基づく最大 8 バイト)

  • パラメータの FP32 コピー (最大 4 バイト) (optimizer apply (OA) オペレーションに必要)

  • 勾配の FP32 コピー (最大 4 バイト) (OA オペレーションに必要)

100 億個のパラメータを持つ比較的小さい DL モデルでも、少なくとも 200 GB のメモリが必要になることがあります。これは、単一の GPU で使用できる一般的な GPU メモリ (たとえば、40 GB/80 GB メモリを搭載した NVIDIA A100) よりもはるかに大きいメモリです。モデルとオプティマイザーの状態に必要なメモリに加えて、フォワードパスで生成されるアクティベーションなど、他のメモリ消費量もあります。必要なメモリは 200GB をはるかに超える場合があります。

分散型トレーニングでは、それぞれ NVIDIA A100 と H100 テンソルコア GPU を搭載した Amazon EC2 P4 インスタンスと P5 インスタンスを使用することをお勧めします。CPU コア、RAM、アタッチされたストレージボリューム、ネットワーク帯域幅などの仕様の詳細については、Amazon EC2 インスタンスタイプページの「Accelerated Computing」セクションを参照してください。SMP v2 がサポートするインスタンスタイプについては、を参照してください。サポートされるインスタンスタイプ

高速コンピューティングインスタンスを使用しても、Megatron-LM や T5 のように約 100 億個のパラメーターを持つモデルや、GPT-3 のように数千億個のパラメーターを持つさらに大規模なモデルでは、各 GPU デバイスのモデルレプリカを収めることはできません。

ライブラリがモデルの並列処理とメモリ節約の手法をどのように採用しているか

このライブラリは、さまざまなタイプのモデル並列処理機能と、オプティマイザ状態のシャーディング、アクティベーションチェックポイント、アクティベーションオフロードなどのメモリ節約機能で構成されています。これらの手法をすべて組み合わせることで、数千億のパラメータで構成される大規模なモデルを効率的にトレーニングできます。

シャードデータ並列処理

シャーディングデータ並列処理は、メモリを節約する分散トレーニング手法で、モデルの状態 (モデルパラメータ、勾配、およびオプティマイザの状態) をデータ並列グループ内の GPU 間で分割します。

SMP v2 は FSDP を通じてシャーディングデータ並列処理を実装し、ブログ記事「巨大モデルトレーニングのほぼ線形スケーリング」で説明した、スケールを意識したハイブリッドシャーディング戦略を実装するように拡張しています。 AWS

シャーディングされたデータ並列処理は、スタンドアロン戦略としてモデルに適用できます。さらに、NVIDIA A100 Tensor Core GPU を搭載した最もパフォーマンスの高い GPU インスタンスを使用している場合は、ml.p4d.24xlargeデータ並列処理 (SMDDP) ライブラリが提供する操作によるトレーニング速度の向上という利点を活用できます。ml.p4de.24xlargeAllGather SageMaker

シャーディングされたデータの並列処理を深く掘り下げて設定する方法、またはシャーディングデータ並列処理をテンソル並列処理や混合精度トレーニングなどの他の手法と組み合わせて使用する方法を学ぶには、を参照してくださいハイブリッドシャーディングデータ並列処理

専門家による並列処理

SMP v2 は NVIDIA Megatron と統合されており、ネイティブ FSDP API のサポートに加えて、エキスパートによる並列処理を実装しています。 PyTorch PyTorch FSDP トレーニングコードはそのままで、SMP エキスパート並列処理を適用して内部の Mixent of Experts (MoE) モデルのトレーニングを行うことができます。 SageMaker

MoE モデルは、複数のエキスパートで構成されるトランスフォーマーモデルの一種で、各エキスパートはニューラルネットワーク (通常はフィードフォワードネットワーク (FFN)) で構成されています。ルーターと呼ばれるゲートネットワークが、どのトークンをどのエキスパートに送るかを決定します。これらのエキスパートは、入力データの特定の側面を処理することに特化しています。これにより、モデルをより速くトレーニングし、計算コストを削減できると同時に、対応する高密度モデルと同じパフォーマンス品質を実現できます。また、エキスパート並列処理は、MoE モデルのエキスパートを GPU デバイス間で分割する並列処理手法です。

SMP v2 で MoE モデルを学習させる方法については、を参照してください。専門家による並列処理

テンソル並列性

テンソル並列処理は、個々のレイヤーを分割したりnn.Modules、デバイス間でparallel に実行したりします。次の図は、SMP ライブラリが 4 つの層からなるモデルを分割して双方向テンソル並列処理 () を実現する方法の最も単純な例を示しています。"tensor_parallel_degree": 2以下の図では、モデル並列グループ、テンソル並列グループ、データparallel グループの表記はそれぞれMP_GROUPTP_GROUP、です。DP_GROUP各モデルレプリカのレイヤーは 2 分割され、2 つの GPU に分散されます。このライブラリは、テンソル分散モデルのレプリカ間の通信を管理します。

のテンソル並列処理やその他のメモリ節約機能の詳細、およびコア機能の組み合わせの設定方法については PyTorch、を参照してください。テンソル並列性

アクティベーション、チェックポイント、オフロード

GPU メモリを節約するため、ライブラリはアクティベーションチェックポイントをサポートしています。これにより、フォワードパス中にユーザー指定モジュールの内部アクティベーションが GPU メモリに保存されるのを防ぐことができます。ライブラリはバックワードパス中にこれらのアクティベーションを再計算します。さらに、アクティベーションオフロードでは、保存されているアクティベーションを CPU メモリにオフロードし、バックワードパス時に GPU に戻すことで、アクティベーションメモリのフットプリントをさらに削減します。これらの機能の使用方法について詳しくは、「」と「」を参照してください。アクティベーションチェックポイント アクティベーションオフロード

モデルに適した手法の選択

適切な手法と構成を選択する方法の詳細については、を参照してくださいSageMaker 分散型モデル並列処理のベストプラクティス