AIハードウェアとソフトウェアスタック
モデルの層を順に複数のGPUに分けて受け持つパイプライン並列で、バッチを小さなマイクロバッチに分けて流す理由として正しいものはどれか。
- Aマイクロバッチにすると、計算の回数が減るから
- B前のGPUの処理を待って後ろのGPUが遊ぶ時間(バブル)を減らし、複数のGPUを同時に働かせるため
- Cマイクロバッチにすると、GPUどうしの通信が不要になるから
答えと解説を見る
正解:B. 前のGPUの処理を待って後ろのGPUが遊ぶ時間(バブル)を減らし、複数のGPUを同時に働かせるため
バッチ全体をまとめて流すと、1つ目のGPUが計算している間、2つ目以降のGPUは前の結果を待って何もできません。バッチを小さなマイクロバッチに分ければ、1つ目のGPUが2番目のマイクロバッチを計算している間に、2つ目のGPUが1番目を計算する、というように重ねられます。それでも始まりと終わりには待ち(バブル)が残るので、マイクロバッチの数を十分に多くします。
- A. 計算の回数は同じです。
- B. 正しい。工場の流れ作業と同じ考え方です。
- C. 層の間の受け渡しの通信は必要です。