Horovod

Horovod

Horovodとは

Horovod(ホロボド)とは、Uberが開発した分散深層学習のためのオープンソースフレームワークです。TensorFlow、Keras、PyTorch、Apache MXNetをサポートし、わずか数行のコード変更で既存の学習コードを分散学習に対応させることができます。リングAllReduceアルゴリズムの普及に大きく貢献しました。

表:Horovodの要点まとめ
ひとことで言うとUberが開発した、分散深層学習を簡単にするためのライブラリ。
何がうれしいか既存の学習コードに数行足すだけで、マルチGPU・マルチノードに対応できる。
注意点近年はPyTorch標準のDDPやFSDPが主流になりつつある。

Horovodの仕組み

Horovodはデータ並列学習のフレームワークで、各GPU(ワーカー)が同じモデルのコピーを持ち、異なるデータで学習します。勾配の集約にはNCCLやMPI を利用したAllReduce操作を行い、すべてのワーカーが同一のモデル更新を適用します。MPIの起動モデルを採用しており、horovodrunコマンドで複数GPUでの分散学習を開始できます。

図:Horovodの使い方
1既存コードに数行追加初期化と最適化の変更
▶
2各ノードで実行同じコードが走る
▶
3勾配を集約リング型の通信で効率化
▶
4全体を同期モデルを揃える

Horovodの利点

Horovodの最大の利点はそのシンプルさです。既存の学習コードに対して、初期化、オプティマイザのラッピング、勾配のAllReduce、初期パラメータの同期という4つの変更を加えるだけで分散学習が可能になります。また、Spark上での分散学習もサポートしており、ビッグデータ環境との統合も容易です。

現在の位置づけ

Horovodは分散学習の民主化に大きく貢献しましたが、近年はPyTorchネイティブのDistributedDataParallel(DDP)やDeepSpeed、FSDPの台頭により利用が減少しています。しかし、そのシンプルなAPIと幅広いフレームワークサポートから、依然として多くのプロジェクトで使用されています。