ZeRO++: 大規模モデルのトレーニングを進化させる
ZeRO++は、大規模な深層学習モデルのトレーニングにおけるコミュニケーション効率を向上させるよ。
― 1 分で読む
深層学習は、画像分析、言語処理、音声認識など、いろんな分野で重要なツールになってるよ。時間が経つにつれて、これらのモデルは質と能力の面で進化してきたんだ。この改善の主な理由の一つはサイズの増加。大きなモデルは複雑なパターンを捉える力があって、だから性能が良くなるんだ。例えば、モデルのサイズは100百万パラメータからたった数年で5000億パラメータ以上にまで増えたよ。
でも、こんなに大きなモデルをトレーニングするのは大変なんだ。メモリや計算の要件が増えて、一つのGPUでは処理しきれなくなった。大きなモデルを効果的にトレーニングするには、複数のGPUを組み合わせて使う必要があるんだ。これを実現する一般的な方法が、3D並列処理とZero Redundancy Optimizer(ZeRO)だよ。
3D並列処理は、いくつかの技術を組み合わせて仕事を多くのGPUに分ける方法なんだけど、リソースを効率よく使える一方で、複雑さが増しちゃう。データサイエンティストたちは、しばしば3D並列処理にコードを適応させるのに苦労してる。
対照的に、ZeROはこのプロセスを簡単にするんだ。全てのGPUにモデルの状態を複製するのではなく、モデルのパラメータを小さな部分に分けて、GPU間で共有するんだ。このアプローチはメモリを少なく使うし、通信コストも低くて、でも素晴らしいパフォーマンスを維持できる。
でも、ZeROにも限界があって、特にGPUの数が多い時や、ネットワークの帯域幅が低い時には問題が出てくる。こういう状況では、通信のボトルネックが発生して、トレーニングが遅くなっちゃうんだ。
ZeROの限界
ZeROは使いやすくてスケールしやすいから人気があるけど、コミュニケーションオーバーヘッドが効率を制限することがあるんだ。特に、帯域幅が低いクラスターと小さなバッチサイズの時にね。
帯域幅が低いクラスターでは、高性能なマシン同士の内部接続は良いけど、異なるマシン間の接続は帯域幅が低いことが多いんだ。これが通信のボトルネックを生んじゃって、トレーニングプロセスのパフォーマンスを下げちゃう。
高帯域幅のネットワークでも、GPUの数がすごく多いと、各GPUのバッチサイズが小さくなっちゃうんだ。これが計算と通信の比率をさらに下げて、通信に追加の遅延をもたらす。
ZeROには多くの利点があるけど、分散トレーニングでの通信最適化の既存の方法は、モデルの状態を複製することに頼っているから、ZeROのアーキテクチャとはあまり相性が良くないんだ。
この問題を解決するために、ZeRO++という新しいシステムを紹介するよ。このシステムは通信のオーバーヘッドを減らして、トレーニング中のパフォーマンスを向上させるんだ。以下では、ZeRO++で使われる技術を簡単に説明するよ。
ZeRO++の通信最適化
ZeRO++は、通信オーバーヘッドを削減するために主に3つの方法に焦点を当ててる:
1. ブロック量子化された重みの通信
フォワードパスでは、ZeROがトレーニングに必要な全てのパラメータを集めるためにオールギャザー操作を行うんだけど、これが大量の通信トラフィックを生むんだ。これを減らすために、ブロックベースの量子化っていう技術を使う。これにより送信データのサイズを縮小できるんだ。高精度フォーマットでデータを送る代わりに、低精度フォーマットに変換することで、精度をあまり失わずに通信量を半減できるんだ。
2. 階層的重み分割
バックワードパス中にZeROが再び重みを集める必要があるんだけど、これがかなりの通信オーバーヘッドを生むんだ。これを解決するために、各マシンに重みの完全なコピーを保持してるんだ。このおかげで、複数のマシンを跨ぐのではなく、単一のマシン内でギャザリング操作を行えるから、帯域幅が良くなってプロセスがずっと速くなるんだ。
3. 量子化された勾配通信
バックワードパス中に通信コストを削減するには、勾配も扱わなきゃいけないんだ。通信を減らすための標準的な技術を使うと、トレーニングの精度が悪くなっちゃうことがある。だから、勾配を低精度で通信しつつ、精度を保持する新しいアプローチを開発したよ。最初に勾配を圧縮して、必要な計算を行う前に元の精度に戻すんだ。
これら3つの技術を組み合わせることで、ZeRO++はコミュニケーション量を大幅に減らして、トレーニング中の効率を向上させるよ。
ZeRO++の評価
ZeRO++を実装して、いくつかの重要な結果を示すために広範な評価を行ったんだ:
- 数百のGPUで大きなモデルにスケーラブル。
- 元のZeROに対して一貫したスピードアップ。
- 低帯域幅の設定でもパフォーマンスが向上。
テストの結果、ZeRO++は384GPUで最大2.16倍のスループットを達成したよ。また、3つの最適化が全体の改善にどう貢献しているかを分析して、ZeRO++はモデルの収束に悪影響を与えないことも示したんだ。
主な貢献
この研究の主な貢献は以下の通り:
- ブロック量子化された重みが、重みのギャザリングにおける通信量を50%削減。
- 階層的重み分割が、バックワードパス中のノード間通信を完全に排除。
- 新しい量子化された勾配通信方式が、勾配の通信量を75%削減。
- 既存のZeROフレームワークにこれらの技術を効率的に統合して、パフォーマンスを向上させた。
背景と関連研究
ZeRO++をよく理解するには、どうやって大きなモデルを複数のGPUでトレーニングしているのかを見ることが大事だね。分散トレーニングには主に3つの並列処理の形態がある:データ並列処理、パイプライン並列処理、テンソル並列処理。
データ並列処理は、モデルが一つのGPUに収まるときはうまく働く。この設定では、各GPUがモデルの完全なコピーを持って、異なる入力データを処理する。もしモデルが一つのGPUに収まらなかったら、モデル並列処理に切り替わる。これは、層ごとに(パイプライン並列処理)またはテンソルの次元で(テンソル並列処理)モデルをGPU間で分割する方法だよ。
3D並列処理はこれらの方法を組み合わせるけど、既存のコードベースに大きな変更が必要なんだ。一方で、ZeROはGPU間でモデルパラメータを分割することで、通信を最小限に、メモリ効率を最大化する簡単な代替手段を提供するんだ。
でも、標準的なZeRO方式は大規模な設定では高い通信需要がある。既存の解決策は通信オーバーヘッドを減少させることに集中してきたけど、ZeROの構造にはあまり適合しないことが多いんだ。
ZeRO++が通信オーバーヘッドにどう対処するか
ZeRO++は、ZeROのコミュニケーション効率を高めるために、いくつかの戦略を組み合わせているよ。
量子化された重みの通信
フォワードパス中に、ZeROは重みを集めることに頼っているけど、これがコミュニケーションに重くのしかかるんだ。ブロックベースの量子化を適用することで、送信するデータを圧縮することができる。これにより、重みを低精度に調整して、サイズを減らしつつ許容範囲で精度を保持することができるんだ。
階層的分割
バックワードパスでは、ノード間のギャザリングを避けるために、各マシンに完全な重みを保持する。このアプローチによって、各マシン内でローカルにギャザリングができるから、ノード間通信よりもはるかに速くなるんだ。
量子化された勾配通信
バックワードパスの勾配については、精度を維持しつつ勾配を圧縮する新しい方法を作ったんだ。通信段階で最初に量子化して、その後必要な計算のために精度を元に戻すって感じだよ。
これら全ての方法が通信プロセスの異なるポイントにアプローチしていて、データをGPU間で高パフォーマンスを維持しつつ共有しやすくしているんだ。
ZeRO++のパフォーマンス評価
いろんなモデルや構成を使ってZeRO++を評価して、スケーラビリティ、速度、全体的な効率を見たんだ。私たちの実装は、様々なプラットフォームやモデルサイズで強力な結果を示したよ。
スケーラビリティ
ZeRO++は、大きなモデルで最大384のGPUで効果的だった。具体的には、使用したハードウェアで利用可能なピークパフォーマンスのかなりの割合を達成したんだ。これは、新しい通信方法が大きなモデルを効率的にトレーニングできることを示しているよ。
速度の改善
重要な発見の一つは、ZeRO++がさまざまなモデルサイズや構成で元のZeROを上回ったことなんだ。場合によっては、ベースラインの2.4倍のパフォーマンス改善を観察したよ。これは、以前の方法が効率を維持するのに苦労した限られた帯域幅のシナリオにとって特に重要なんだ。
低帯域幅でのパフォーマンス
さらに、ZeRO++は低帯域幅のネットワークでもしっかりしたパフォーマンスを維持できて、信頼性を証明したんだ。これは、最適なネットワーク環境ではないところで大きなモデルをトレーニングする機会を開くことになるよ。
結論
ZeRO++の導入は、大きなモデルを効率的にトレーニングするための集団通信における大きな進歩を示しているよ。巧妙な量子化や分割技術を使ってオーバーヘッドを減少させることに集中することで、限られたネットワークリソースでも高パフォーマンスを維持できることを示したんだ。
要するに、ZeRO++は研究者や実務家にとって、大規模なモデルのトレーニングをよりアクセスしやすく、効率的にするための有望なアプローチを提供しているよ。これらの進歩によって、大規模な言語モデルやそれ以上の能力が向上し、深層学習のいろんな分野でより広い応用が進むことを期待してるよ。
タイトル: ZeRO++: Extremely Efficient Collective Communication for Giant Model Training
概要: Zero Redundancy Optimizer (ZeRO) has been used to train a wide range of large language models on massive GPUs clusters due to its ease of use, efficiency, and good scalability. However, when training on low-bandwidth clusters, or at scale which forces batch size per GPU to be small, ZeRO's effective throughput is limited because of high communication volume from gathering weights in forward pass, backward pass, and averaging gradients. This paper introduces three communication volume reduction techniques, which we collectively refer to as ZeRO++, targeting each of the communication collectives in ZeRO. First is block-quantization based all-gather. Second is data remapping that trades-off communication for more memory. Third is a novel all-to-all based quantized gradient averaging paradigm as replacement of reduce-scatter collective, which preserves accuracy despite communicating low precision data. Collectively, ZeRO++ reduces communication volume of ZeRO by 4x, enabling up to 2.16x better throughput at 384 GPU scale.
著者: Guanhua Wang, Heyang Qin, Sam Ade Jacobs, Connor Holmes, Samyam Rajbhandari, Olatunji Ruwase, Feng Yan, Lei Yang, Yuxiong He
最終更新: 2023-06-16 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2306.10209
ソースPDF: https://arxiv.org/pdf/2306.10209
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。