yukarinoki / reseach

0 stars 0 forks source link

Nimble: Lightweight and Parallel GPU Task Scheduling for Deep Learning #1

Open yukarinoki opened 1 year ago

yukarinoki commented 1 year ago

ブログもあるよ https://medium.com/friendliai/nimble-lightweight-and-parallel-gpu-task-scheduling-for-deep-learning-b10ff1e7b0b

yukarinoki commented 1 year ago

論文"Nimble: Lightweight and Parallel GPU Task Scheduling for Deep Learning"は、ディープラーニング(DL)のフレームワークがGPUを最大限に活用することにより、DLの推論と学習の速度を向上させることを目指しています。現状では、既存のDLフレームワークのGPUタスクスケジューリングには大きなオーバーヘッドが存在し、不必要なシリアル実行が発生していることが問題となっています。

この問題を解決するため、著者らは"Nimble"というDL実行エンジンを提案しています。Nimbleは「ahead-of-time (AoT) scheduling」という新たな技術を導入しています。この技術により、GPUカーネルの実行前にスケジューリング手順が完了するため、ランタイム中のスケジューリングオーバーヘッドがほとんど排除されます。

yukarinoki commented 1 year ago

GPUがタスクを処理する前に、DLフレームワークは一連の準備ステップ(GPUタスクスケジューリング)を経て、タスクをGPUに提出(GPUタスク送信)しなければなりません。現在のDLフレームワークでは、実行時にGPUタスクスケジューリングを行っていることに注意が必要です。

yukarinoki commented 1 year ago

image

yukarinoki commented 1 year ago

実行とスケジュールの時間にGapがあるらしい

image

yukarinoki commented 1 year ago

事前スケジューリング

事前実行をしてトレースを取ることで、スケジューラに必要な情報を取得する。

実行トレースと一緒に、Nimbleの事前に時間を計算する(AoT)スケジューラーは、プレ実行のために割り当てられたメモリを予約し、それらをタスクスケジュールにパックします image

yukarinoki commented 1 year ago

マルチストリーム

image

yukarinoki commented 1 year ago

Setting PyTorch as the baseline, Nimble’s inference speed outperforms PyTorch by up to 22.3 times, and TensorRT by up to 2.8 times.

image

yukarinoki commented 1 year ago
yukarinoki commented 1 year ago

でスケジュールを実現(まあ、できそうだな)

GPUタスクの情報をキャプチャするためにCUDA Stream Capture APIを使用します。その後、我々はキャプチャした情報からCUDA Graph [21](つまり、Nimbleにおける実行トレース表現)をインスタンス化します。ランタイムでは、新しい入力テンソルに対するリクエストがあるとき、Nimbleはスケジューリングオーバーヘッドを避けつつ、タスクスケジュールに基づいて記録されたGPUタスクを再生してニューラルネットワークを実行します。私たちはCUDA Graph Launch APIを使用してニューラルネットワークを実行します。このAPIは、CUDA Graph内の情報に基づいてGPUタスクを提出します。