DeepSpeedおよびFairScaleを介したHugging Face TransformersのZeRO統合

Hugging Face Transformers v4.2.0では、DeepSpeedおよびFairScaleの実験的なサポートが導入され、Zero Redundancy Optimizer (ZeRO) を統合することで、GPUメモリ使用量を最適化し、より大きなモデルのトレーニングやバッチサイズの拡大を可能にします。この統合により、Trainer APIを通じて、--sharded_ddp (FairScale) および --deepspeed (DeepSpeed) コマンドライン引数を使用して、これらの最適化を直接利用できるようになります。

マルチGPUトレーニングのためのZeROメモリ最適化

DeepSpeedまたはFairScaleを介してZeROを統合することで、標準的なDistributed Data Parallel (DDP) のベースラインと比較して、トレーニングおよび評価時間を大幅に短縮し、同時に可能な最大バッチサイズ (BS) を増加させることができます。2つの24GB Titan RTX GPUを使用してt5-largeモデルを用いたベンチマークでは、以下のパフォーマンス向上が観察されました:

Method Max Batch Size Train Time Eval Time
Baseline (DDP) 16 30.9458 56.3310
fp16 20 21.4943 53.4675
sharded_ddp (FairScale) 30 25.9085 47.5589
sharded_ddp + fp16 30 17.3838 45.6593
DeepSpeed (no CPU offload) 40 10.4007 34.9289
DeepSpeed (with CPU offload) 50 20.9706 32.1409

DeepSpeedはバッチサイズとトレーニング速度において最も高い利得を示しましたが、FairScaleは設定ファイルなしで単一のコマンドライン引数のみで済むため、デプロイがより容易であるとされています。

大規模モデルのシングルGPUトレーニング

DeepSpeedは、CPUオフロードを通じて、単一のGPUのメモリ容量を超えるようなモデルのトレーニングを可能にします。単一の24GB RTX-3090カードを使用したt5-3bモデルのテストでは、標準的なシングルGPUセットアップではバッチサイズが1であってもOut of Memory (OOM) エラーが発生しました。DeepSpeedを使用することで、モデルはバッチサイズ20で正常にトレーニングされ、システムはバッチサイズ30で初めてOOMに達しました。

ZeROの技術的メカニズム

ZeRO (Zero Redundancy Optimizer) は、データ並列トレーニングに分散データストレージを追加することでメモリを最適化します。すべてのGPUにモデルの状態全体を複製するのではなく、ZeROはパラメータ、勾配、およびオプティマイザの状態を、利用可能なGPU間で分割(パーティション)します。

分散パーティショニング

各GPUは、パラメータ、勾配、およびオプティマイザの状態の単一のシャードのみを保持します。実行時に、各GPUは特定のレイヤーに必要なデータを他の参加しているGPUからオンザフライで取得するため、データのストレージに重複がなくなります。

ZeRO-Offload

ZeRO-Offloadは、特定の処理とメモリ要件をGPUからホストCPUへ移動させます。これは、大規模なモデル(t5-3bなど)を限られたGPUハードウェアに適合させるために極めて重要です。

メモリ断片化の管理

DeepSpeedは、利用可能な総メモリ量があるにもかかわらず、連続したブロックが十分に大きくないためにOOMエラーが発生する「GPUメモリ断片化」に対処するため、長期的な割り当てと短期的な割り当てを分離してGPUメモリを独立して管理します。

デプロイと統合

ZeROの最適化には、モデルアーキテクチャの変更は必要ありません。変更が必要なのはトレーニングコードのみです。Hugging Face Trainer のユーザーは、以下のフラグを使用してこれらの機能を実装できます:

  • --sharded_ddp: FairScale統合を有効にします。
  • --deepspeed: DeepSpeed統合を有効にします(JSON設定ファイルが必要です)。

今後の拡張機能として、DeepSpeed Sparse Attention、1-bit Adam、およびFairScaleとDeepSpeedの両方におけるモデルパラメータのシャーディングのサポートが予定されています。

Sources