Amazon SageMaker AI での分散トレーニング - Amazon SageMaker AI

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

Amazon SageMaker AI での分散トレーニング

SageMaker AI は分散トレーニングライブラリを提供し、コンピュータビジョン (CV) や自然言語処理 () など、深層学習タスク用のさまざまな分散トレーニングオプションをサポートしていますNLP。 SageMaker AI の分散トレーニングライブラリを使用すると、高度にスケーラブルで費用対効果の高いカスタムデータ並列およびモデル並列深層学習トレーニングジョブを実行できます。()、、 (DDP)、パラメータサーバーなど PyTorch DistributedDataParalleltorchrun、他の分散トレーニングフレームワークMPImpirunやパッケージを使用することもできます。以下のセクションでは、基本的な分散トレーニングの概念について説明します。ドキュメント全体で、手順と例は、Python SageMaker を使用して深層学習タスク用の分散トレーニングオプションを設定する方法に焦点を当てていますSDK。

ヒント

機械学習 (ML) のトレーニングや処理ジョブ全般の分散コンピューティングのベストプラクティスについては、「 SageMaker AI による分散コンピューティングのベストプラクティス」を参照してください。

分散トレーニングの概念

SageMaker AI の分散トレーニングライブラリでは、次の分散トレーニングの用語と機能を使用します。

データセットとバッチ

  • トレーニングデータセット: モデルのトレーニングに使うすべてのデータ。

  • グローバルバッチサイズ: GPUsクラスター内の に送信する各反復でトレーニングデータセットから選択されたレコードの数。これは、各反復での勾配の計算に使われるレコードの数です。データ並列処理を使う場合、モデルレプリカの総数にレプリカ単位のバッチサイズを掛けたものと等しくなります: global batch size = (the number of model replicas) * (per-replica batch size) 。グローバルバッチサイズの 1 つのバッチは、機械学習の文献ではよくミニバッチと呼ばれます。

  • レプリカ単位のバッチサイズ: データ並列処理を使う場合、これは各モデルレプリカに送信されるレコードの数です。各モデルレプリカは、このバッチでフォワードパスとバックワードパスを実行して、重みの更新を計算します。結果として得られた重みの更新は、次のレプリカ単位のバッチセットが処理される前に、すべてのレプリカ間で同期 (平均化) されます。

  • マイクロバッチ: ミニバッチのサブセット、またはモデルとデータのハイブリッド並列処理が使用されている場合は、レプリカ単位サイズのバッチのサブセットです。 SageMaker AI の分散モデル並列処理ライブラリを使用すると、各マイクロバッチがトレーニングパイプライン one-by-oneに供給され、ライブラリのランタイムで定義された実行スケジュールに従います。

トレーニング

  • エポック: データセット全体を通した 1 回のトレーニングサイクル。エポックごとに複数の反復を行うのが一般的です。トレーニングで使うエポックの数は、モデルやユースケースによって異なります。

  • 反復: グローバルバッチサイズのバッチ (ミニバッチ) のトレーニングデータを使って実行される 1 回のフォワードパスとバックワードパス。トレーニング中に実行される反復回数は、グローバルバッチサイズとトレーニングに使用されるエポックの数によって決まります。例えば、データセットに 5,000 のサンプルが含まれており、500 のグローバルバッチサイズを使う場合、1 つのエポックを完了するには 10 回の反復が必要です。

  • 学習レート: モデルの計算誤差に応じて重みを変化させる量を動かす変数。学習レートは、モデルの収束能力だけでなく、収束の速度と最適性にも重要な役割を果たします。

インスタンスと GPUs

  • インスタンス: AWS 機械学習コンピューティングインスタンスノードとも呼ばれます。

  • クラスターサイズ: SageMaker AI の分散トレーニングライブラリを使用する場合、これはインスタンスの数に各インスタンスGPUsの の数を掛けたものです。例えば、トレーニングジョブで 2 つの ml.p3.8xlarge インスタンスを使用し、GPUsそれぞれに 4 つのインスタンスがある場合、クラスターサイズは 8 です。クラスターサイズを大きくするとトレーニング時間が短縮されますが、インスタンス間の通信を最適化する必要があります。そうしないと、ノード間の通信によってオーバーヘッドが増し、トレーニング時間が遅くなる可能性があります。 SageMaker AI 分散トレーニングライブラリは、Amazon ML EC2 コンピューティングインスタンス間の通信を最適化するように設計されており、デバイス使用率が高く、トレーニング時間が短縮されます。

分散トレーニングソリューション

  • データ並列処理: 複数の Amazon EC2ML インスタンスで構成されるコンピューティングクラスターGPUs内の複数の にトレーニングデータセットを分割する分散トレーニングの戦略。各 にはモデルのレプリカGPUが含まれ、トレーニングデータのさまざまなバッチを受け取り、フォワードパスとバックワードパスを実行し、同期のために他のノードと重みの更新を共有してから、次のバッチ、最終的には別のエポックに進みます。

  • モデル並列処理: 複数の Amazon EC2ML インスタンスで構成されるコンピューティングクラスターGPUs内の複数の にまたがってモデルを分割する分散トレーニングの戦略。モデルは複雑で、隠れレイヤーや重みの数が多く、1 つのインスタンスのメモリに収まらない場合があります。各 はモデルのサブセットGPUを保持し、データフローと変換が共有およびコンパイルされます。モデル並列処理の効率は、GPU使用率とトレーニング時間の観点から、モデルのパーティション化方法と、フォワードパスとバックワードパスの実行に使用される実行スケジュールに大きく依存します。

  • パイプライン実行スケジュール (パイプライン処理): パイプライン実行スケジュールは、モデルトレーニング中に全デバイスにわたって行われる計算 (マイクロバッチ) とデータ処理の順序を決定します。パイプライン化は、モデル並列処理で真の並列化を実現し、異なるデータサンプルでGPUsコンピューティングを同時に実行することで、シーケンシャル計算によるパフォーマンス損失を克服する手法です。詳細については、「パイプライン実行スケジュール」を参照してください。

高度な概念

Machine Learning (ML) の実務者は、モデルをトレーニングするときに、モデルサイズのスケーリングトレーニングデータのスケーリングという 2 つのスケーリングの課題に直面することがよくあります。モデルのサイズと複雑さは精度を向上させる可能性がありますが、単一の CPUまたは に収まるモデルサイズには制限がありますGPU。さらに、モデルサイズをスケーリングすると、計算量が増え、トレーニング時間が長くなる可能性があります。

トレーニングにはすべてのトレーニングデータをメモリに取り込む必要があるため、すべてのモデルがトレーニングデータのスケーリングを同等にうまく処理できるわけではありません。このようなモデルは、垂直方向にのみ、ますます大きなインスタンスタイプにスケールします。ほとんどの場合、トレーニングデータをスケールすると、トレーニング時間が長くなります。

深層学習 (DL) は、複数レイヤーの人工ニューラルネットワークからなる 機械学習アルゴリズムの特有のファミリーです。最も一般的なトレーニング方法は、ミニバッチ確率的勾配降下法 () を使用することですSGD。ミニバッチ ではSGD、モデルは誤差を減らす方向に係数の小さな反復的な変更を行うことでトレーニングされます。これらの反復は、ミニバッチと呼ばれるトレーニングデータセットの同じサイズのサブサンプルで実行されます。ミニバッチごとに、モデルはミニバッチの各レコードで実行され、その誤差が測定され、誤差の勾配が推定されます。次に、ミニバッチのすべてのレコードにわたる平均勾配が測定され、各モデル係数の更新方向が示されます。トレーニングデータセットの 1 つのフルパスは、エポックと呼ばれます。モデルトレーニングは通常、数十から数百のエポックで構成されます。ミニバッチSGDにはいくつかの利点があります。1 つ目は、反復的な設計により、トレーニング時間が理論的にデータセットサイズの線形になります。次に、特定のミニバッチでは、各レコードはモデルによって個別に処理され、最終的な勾配平均以外には、レコード間通信を必要としません。そのため、ミニバッチの処理は、並列化と分散に特に適しています。 

ミニバッチのレコードを異なるコンピューティングデバイスに分散してSGDトレーニングを並列化することは、データ並列分散トレーニングと呼ばれ、最も一般的に使用される DL 分散パラダイムです。データ並列トレーニングは、ミニバッチサイズをスケールし、各ミニバッチをより速く処理するための関連する分散戦略です。ただし、データ並列トレーニングには、すべてのワーカーから来る勾配を使ってミニバッチ勾配の平均を計算し、それをすべてのワーカーに伝達しなければならない余分な複雑さが伴います。これは allreduce と呼ばれるステップで、トレーニングクラスターがスケールされるほどオーバーヘッドが増え、不適切な実装や不適切なハードウェアの減少で、トレーニング時間に大きな悪影響を与える可能性があります。 

データ並列ではSGD、デベロッパーは少なくともモデルと 1 つのレコードを、単一の CPUや などのコンピューティングデバイスに収めることができる必要がありますGPU。自然言語処理 (NLP) の大規模トランスフォーマーや高解像度画像でのセグメンテーションモデルなど、非常に大規模なモデルをトレーニングする場合、これが不可能な状況が発生する可能性があります。このような場合、モデルを複数のコンピューティングデバイスに分割することで、ワークロードを分散させる方法があります。この方法は、モデル並列分散トレーニングと呼ばれます。