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

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

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

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

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

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

データ並列

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

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

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

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

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

モデル並列

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

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