ZeRO
同じものを全GPUに持たせるのをやめることで大規模モデルを学習するMicrosoftの手法で、オプティマイザ状態・勾配・最終的にはパラメータまでカード間で分割する。
通常のデータ並列では各カードがすべての完全なコピーを持つ。混合精度でAdamを使う場合、メモリの約4分の3は、どこでも同一のオプティマイザ状態と勾配に費やされる。ZeROはこの冗長性を3段階で取り除く。ステージ1はオプティマイザ状態を、ステージ2は勾配も、ステージ3は重みまでを分割し、重みは計算中に層ごとに集めて使う。メモリ削減量はほぼカード枚数に比例するが、代わりに通信量が増える。オフロードを使えば、状態をホストメモリやNVMeに逃がすこともできる。この考え方はPyTorchではFSDPとして再実装されている。