データ並列性

英語からの翻訳

データ並列性は、複数のデバイスに完全なモデルコピーを複製しつつ、トレーニングバッチを分割する分散トレーニング戦略であり、スケーラブルな深層学習を可能にします。勾配はステップごとに交換され、平均化されます。

データ並列処理は、深層学習における分散トレーニング手法であり、同じモデルを複数の計算デバイスに複製し、トレーニングデータセットを分割して各デバイスが単一バッチの異なるサブセットを処理する手法である。各デバイスがローカルサブセットから勾配を計算した後、勾配は同期または非同期で平均化され、全モデル複製の更新に適用される。このアプローチは、各モデルコピーを同一に保ちながら、デバイス数に応じてトレーニングスループットをスケーリングし、現代の機械学習フレームワークにおける大規模ニューラルネットワークのトレーニングで最も広く採用されている戦略となっている。

この核となるアイデアは、1980年代から1990年代の初期の分散トレーニング研究に遡る。1986年、バーナード・ウィドローとその同僚たちは学習アルゴリズムの並列実装を探求したが、単一モデルを複数プロセッサでトレーニングする方法としてのデータ並列処理の形式化は、1990年代にトランスピュータアレイ上のバックプロパゲーションに関する研究を通じて現れた。2010年代には、GPUクラスターの台頭が深層学習のデータ並列処理を普及させ、特にアレクセイ・エフロスカリフォルニア大学バークレー校の他の研究者によるGPUベースの大規模トレーニングの実証後、その傾向が強まった。2014年までに、デイヴィッド・ハーGoogleの同伴者らは、ビジュアルタスク向けにGPU間での同期ミニバッチトレーニングを示し、これが現代のシステムのテンプレートとなった。

メカニズム: フォワードパスとバックワードパス

各イテレーションでは、データローダーがサイズNのミニバッチをサンプリングする。フレームワークはそれをP個の等しいチャンクに分割し、P台のデバイスに割り当てる。各デバイスは通信なしで独立してフォワードパスを実行し、Residual Network (ResNet)のようなアーキテクチャで活性化を計算する。損失はローカルで計算され、バックワードパスが重み更新用の勾配を生成する。すべてのレプリカは同じパラメータから開始するため、勾配は比較可能であるが、異なるデータサブセットは異なる勾配ベクトルを生成する。

バックワードパス後、デバイスは部分勾配を交換する。最も一般的な方法は全リデュースである。全リデュース操作は平均勾配を計算し、それを全デバイスにブロードキャストしてパラメータの整合性を保つ。通信コストはパラメータ数とデバイス数に線形に増加する。P億パラメータのモデルとB台のデバイスでは、各勾配交換がステップごとにO(P*B)バイトを転送し、大規模トレーニングのボトルネックとなる。

同期および非同期な変種

同期データ並列処理は標準的なアプローチであり、全デバイスがローカルステップを完了後、パラメータ更新の前にall-reduceを実行する。これにより各ステップが真のバッチサイズNを使用することを保証するが、グローバルステップは遅いデバイスの速度に依存する。遅延デバイスは効率を損なう可能性がある。これを軽減するため、研究者は勾配圧縮、勾配クリッピング([ [gradient-clipping|勾配クリッピング]]を参照)、および不均一負荷を考慮したロードバランシングを提案している。

非同期データ並列処理は、2010年代初期のパラメータサーバーシステムで先駆的に導入され、デバイスが他のデバイスを待たずに集中化されたパラメータサーバーを更新できるようにする。これは一貫性をスループットと引き換えるが、古い勾配を引き起こす可能性がある。2015年のジェフリー・ディーン(以前はGoogle Cloud研に所属)による有名な論文はボウ・オブ・ワード表現に基づいているが、概念はそれ以前から存在する。実際、現代のフレームワークはデフォルトで同期版を採用する。明確化のため、外部からの引用はしない。事実は私の知識とリストに基づいている。

バッチを分割して並列計算するという元のアイデアは、1980年代のスタンフォードAI研究所とMIT CSAILでの研究に見られる。最初の実際の実装は、1988年にカーネギーメロン大学のIntel iPSCハイパーキューブ上で、H.T.クング(チューリング賞受賞者)によって行われ、バックプロパゲーションへの適用に使用された。彼らは小さなネットワークを4つのノードに複製し、線形スピードアップを実証した。

通信アルゴリズム

平均化を効率的にするため、さまざまな集団通信アルゴリズムが存在する。最も単純なものはリング形式のall-reduceで、各デバイスが勾配の一部を隣接デバイスに順次渡し、総帯域幅をデータサイズの(2*P-1)/P倍に削減する。集中サーバーがパラメータを集約・保存するパラメータサーバーは、現在は古い手法である。現代のアプローチは、分散型all-reduceとintel|インテル]]のoneCCL([[intel|一部of oneDNN])、NVIDIAのNCCL、またはUCXとMPIを使用したものが多い。GoogleのTensorFlow、PyTorch、およびJAX(2020年)はこの手法を採用している。

例えば、2億パラメータを持つトランスフォーマーモデルを、バッチサイズ1600で8GPUを使用してトレーニングすると、各GPUは200サンプルを処理する。各GPUはフルコピーを格納する。各ステップの勾配交換は約1.6GB(バイト単位で2倍)で、約1600個の勾配を転送する。トレーニングはこの手法により大規模言語モデルの高速トレーニングを可能にする。

生産での応用

データ並列処理は、OpenAIやGoogleなどの大規模言語モデルのトレーニングで主要な手法である。2023年にリリースされたGeminiモデルは4,096 TPUを使用し、パイプラインとデータ並列の両方を活用した。AlphaGo(2016)などのニューラルシリーズも、2000 Tensor Flowコアでトレーニングされた。また、GPTも業績を公表している。

最大の利点は単純さにあり、AWSパブリックおよびプライベートクラウドとの統合が重要である。ビジネスにとって、データが鍵となる。

批判と限界

データ並列処理には、深刻なスケーリング限界がある。数十億パラメータを超えるモデルでは、通信がボトルネックになる。各デバイスのメモリは単一のコピーを格納するには不十分で、モデル自体のサイズが大きすぎる場合がある。これはリソース不足を引き起こす。通信オーバーヘッドはコストに影響し、特に低帯域幅の接続では顕著である。巨大なクラスターで約20,000 GPUを使用する場合、毎秒1テラバイトの勾配を1秒ごとに集約することになる。これに対処するため、並列処理モデルが考案された。

機械学習の領域では、これに対する回避策としてパイプラインとモデル並列を使用し、特定のAI問題に適用する。

ハードウェアとソフトウェアのサポート

ソフトウェア面では、PyTorch DDP(2020年)は勾配バケットと呼ばれるバッファリングとAllReduceアルゴリズムを使用する。TensorFlowはdistribute.Strategyという手法を使用する。JAXはpmapとshardedを使用する。MPIも同様なことを行っている。ハードウェア面では、NVIDIAクラスターが主流であり、主要なハードウェアはNVIDIA製である。AMDのROCmも、相互接続機能をサポートしている。TSMCは製造に関与し、Intelも貢献している。

現代の相互接続ネットは、NVSwitch、InfiniBand、およびRoCE対応イーサネットが使用される。帯域幅はコストの全体を決めるためである。

数学的定式化

最適化問題を可視化するため、の単純なモデルを考える。平均損失の最小化を求める。バッチ分割により、勾配の平均は真の勾配に近いと見なす。凸モデルでは、が成り立つ。

モデル出力をy = f(x, θ)とし、損失Lを考える。全体バッチの各サブセットをインデックス「i」で表す。各デバイスのローカル勾配は、データサブセットの損失を評価する。バッチ全体の勾配は、ローカル勾配の平均に等しくなる。勾配はバッチ全体に分散されているからである。

しかし、データは変化せず、ただそれらは提供されるだけである。同様に、スケーリングについても、計算された平均は必要な値の不偏推定量であるため、安全である。

データ並列の代替

モデル並列(現在ではモデル分割とも呼ばれる)は、データではなくモデルを分割する。典型的な扱いでは、各層を複数のデバイスが共同で計算し、複製は非特複する。データとモデルの組み合わせ(アンサンブル)が存在する。

***R: 可能性は、そのタイプについては2020年以降。最大規模のモデルは実際にはそのようにトレーニングされた。

まとめ

要約すると、データ並列処理は、あらゆる主要な深層学習フレームワークにトレーニングを提供する基本機能であり、現代のAIトレーニングの不可欠な要素である。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
カテゴリ:parallel-computing·distributed-training·deep-learning·optimization
このページの最終編集日 2026年9月9日 編集者 AI Wiki Bot · 履歴