用語集

分散トレーニング

分散トレーニングでAIトレーニングを加速複雑なMLプロジェクトにおいて、トレーニング時間を短縮し、モデルを拡張し、リソースを最適化する方法を学びましょう。

Ultralytics HUB で
を使ってYOLO モデルをシンプルにトレーニングする。

さらに詳しく

分散学習は、機械学習(ML)において、特にディープラーニング(DL)で一般的な大規模で複雑なモデルの学習プロセスを大幅に高速化するために使用される手法である。データセットが膨大になり、変換器や大規模な畳み込みネットワークのようなモデルのサイズが大きくなると、CPUのような単一のプロセッサでそれらをトレーニングすることは難しくなる。 CPUや強力な GPUなどの単一のプロセッサーでは、非現実的なほど長い時間(数日、数週間、あるいは数カ月)を要することがある。分散トレーニングは、計算負荷を複数の処理ユニットに分割することで、このボトルネックを克服する。これらのユニット(多くの場合GPU)は、単一の強力なマシン内に存在することも、ネットワークで接続された複数のマシンに分散させることも可能で、多くの場合クラウドコンピューティングリソースを利用する。

分散トレーニングの仕組み

分散トレーニングの基本原理は並列処理であり、トレーニングタスクを分解して複数のパートを同時に実行できるようにすることである。1つのプロセッサがすべてのデータと計算を順次処理するのではなく、"ワーカー "と呼ばれる複数のプロセッサで作業を分担する。これを実現するための主な戦略は2つある:

  • データ並列:これは最も一般的なアプローチである。モデルの完全なコピーが各ワーカーに配置される。トレーニングデータセットは小さなチャンクに分割され、各ワーカーはモデルのローカルコピーを使用して、割り当てられたチャンクを処理します。ワーカーは自分のデータサブセットに基づいてモデルの重みの更新を計算する。これらの更新値(勾配)はすべてのワーカーに集約され(多くの場合平均化される)、マスターモデルの更新やすべてのモデルコピーの同期に使用される。これにより、より大きなバッチサイズを効率的に処理することができる。PyTorch ようなフレームワークは分散データ並列(DDP)を提供し、TensorFlow データ並列を実装する様々な分散学習戦略を提供する。ワーカー間の効率的な通信は非常に重要であり、多くの場合、NVIDIA Collective Communications Library (NCCL)のようなライブラリによって管理されます。
  • モデル並列:この戦略は通常、モデルが非常に大きく、1つのGPUメモリに収まらない場合に採用される。モデル全体を複製する代わりに、モデルの異なる部分(レイヤーなど)を異なるワーカーに配置します。データはフォワードパスとバックワードパスの両方で、ワーカーをまたいでこれらの部分を順次流れていきます。このアプローチはデータ並列よりも実装が複雑だが、真に巨大なモデルをトレーニングするためには必要である。フレームワークの中には、TensorFlowモデル並列へのアプローチのように、支援するツールを提供するものもあり、パイプライン並列のようなテクニックがよく使われる。

実世界での応用

分散トレーニングは、多くの最先端の人工知能(AI)アプリケーションに不可欠である:

  • 大規模言語モデル(LLM)のトレーニング: OpenAIのGPT-4や GoogleGeminiのようなモデルは、数十億から数兆のパラメータを持っています。これらをトレーニングするには、何千ものGPUに計算を長時間分散させる必要があります。これは、自然言語処理(NLP)機械翻訳、高度なチャットボットの構築などのタスクに不可欠です。
  • 高度なコンピュータビジョンモデル:以下のような最先端のコンピュータビジョンモデルをトレーニングします。 Ultralytics YOLOのような最先端のコンピュータビジョンモデルや、画像セグメンテーションのための複雑なモデルを、ImageNetや COCOのような大規模なデータセットでトレーニングする場合、分散トレーニングは非常に有効です。例えば、自律走行車用の物体検出モデルのトレーニングには、膨大な量の画像データが含まれ、高い精度が要求されるため、合理的な時間枠で結果を得るためには、複数のGPUでの分散トレーニングが必要です。これは、医療画像解析のような特殊な分野にも当てはまります。
  • 推薦システム:NetflixやAmazonのような企業は、パーソナライズされたレコメンデーションを生成するために、ユーザーとのインタラクションデータに基づいて複雑なモデルをトレーニングする。このようなデータの規模は、多くの場合、分散型アプローチを必要とする。
  • 科学的コンピューティング:気候モデリング、物理学、創薬などの分野における大規模シミュレーションでは、分散MLトレーニングで使用されるものと同様の分散コンピューティング原理が活用されることが多い。

分散型トレーニングと他のトレーニング方法との比較

分散型トレーニングと関連するコンセプトを区別することが重要だ:

  • 統合学習:どちらも複数のデバイスを含むが、Federated Learningは、データが分散化されており、データプライバシー上の懸念から中央の場所に移動できない(または移動すべきでない)シナリオのために設計されている(例えば、携帯電話に保持されているユーザーデータでモデルをトレーニングする)。連携学習では、モデルの更新はデバイス上でローカルに計算され、集計のために中央サーバーに送り返されるが、生のデータがデバイスから離れることはない。分散学習では通常、(データセンターやクラウドなどの)計算クラスタにデータを移動して分散できることを前提としている。フレームワークの例として、TensorFlow Federatedをチェックしてください。
  • シングル・デバイス・トレーニング:これは、単一のCPU またはGPUトレーニングプロセス全体を実行する従来の方法です。セットアップは簡単ですが(Ultralytics Quickstartを参照)、大規模なモデルやデータセットでは、時間とメモリの制約により実行不可能になります。

ツールと実装

分散型トレーニングの実施は、さまざまなツールやプラットフォームによって促進される:

  • MLフレームワーク:以下のようなコアフレームワーク PyTorchTensorFlowやTensorFlowのようなコアフレームワークは、分散トレーニングAPIをビルトインでサポートしている。
  • 専門ライブラリ:Uberが開発したHorovodのようなライブラリーは、分散ディープラーニングにフレームワークを問わないアプローチを提供する。
  • クラウドプラットフォーム: AWSGoogle CloudMicrosoft Azureなどの主要なクラウドプロバイダーは、大規模な分散トレーニングに最適化されたマネージドMLサービスとインフラを提供している。
  • MLOpsプラットフォーム: Ultralytics HUBのようなプラットフォームは、データセットの管理、モデルの選択、トレーニングジョブの起動のためのインターフェースを提供し、プロセスを簡素化します。分散トレーニングを効果的に管理するには、優れたMLOpsの実践が鍵となる。

分散トレーニングは、大規模なトレーニングを実現可能かつ効率的にすることで、今日の最も強力なAIモデルの開発を可能にする基礎技術である。

すべて読む