データ並列における「同期型」と「非同期型」

各 GPU が算出した勾配を「パラメータサーバ」でどう処理するかによる違いです。

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