アクセレーター
データ並列における「同期型」と「非同期型」
各 GPU が算出した勾配を「パラメータサーバ」でどう処理するかによる違いです。
- 同期型(Synchronous)
- 特徴: すべてのGPUワークアが勾配を計算し終えるのを待ってから、平均勾配を取ってパラメータを更新します
- メリット: アルゴリズム的に安定しており、通常のミニバッチ学習と同じ挙動になります
- デメリット: 1つでも計算の遅いGPU(Straggler)がいると全体の待ち時間が発生し、無駄が生じます(スループットが低下しやすい)
- 特徴: すべてのGPUワークアが勾配を計算し終えるのを待ってから、平均勾配を取ってパラメータを更新します
- 非同期型(Asynchronous)
- 特徴: 各GPUワークアが計算を終えた順に、パラメータサーバへ勾配を送り、即座にパラメータを更新します
- メリット: 他のGPUを待つ必要がないため、スループット(時間あたりの処理量)は高いです
- デメリット: あるGPUが勾配を計算している間に他のGPUによってパラメータが更新されてしまうため、計算された勾配が古くなる(陳腐化された勾配 / stale gradient)現象が起き、学習が不安定になりやすいです
- 特徴: 各GPUワークアが計算を終えた順に、パラメータサーバへ勾配を送り、即座にパラメータを更新します