次の方法で共有


Azure Machine Learning を使用した分散トレーニング

この記事では、分散トレーニングと、ディープ ラーニング モデルにおいて Azure Machine Learning がどのようにこれをサポートするかについて説明します。

分散トレーニングでは、ワークロードを分割してモデルをトレーニングし、ワーカー ノードと呼ばれる複数のミニ プロセッサ間で共有します。 これらのワーカー ノードは並行して動作し、モデルのトレーニングを高速化します。 従来の機械学習モデルには分散トレーニングを使用できますが、ディープ ニューラル ネットワークをトレーニングするための ディープ ラーニング など、コンピューティングと時間のかかるタスクに適しています。

ディープ ラーニングと分散トレーニング

分散トレーニングには主に、データ並列モデル並列の 2 つの種類があります。 ディープ ラーニング モデルでの分散トレーニングのために、Azure Machine Learning SDK in Python は、PyTorch および TensorFlow との統合をサポートしています。 どちらも人気があるフレームワークであり、分散トレーニングにデータ並列を採用していて、コンピューティング速度を最適化するために Horovod を使用できます。

分散トレーニングを必要としない機械学習モデルについては、「Azure Machine Learning を使用してモデルをトレーニングする」で Python SDK を使用してモデルをトレーニングするさまざまな方法を参照してください。

データ並列

データ並列は、2 つの分散トレーニングの内、より実装が簡単な方法で、ほとんどのユース ケースに対応できます。

この方法では、データをパーティションに分割します。パーティションの数は、コンピューティング クラスターまたは サーバーレス コンピューティングで使用可能なノードの合計数と等しくなります。 これらの各ワーカー ノードでモデルをコピーすると、各ノードはデータの独自のサブセットで動作します。 各ノードにはトレーニング対象のモデルをサポートするための容量が必要であることに注意してください。つまり、モデル全体が各ノードに適合している必要があります。

この手法を次の図に示します。

ワーカー ノードにコピーされたモデルを示すデータ並列処理の図。

各ノードは、それぞれのトレーニング サンプルとラベル付き出力の予測の間のエラーを個別に計算します。 各ノードは、エラーに基づいてモデルを更新し、対応するモデルを更新するためにそのすべての変更を他のノードに伝達する必要があります。 ワーカー ノードは、一貫したモデルがトレーニングされるように、バッチ計算の最後にモデル パラメーター (グラデーション) を同期する必要があります。

モデル並列

モデル並列処理 (ネットワーク並列処理とも呼ばれます) では、モデルを、異なるノードで同時に実行される異なる部分にセグメント化します。 各パーツは同じデータで実行されます。 このメソッドのスケーラビリティは、アルゴリズムのタスク並列化の程度によって異なります。 データの並列処理よりも実装が複雑です。

モデル並列の場合、ワーカーノードは共有パラメーターを同期するだけでよく、通常、各フォワードまたはバックワードプロパゲーションのステップごとに1回です。 また、各ノードは同じトレーニング データのモデルのサブセクションで動作するため、大規模なモデルは問題になりません。