[論文レビュー] A Metaprogramming and Autotuning Framework for Deploying Deep Learning Applications
この論文では、NVIDIA、AMD、QualcommのGPUを含む多様なハードウェアプラットフォーム上で、ポータブルで高パフォーマンスなGPUコード生成を可能にするメタプログラミングおよびオートチューニングフレームワークBodaを提示する。C++ベースのメタプログラミングと自動チューニングを組み合わせることで、NVIDIA GPUではベンダーライブラリと同等のパフォーマンスを達成し、QualcommやAMD GPUへの効率的な移植を最小限の手動作業で実現する。
In recent years, deep neural networks (DNNs), have yielded strong results on a wide range of applications. Graphics Processing Units (GPUs) have been one key enabling factor leading to the current popularity of DNNs. However, despite increasing hardware flexibility and software programming toolchain maturity, high efficiency GPU programming remains difficult: it suffers from high complexity, low productivity, and low portability. GPU vendors such as NVIDIA have spent enormous effort to write special-purpose DNN libraries. However, on other hardware targets, especially mobile GPUs, such vendor libraries are not generally available. Thus, the development of portable, open, high-performance, energy-efficient GPU code for DNN operations would enable broader deployment of DNN-based algorithms. Toward this end, this work presents a framework to enable productive, high-efficiency GPU programming for DNN computations across hardware platforms and programming models. In particular, the framework provides specific support for metaprogramming, autotuning, and DNN-tailored data types. Using our framework, we explore implementing DNN operations on three different hardware targets: NVIDIA, AMD, and Qualcomm GPUs. On NVIDIA GPUs, we show both portability between OpenCL and CUDA as well competitive performance compared to the vendor library. On Qualcomm GPUs, we show that our framework enables productive development of target-specific optimizations, and achieves reasonable absolute performance. Finally, On AMD GPUs, we show initial results that indicate our framework can yield reasonable performance on a new platform with minimal effort.
研究の動機と目的
- 深層学習演算のための手作業最適化されたGPUカーネルの高複雑性と低ポータビリティに対処すること。
- 新しいまたはベンダー非対応のハードウェアプラットフォームに高パフォーマンスDNNカーネルをデプロイするためのエンジニアリング作業を削減すること。
- プログラミングモデル(CUDAとOpenCL)およびハードウェアターゲット(NVIDIA、AMD、Qualcomm GPU)間でのパフォーマンスポータビリティを実現すること。
- DNN固有のカーネルに対してメタプログラミングとオートチューニングをサポートする生産的で拡張可能なフレームワークを提供すること。
- 自動チューニングとメタプログラミングが、ベンダースペシフィックライブラリが存在しないモバイルおよび新興GPUプラットフォームでも競争力のあるパフォーマンスを実現できることを示すこと。
提案手法
- フレームワークは、高レベルのDNN計算グラフからCレベルの最適化されたGPUカーネルを生成するため、C++ホステッドの文字列テンプレートベースのメタプログラミング手法を採用している。
- CUDAとOpenCL間の低レベルな差異を抽象化することで、プログラミングモデル間での構文的・意味的互換性を実現している。
- メタコード構造を用いて静的ループアンローリングとコード生成をサポートしており、実際のカーネルコードを模倣している。
- 自動チューニングを統合し、ハードウェアプラットフォーム全体で最適なカーネル設定(例:タイルサイズ、データ型)を探索・選択する。
- デバッグや最適化のガイダンスのため、生成されたコードのプロファイリングと分析を可能にしている。
- 新しいプラットフォーム(例:Qualcomm、AMD)でのチューニングの出発点として、1つのプラットフォーム(例:NVIDIA)でチューニング済みのカーネルを再利用している。
実験結果
リサーチクエスチョン
- RQ1メタプログラミングフレームワークは、NVIDIA GPUにおけるcuDNNのようなベンダーオプティマイズドライブラリと同等のパフォーマンスを達成できるか?
- RQ2同じ高レベルのDNNカーネル定義を、CUDAとOpenCLの異なるGPUプログラミングモデル間で最小限の変更で移植できるか、その程度はいかほどか?
- RQ3自動チューニングは、モバイルGPU(Qualcomm)や新興アーキテクチャ(AMD)のような新しいハードウェアプラットフォームへの迅速なパフォーマンスポータビリティをどの程度効果的に実現できるか?
- RQ4フレームワークは、ベンダー非対応ハードウェア向けに効率的なGPUカーネルを生成するための開発作業をどの程度削減できるか?
- RQ5メタプログラミングは、高度に最適化されたDNNカーネルの生成とデバッグを簡素化する役割を果たすか?
主な発見
- NVIDIA GPUでは、CUDAおよびOpenCLの両方でcuDNNと同等のパフォーマンスを達成しており、効果的なパフォーマンスおよびプログラミングモデルのポータビリティを実証した。
- QualcommモバイルGPUでは、ターゲットプラットフォームに事前の知識がなかった開発者でも、週数週間の部分的作業で妥当なパフォーマンスを達成できた。
- AMD GPUでは、既存コードの自動チューニングにより、最小限の手動チューニングで動作可能で、ある程度のパフォーマンスを達成するベースラインが得られ、フレームワークがプラットフォーム固有最適化の基盤としての役割を果たすことを検証した。
- C++テンプレートを用いたコード生成のメタプログラミングアプローチは、Perlで生成されたアセンブリなど、低レベルな代替手法よりも保守性が高く、デバッグも容易であった。
- フレームワークが異なるプラットフォーム間でチューニング済みの設定を再利用できることで、DNNカーネルを新しいハードウェアに移植するための総合的エンジニアリングコストを顕著に削減した。
- 結果から、フレームワークは、高パフォーマンス推論のための代替的でオープンかつベンダー中立的な選択肢として実用的である可能性を示唆している。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。