この記事では、分散トレーニングと、ディープ ラーニング モデルにおいて Azure Machine Learning がどのようにこれをサポートするかについて説明します。
分散トレーニングでは、ワークロードを分割してモデルをトレーニングし、ワーカー ノードと呼ばれる複数のミニ プロセッサ間で共有します。 これらのワーカー ノードは並行して動作し、モデルのトレーニングを高速化します。 従来の機械学習モデルには分散トレーニングを使用できますが、ディープ ニューラル ネットワークをトレーニングするための ディープ ラーニング など、コンピューティングと時間のかかるタスクに適しています。
ディープ ラーニングと分散トレーニング
分散トレーニングには主に、データ並列とモデル並列の 2 つの種類があります。 ディープ ラーニング モデルでの分散トレーニングのために、Azure Machine Learning SDK in Python は、PyTorch および TensorFlow との統合をサポートしています。 どちらも人気があるフレームワークであり、分散トレーニングにデータ並列を採用していて、コンピューティング速度を最適化するために Horovod を使用できます。
分散トレーニングを必要としない機械学習モデルについては、「Azure Machine Learning を使用してモデルをトレーニングする」で Python SDK を使用してモデルをトレーニングするさまざまな方法を参照してください。
データ並列
データ並列は、2 つの分散トレーニングの内、より実装が簡単な方法で、ほとんどのユース ケースに対応できます。
この方法では、データをパーティションに分割します。パーティションの数は、コンピューティング クラスターまたは サーバーレス コンピューティングで使用可能なノードの合計数と等しくなります。 これらの各ワーカー ノードでモデルをコピーすると、各ノードはデータの独自のサブセットで動作します。 各ノードにはトレーニング対象のモデルをサポートするための容量が必要であることに注意してください。つまり、モデル全体が各ノードに適合している必要があります。
この手法を次の図に示します。
各ノードは、それぞれのトレーニング サンプルとラベル付き出力の予測の間のエラーを個別に計算します。 各ノードは、エラーに基づいてモデルを更新し、対応するモデルを更新するためにそのすべての変更を他のノードに伝達する必要があります。 ワーカー ノードは、一貫したモデルがトレーニングされるように、バッチ計算の最後にモデル パラメーター (グラデーション) を同期する必要があります。
モデル並列
モデル並列処理 (ネットワーク並列処理とも呼ばれます) では、モデルを、異なるノードで同時に実行される異なる部分にセグメント化します。 各パーツは同じデータで実行されます。 このメソッドのスケーラビリティは、アルゴリズムのタスク並列化の程度によって異なります。 データの並列処理よりも実装が複雑です。
モデル並列の場合、ワーカーノードは共有パラメーターを同期するだけでよく、通常、各フォワードまたはバックワードプロパゲーションのステップごとに1回です。 また、各ノードは同じトレーニング データのモデルのサブセクションで動作するため、大規模なモデルは問題になりません。