コンテンツに移動
AI & 機械学習

Vertex AI の Reduction Server で分散 GPU トレーニングを高速化

2021年10月29日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 10 月 26 日に、Google Cloud blog に投稿されたものの抄訳です。

ニューラル ネットワークは計算負荷が高く、トレーニングに数時間から数日かかることが少なくありません。データ並列処理は、ワーカー(GPU など)の数にあわせてトレーニング速度をスケールする方法です。各ステップでは、トレーニング データがミニバッチに分割されてすべてのワーカーに分散されます。各ワーカーでは独自の勾配更新のセットが計算され、すべてのレプリカに適用されます。all-reduce は、TensorFlow、PyTorch、Horovod のデフォルトのクロスデバイス通信演算であり、各イテレーションで勾配を収集し、複数のワーカーを合計します。各トレーニング イテレーションの通信はネットワーク帯域幅を大幅に使用します。

GPU クラスタでのデータ並列型トレーニングの速度を向上させるために、Vertex AI から Reduction Server がリリースされました。Reduction Server は Google で開発された高速型の勾配集約アルゴリズムであり、all-reduce 演算のアルゴリズムの帯域幅が 2 倍になります。Reduction Server を使用すると、分散 ML トレーニング ジョブを効率的な帯域幅使用率(最大 2 倍のスループット)で実行でき、トレーニング ジョブをより短時間で完了できます。トレーニング時間の短縮におけるこうした利点により、総運用コストが削減される可能性があります。また、ユーザーは基になるトレーニング コードを変更せずに、Vertex AI に Reduction Server を実装できます。

このブログ投稿では、Reduction Server のコンセプトを紹介し、Google Cloud のお客様が Vertex AI でこの機能を活用してトレーニング時間を短縮する方法を説明します。次のセクションでは技術的な詳細を掘り下げ、分散データ並列型トレーニングの主な演算である all-reduce について詳しく取り上げます。

all-reduce

all-reduce は集団演算であり、すべてのワーカーのターゲット配列を 1 つの配列に reduce(「集約」とも。合計値、積、最大値、最小値などを求める演算)して、結果をすべてのワーカーに返します。また、複数のワーカーから勾配を合計してすべてのワーカーに配信する必要がある、ニューラル ネットワークの分散トレーニング シナリオで活用されています。図 1 は、all-reduce のセマンティクスを示しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_All-reduce_.max-2200x2200.jpg

all-reduce を効率的に実装するには数多くのアプローチがあります。従来の all-reduce アルゴリズムでは、ワーカーは通信リンクのトポロジ(リングやツリーなど)を利用して互いに通信し、勾配を交換します。Ring all-reduce は帯域幅最適な all-reduce アルゴリズムであり、ワーカーが論理リングを形成し、隣のワーカーとのみ通信します。ただし、帯域幅最適な all-reduce アルゴリズムの場合でも、ネットワーク経由で入力データを 2 回1転送する必要があります。

Reduction Server

Reduction Server は、Google で開発された高速な GPU all-reduce アルゴリズムです。ノードの種類はワーカーとレデューサの 2 つです。ワーカーはモデルのレプリカを実行し、勾配を計算して、最適化手順を適用します。レデューサは軽量な CPU VM インスタンス(GPU VM に比べて大幅に安価)であり、ワーカーからの勾配の集約に特化しています。図 2 はアーキテクチャ全体を示し、4 つのワーカーとシャーディングされたレデューサのコレクションが含まれています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_Reduction_Server.max-2200x2200.jpg

各ワーカーは、ネットワーク経由で入力データのコピーを 1 つだけ転送すれば済みます。そのため、Reduction Server は転送されるデータの量を実質半分にします。また、レイテンシがワーカーの数に依存しないことも Reduction Server の利点の一つです。さらに、Reduction Server はステートレスでもあり、勾配のみを reduce してワーカーと共有します。

次の表は、Reduction Server のワーカーあたりのデータ転送量とレイテンシをまとめたもので、n 個のワーカーを使用したリングベースやツリーベースの all-reduce アルゴリズムと比較しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_Performance_wins.max-2000x2000.jpg

Reduction Server は、分散 GPU トレーニングに NCCL を使用する多くのフレームワーク(TensorFlow や PyTorch など)に透過的なサポートを提供し、Vertex AI で利用できます。これにより、ML の実務担当者はトレーニング コードを変更せずに Reduction Server を使用できます。

パフォーマンスの向上

図 3 は、Reduction Server の使用によるパフォーマンスの向上を示しています。それぞれが 8 つの NVIDIA A100 GPU を搭載する 8 つの GPU ワーカーノードを使用して、MNLI データセットの TensorFlow Model Garden からの BERT モデルを微調整しています。この実験では、20 個のレデューサ ノードを使用することで、トレーニングのスループットが 75% も増加しました。その他の大規模なモデルで Reduction Server を使用すると、スループットが向上し、トレーニング時間も短縮されました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Reduction_Server.max-2000x2000.jpg

結論

このブログでは、Vertex AI で利用可能な Reduction Server により、分散データ並列型 GPU トレーニングを大幅に改善し、従来の all-reduce から Reduction Server に透過的に移行する方法を ML の実務担当者向けに紹介しました。  

詳しくは、Vertex AI の Reduction Server を実際に使用するための詳細情報について、ドキュメントをご覧ください。


1. ターゲット配列に n 個の要素がある場合、各ワーカーは、all-reduce 演算中にネットワーク経由で 2(n-1) 個の要素を送受信する必要があります。

- ソフトウェア エンジニア Chang Lan

- プロダクト マネージャー Rakesh Patil

投稿先