[論文レビュー] Nimble: Lightweight and Parallel GPU Task Scheduling for Deep Learning
Nimble は、事前にスケジューリング(AoT)を用いてスケジューリングのオーバーヘッドを排除し、自動的なマルチストリームスケジューリングにより独立したGPUタスクの並列実行を可能にする、軽量で並列処理可能なGPUタスクスケジューラである。Nimble は、さまざまなモデルにおいて、推論と学習をそれぞれ最大22.34倍、3.61倍高速化し、PyTorch や TensorRT、TVM よりも優れた性能を発揮する。
Deep learning (DL) frameworks take advantage of GPUs to improve the speed of DL inference and training. Ideally, DL frameworks should be able to fully utilize the computation power of GPUs such that the running time depends on the amount of computation assigned to GPUs. Yet, we observe that in scheduling GPU tasks, existing DL frameworks suffer from inefficiencies such as large scheduling overhead and unnecessary serial execution. To this end, we propose Nimble, a DL execution engine that runs GPU tasks in parallel with minimal scheduling overhead. Nimble introduces a novel technique called ahead-of-time (AoT) scheduling. Here, the scheduling procedure finishes before executing the GPU kernel, thereby removing most of the scheduling overhead during run time. Furthermore, Nimble automatically parallelizes the execution of GPU tasks by exploiting multiple GPU streams in a single GPU. Evaluation on a variety of neural networks shows that compared to PyTorch, Nimble speeds up inference and training by up to 22.34$ imes$ and 3.61$ imes$, respectively. Moreover, Nimble outperforms state-of-the-art inference systems, TensorRT and TVM, by up to 2.81$ imes$ and 1.70$ imes$, respectively.
研究の動機と目的
- 小さなGPUタスクにおいて実行時間の大部分を占める、既存のディープラーニングフレームワークにおける高いスケジューリングオーバーヘッドを解消すること。
- NAS や並列レイヤー構造を有する現代のニューラルネットワークに見られる、現在のフレームワークで十分に活用されていない、オペレータ間の並列性を活用すること。
- 実行前にGPUタスクを事前にスケジューリングすることで、実行時におけるスケジューリングのオーバーヘッドを排除すること。
- 1つのGPU内で複数のCUDAストリームを用いた、効率的で自動的なGPUタスクの並列実行を可能にすること。
- 特にスケジューリングオーバーヘッドが最も顕著に影響を及ぼす、小バッチまたは低解像度入力における推論および学習の性能向上を図ること。
提案手法
- 事前スケジューリング(AoT)を導入:GPUタスクのスケジューリングを実行前に一度だけ実行し、実行時から分離する。
- 事前処理段階で、すべてのGPUタスクの実行順序、関数引数、リソース依存関係を符号化したタスクスケジュールを生成する。
- 実行時、事前に生成されたスケジュールに基づいてGPUタスクを直接送信し、スケジューリングロジックをバイパスすることでオーバーヘッドを低減する。
- 依存関係を考慮したストリーム割り当てアルゴリズムを用いて、独立したGPUタスクを複数のCUDAストリームに自動的に割り当てる。
- トレースベースの解析を用いて、独立したオペレータを特定し、複数のストリーム間で並列実行する。
- 静的なニューラルネットワークアーキテクチャと入力形状の情報を活用して、最適なスケジューリングとストリームマッピングを事前に計算する。
実験結果
リサーチクエスチョン
- RQ1事前スケジューリングにより、ディープラーニングフレームワークにおける実行時のスケジューリングオーバーヘッドを排除できるか?
- RQ2現代のニューラルネットワークにおけるオペレータ間の並列性は、どの程度活用可能で、GPUタスクの実行を高速化できるか?
- RQ3複数のCUDAストリームを用いた並列実行は、現代のGPUにおける推論および学習のパフォーマンスをどのように向上させるか?
- RQ4スケジューリングオーバーヘッドは、小バッチおよび低解像度の学習ワークロードにどのような影響を及ぼすか?
- RQ5軽量で自動化されたスケジューラは、既存の最先端の推論および学習システムを上回ることができるか?
主な発見
- Nimble は、PyTorch よりも最大22.34倍の高速化を達成し、多数の小さなGPUタスクを有するモデルにおいて顕著な性能向上を示している。
- 学習においては、CIFAR-10 などスケジューリングオーバーヘッドが顕著に影響を及ぼす小バッチおよび低解像度入力において、最大3.61倍の高速化を実現している。
- 推論ワークロードにおいて、Nimble は TensorRT より最大2.81倍、TVM より最大1.70倍の性能を発揮し、優れたスケジューリング効率を示している。
- AoT スケジューリング技術により、スケジューリングオーバーヘッドがほぼゼロにまで低下し、短時間のGPUタスクに対しても無視できるほど小さくなる。
- マルチストリーム実行により、独立したオペレータの有効な並列化が可能となり、NASNet-A や DARTS のような、高いオペレータ間同時実行性を持つモデルで特に効果を発揮する。
- ImageNet や BERT を用いた大バッチ学習では、性能向上はやや限定的であるが、これはスケジューリングオーバーヘッドがこのようなワークロードでは支配的ではないことを裏付けている。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。