分散機械学習とは

執筆者

Ivan Belcic

Staff writer

Cole Stryker

Staff Editor, AI Models

IBM Think

分散機械学習とは

分散機械学習(ML)は、ワークロードを単一のコンピューターで実行するのではなく、複数のデバイスまたはプロセッサに分散する大規模なMLタスクへのアプローチです。分散MLは、計算需要が特に高いディープ・ニューラル・ネットワークなどの大規模で複雑なモデルのトレーニングに最もよく使用されます。

人工知能(AI)モデルの規模と複雑さが増すにつれて、トレーニングに必要な計算リソースが単一デバイスの容量を超える可能性があります。同様に、複雑で大規模なタスクでは、要求が大きすぎたり、1台のデバイスで対応できる量を超えるメモリーが必要になったりすることがあります。分散システムは、データセットまたはAIモデルを複数のデバイスまたはノードに分割して、性能、精度、効率を向上させます。

分散MLは分散コンピューティングのサブセットであり、複数の処理システムにまたがってコンピューティングを分散するためのより広範な取り組みが含まれます。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

分散機械学習の種類

分散機械学習へのアプローチには、次のものがあります。

  • データの並列処理:データセットを複数のデバイスに分割します

  • モデルの並列処理:複数のデバイスにまたがってモデルを分割します

  • ハイブリッド並列処理:データ並列とモデル並列の側面を組み合わせます

分散MLのパラメーター・サーバー・フレームワークでは、1つ以上のサーバー・ノードを使用してモデル・パラメーターの更新を維持し、ワーカー・ノードがデータと計算を処理します。

データの並列処理

データ並列処理では、トレーニング・データとして使用される大規模なデータセットを、システム内のノードの数と同じ数のグループに分割します。各ノードはAIモデルのコピーをホストし、分散データのサブセットをフィードします。データ並列処理オペレーションは、同期または非同期で実行できます。同期トレーニングは一貫性を確保できるためディープラーニング・モデルでより一般的ですが、速度が犠牲になります。

各ノードはモデルの完全なコピーを実行するため、ハードウェアにはそれをホストするのに十分なメモリーが必要です。ただし、各ノードはデータセットの一部のみを処理するため、ノードあたりのAIワークロードは削減されます。

連合学習

連合学習は、複数のノードがデータのサブセットでモデルのコピーをトレーニングするという点で、データ並列処理に似ています。ただし、データ・パーティションは集中型データ・プールから作成されるのではなく、各ノードへのローカル・データで構成されます。モデルの更新はノード間で集約され、データが元のソースを離れることはありません。

各データセットはローカライズされているため、データサイエンティストは、高度なデータ・セキュリティーまたは法的規制が関係する分散型ディープラーニング・アプリケーションに連合学習を使用することが多いです。集中型データ・プールでは、送信中に個人情報(PII)が誤って公開される可能性があります。連合学習は、各データセットを独自のノードに分離することで、このリスクを軽減します。

AI Academy

AIの専門家になる

ビジネスの成長を促進するAIへの投資を優先できるように知識を習得します。今すぐ無料のAI Academyを試して、貴社のAIの未来をリードしましょう。

モデルの並列処理

モデルの並列処理では、モデルをコンポーネント部分(ディープ・ニューラル・ネットワークの層など)に分割し、別々のノード間で独立して同時に実行できます。モデルの各部分は同じデータを使用します。モデルの並列処理はネットワークの並列処理とも呼ばれます。

単一のMLモデルが大きすぎて1台のマシンで処理できない場合は、モデルの並列処理を使用することで、モデルを複数のノード間で実行できます。各ノードはモデルの一部を処理するため、コンピューティングとメモリーの要件は、1台のマシンで完全なモデルを実行する必要がある場合よりも少なくなります。

モデルの並列処理は通常、データの並列処理よりも実装が困難です。選択された分散機械学習アルゴリズムは、この手法の拡張性に直接影響を及ぼし、一部のアルゴリズムは他のアルゴリズムよりもこの手法に適しています。システムは、ノード間のデータ共有の量を最小限に抑える方法で構築する必要があります。高性能のモデル並列処理システムには、専門家レベルの設計と最適化が必要です。

モデルの並列処理は、多くの場合データの並列処理と組み合わされ、モデルの各セグメントがインプット・データの異なる部分を処理します。成果はネットワーク全体で集約されます。

パイプライン並列処理

パイプライン並列処理は、モデルを順番に分割するモデル並列処理の一種です。モデルの各ステージは、独自のノードでホストされます。データのバッチは、昔ながらのバケツリレー方式で水源から火まで、バケツの入った水を人から人へ渡していくのと同じように、段階的に順番に処理されます。

パイプラインの並列処理により、スループット、つまりモデルが一度に処理できるデータ量が向上します。ただし、このブーストには、インプットを受け取ってから結果を生成するまでにかかる時間であるレイテンシーが増加するというコストが伴います。

レイテンシーの増加は、データの最初のマイクロバッチがシーケンスに渡されるランプアップ・フェーズに起因しています。機械学習パイプラインの後半のステージは、データの最初のマイクロバッチが前のステージを通過するまで初期化できません。

テンソル並列処理

テンソル並列処理は、ディープ・ニューラル・ネットワークの単一層でさえ、多大な計算能力を必要とする場合や、1つのデバイスに必要なスペースが多すぎる場合に発生します。Transformerアーキテクチャーの2つの基礎である自己注意層と埋め込み層は非常に大きくなる可能性があるため、事実上すべての大規模言語モデル(LLM)開発にはテンソル並列処理が伴います。テンソル並列処理がなければ、層が1つのデバイスに対して大きすぎるため、LLMをモデルにトレーニングすることは事実上不可能です。

テンソル並列処理では、1つの層のパラメーターが複数のGPU(画像処理装置)またはTPU(テンソル処理装置)に格納されます。各デバイスは単一層のオペレーションの一部を計算し、その部分的な計算結果が集約されて層のアウトプットが生成されます。

データ並列処理や他の多くのモデル並列処理と比較して、テンソル並列処理のワークフローではノード間の通信が大量に必要になります。高帯域幅ネットワークは、通信のボトルネックを軽減するのに役立ちます。

ハイブリッド並列処理

データとモデルの並列処理の手法は、単独で使用されることは多くありません。これらは多くの場合、さまざまなハイブリッド並列処理の構成で組み合わせられます。オープンソース・ディープラーニング・フレームワークPyTorchTensorFlowはどちらもPythonをサポートしており、分散型機械学習システムの構築によく使用されます。

GPTファミリーを含むほとんどの大規模言語モデルは、大規模にトレーニングを行うためにハイブリッド並列処理に依存しています。

分散機械学習の仕組み

分散MLは、機械学習モデルの構築、トレーニング、デプロイのプロセスであるMLパイプラインの各ステージ(前処理、トレーニング、ファイン・チューニング、検証、推論、デプロイメント)を強化できます。

  • 分散データの前処理

  • 分散トレーニング

  • 分散ファイン・チューニング

  • 分散検証

  • 分散推論

  • 分散デプロイメント

分散データの前処理

分散データ前処理では、リンクされたノード・ネットワーク(複数のプロセッサーまたはデバイスであり、「ノード」とよばれることもあるニューラル・ネットワークの個々のニューロンではない)を使用して、分析と今後の使用のために大規模なデータセットを準備します。

中央制御ノードはワークフローを管理し、データを分割してワーカー・ノードに割り当てます。並列処理による作業の分散化により、単一のデバイスを使用する従来のモデルと比較して拡張性と効率性が向上します。

分散トレーニング

分散トレーニングでは、分散ML手法を活用して、モデルのトレーニングをデバイス間で分散します。例えば、この手法は大規模なニューラル・ネットワークでよく使用されます。ネットワーク、トレーニング・データセット、またはその両方が1つのプロセッサーでは大きすぎる場合には、分散トレーニングによってワークロードが複数のサーバー、GPU、またはマシンに分散されます。

確率的勾配降下法(SGD)は、データセットをミニバッチに分割し、各バッチ後の損失関数の勾配を計算する学習アルゴリズムです。完全なデータセットの代わりにミニバッチを使用すると、トレーニングがより効率的になります。

損失関数はモデルの予測の誤差を測定し、SGDの目標は勾配を下降させて関数の値を最小化することです。標準的なモデルのトレーニングと同様に、トレーニング・プロセスは、モデルが収束に達したとき、つまりSGDアルゴリズムが関数の値を正常に最小化したときに、完了したと見なされます。

ノードはミニバッチを並行して処理します。これは、各バッチが各反復内の他のバッチから独立して処理されるため可能です。各ノードはその勾配を計算し、更新された勾配の値をネットワーク内の他のノードにプッシュします。他のワーカー・ノードは、受け取った更新を独自のモデルに実装し、トレーニング・プロセス全体を通じてモデルのすべてのコピーを同一に保つようにします。

AllReduce機能は、各ノードが成果を共有し、集約された成果をネットワークを通じて伝播できるようにする、集合的な通信操作です。AllReduceを使用すると、すべてのノードがモデル・パラメーターの更新を同期し、一貫性を維持できるようになります。高性能コンピューティングで長年使用されてきたAllReduceは、HorovodなどのMLフレームワークで普及しました。

SGDは、同期または非同期で実行できます。同期SGDはすべてのノードを同時に更新するため、一部のノードが遅れた場合の潜在的な遅延を犠牲にして一貫性を維持します。非同期SGDは、更新の準備が整うとすぐにパラメーターを更新しますが、一部のノードは最新の値を含まない更新を受信する場合があります。

分散トレーニングでは、デバイスごとに必要な計算リソースを減らすことでトレーニング時間を短縮できます。トレーニングは計算量が非常に多いため、分散MLの主なユースケースの1つです。

分散ファイン・チューニング

分散トレーニングと同じ原則とメリットが分散ファイン・チューニングにも当てはまります。ファイン・チューニングは、事前トレーニング・モデルをさらにトレーニングし、より具体的なタスクに特化できるようにします。分散ML技術を適用することで、プロセスがより高速、効率的で、スケーラブルになります。

分散検証

検証は、トレーニングされたモデルの性能を評価するプロセスです。検証データセットまたは大規模モデルを複数のノードに分散すると、残りの分散トレーニング・プロセスと同じメリットが得られます。

分散推論

推論とは、トレーニングされたAIモデルが新しいデータを処理してパターンを認識し、アウトプットまたは予測を生成するプロセスです。ワークロードを複数のデバイスに分散することで、単一マシンでは大きすぎるAIモデルの運用が可能になります。分散推論により、スループットの向上とレイテンシーの短縮も促進できます。

分散デプロイメント

分散デプロイメントでは、ノードのネットワーク全体にわたるアプリケーションのオペレーションが管理されます。ワーカー・ノード間でロード・バランシングを行うことにより、ボトルネックが軽減され、リソースの効率が最適化されるため、スループットが向上し、レイテンシーが短縮されます。

分散MLのメリット

分散機械学習のメリットは以下のとおりです。

  • 効率性

  • 拡張性

  • 冗長性

効率性

ワークロードを複数のデバイス間で自動化および分割することで、1つのデバイスにかかる負担が軽減されます。ノードは並行して作業できるため、長期的なタスクをより迅速に完了し、そのアウトプットを集約して最終成果を得ることができます。

ImageNet(1,400万件を超えるラベル付き画像を含むデータセット)で画像認識モデルをトレーニングするには、単一のGPUでは数週間かかります。分散MLを使えば、小規模なスタートアップ企業でも数時間でこのタスクを完了できます。

拡張性

企業は、LLMやその他のリソースを大量に消費するシステムを実行するために、超強力なコンピューターに投資する必要はありません。分散コンピューティングによって、クラウド・サービス・プロバイダーは、多数のサーバーやデータセンターにまたがる膨大なインフラストラクチャーを調整し、企業顧客がオンデマンドで利用できるようになります。

ビッグデータによるデータ処理などの集中的なデータサイエンス・タスクは、大規模なインフラストラクチャー投資なしで完了できます。大規模なデータ処理により、小規模なスタートアップでも、推奨システムチャットボットなどのサービスをユーザーに提供できるようになります。

一方、拡張性の反対側にあるのがハイパースケール・データセンターです。リソースが許す限り、組織は最先端のディープ・ニューラル・ネットワークを実行するために大規模なサーバー・クラスターを構築しています。分散MLなしでは、数千のGPUでこれほど大規模なモデルを運用することは不可能です。

冗長性

現実世界のシステムの多くは、個々のノードに障害が発生した場合でも動作を継続する能力である、フォールト・トレランスに依存しています。モデル・プロバイダーは、個々のユーザーとAPIに接続されたアプリケーションが中断のないアクセスを享受できるようにする必要があります。分散MLでは、冗長性によってノード全体でプロセスを複製することで、アップタイムを保持し、障害によってサービスが中断されないようにします。

分散MLの課題

効果的な分散ML実装の課題は次のとおりです。

  • ネットワークのボトルネック

  • 同期のオーバーヘッド

  • エネルギー消費量

ネットワークのボトルネック

ノード間の帯域幅の不足は、分散MLネットワークにおけるボトルネックの原因となることがよくあります。テンソル並列処理など、より多くの通信を必要とする方法は、帯域幅を最も必要とします。ネットワークが必要な帯域幅を提供できない場合、分散MLプロジェクトは、トレーニング時間が長くなり、拡張性が低下します。

同期のオーバーヘッド

同期オーバーヘッドは、あるタスクが、別のタスクが完了するまで開始できない場合に発生する遅延です。同期システムでは、トレーニングの次の段階に進む前に、すべてのワーカー・ノードが共有データをアップロードする必要があります。すべてのノードが同期されるまで次のフェーズが開始されないため、この瞬間のことを「同期バリアー」と呼びます。

ストラグラー・ノード(タスクの完了に他のノードより時間がかかるノード)は、プロセス全体を遅くしてしまいます。非同期システムは、この障壁を取り除きますが、一部のノードが古いパラメータ設定で動作するリスクがあります。

エネルギー消費量

分散ネットワークは、ノード自体だけでなくノード間の通信も要因となり、エネルギーを大量に消費することがあります。エネルギー消費量は、分散MLシステムの実装やアーキテクチャによって異なります。

  • 計算要件: 多くの負荷の高いMLタスクに必要な高性能GPUは、消費電力が高くなります。

  • 通信: ノードは、効果的に通信し、同期オーバーヘッドを最小限に抑えるために高速ネットワークを必要とします。

  • クラウド/エッジコンピューティング: 最先端のAIモデルを支える集中型ハイパースケール・データセンターは、膨大なエネルギーを消費します。エッジコンピューティングはネットワーク・コストの削減に役立ちます。

  • アルゴリズムとデータ処理の選択: 適切なアルゴリズムを選択し、特徴量エンジニアリングなどの適切なデータ処理手法を実践することで、モデルの効率を向上させることができます。

分散機械学習フレームワーク

分散MLフレームワークは、メモリや計算リソースの使用を最適化しながら機械学習を実装します。また、MLの実装をスケールさせ、トレーニング時間を短縮し、コストを抑えることもできます。

代表的な分散MLフレームワークには次のようなものがあります。

  • PyTorch Distributed
     

  • Apache Spark
     

  • TensorFlow Distributed
     

  • Ray Train
     

  • InstructLab

PyTorch分散

人気のPyTorch MLフレームワークで利用可能なPyTorch Distributedは、複数のデバイス間でディープラーニングモデルを構築とスケーリングするためのツールセットです。torch.distributedパッケージは、AllReduceなどのノード内通信に対応します。データ並列処理とモデル並列処理の標準サポートにより、さまざまな分散トレーニング手法が可能になります。

Apache Spark

Apache Sparkは、分散トレーニングをサポートする歴史あるMLフレームワークです。ユーザーは、Spark SQLなどを含むSparkエコシステム全体と統合するエンドツーエンドMLパイプラインを構築できます。Sparkは、元のMLlibと新しいSparkMLの2つのライブラリを提供しています。

TensorFlow分散

TensorFlow内のtf.distribute.Strategy APIは、分散MLを可能にし、1台のマシン上の複数GPU、複数のマシン上の複数GPUなど、さまざまな方式に対応しています。例えば、ParameterServerStrategyは専用サーバーにパラメータを格納し、ワーカーノードがそこからアクセスします。

Rayトレーニング

Ray Trainは、分散コンピューティング向けRay MLフレームワーク内のスケーラブルな分散トレーニングおよびファインチューニング用ライブラリです。PyTorchとTensorFlowの両方に対応しており、複数デバイスにわたる分散ハイパーパラメータチューニングもサポートします。

InstructLab

InstructLabの分散MLに対する新しいアプローチは、従来のGPUクラスターを避け、クラウドソーシングのようなコミュニティベースの手法を採用します。コミュニティのメンバーは、パラメータの更新を一元化されたリポジトリに投稿し、個人のデバイスでモデルをファイン・チューニングできます。

関連ソリューション
IBM watsonx.ai

AI開発者向けの次世代エンタープライズ・スタジオであるIBM watsonx.aiを使用して、生成AI、基盤モデル、機械学習機能をトレーニング、検証、チューニング、導入しましょう。わずかなデータとわずかな時間でAIアプリケーションを構築できます。

watsonx.aiをご覧ください。
人工知能ソリューション

業界をリードするIBMのAI専門知識とソリューション製品群を使用すれば、ビジネスにAIを活用できます。

AIソリューションはこちら
AIコンサルティングとサービス

AIの導入で重要なワークフローと業務を再構築し、エクスペリエンス、リアルタイムの意思決定とビジネス価値を最大化します。

AIサービスはこちら
次のステップ

AI開発ライフサイクル全体にわたる機能にワンストップでアクセスできます。使いやすいインターフェース、ワークフロー、業界標準のAPIやSDKを利用して、強力なAIソリューションを構築できます。

watsonx.aiの詳細はこちら デモを予約