TensorRT はどのようにしてより高速なアーキテクチャを実現するのでしょうか?

TensorRT はどのようにしてより高速なアーキテクチャを実現するのでしょうか?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転載したものです。転載については出典元にお問い合わせください。

1. TensorRT とは何ですか?

2016 年に、Nvidia は独自の GPU 上で推論を高速化するための SDK を提供しました。これは推論フレームワークとも呼ばれます。

2. なぜですか?

独自の GPU または DLA を最適化する方法を最もよく知っているのは Nvidia だけなので、TensorRT はネットワークを最も高速に実行し、Pytorch を直接使用するよりも N 倍高速です。

TensorRTははるかに先を行く

3. どのように行われましたか?

1. 最適化空間全体を検索

Pytorch などの他のトレーニング フレームワークとの最大の違いは、TensorRT のネットワーク最適化アルゴリズムがターゲット GPU の推論パフォーマンス最適化に基づいているのに対し、他のフレームワークはトレーニングと推論を総合的に考慮する必要があり、さらに重要なことに、ターゲット GPU に的を絞った最適化を実行しないことです。

TensorRT はターゲット GPU に対してどのように最適化されますか?

簡単に言えば、可能な設計空間内でグローバルな最適解を探すことです。

この検索空間内の変数は何ですか?

たとえば、CUDA アーキテクチャのプログラミング モデルに対応して、Tensor はいくつのブロックに分割されますか?そして、これらのブロックがグリッドにどのように編成されるかです。

タスクは複数のブロックに分割されます

ブロックはグリッドに整理されています

異なる組織レベルは、異なるストレージアーキテクチャ内の異なるメモリに対応します。

たとえば、計算を完了するためにどのような命令が使用されるのでしょうか? FFMA、FMMA、または TensorCore 命令である可能性があります...

より難しい部分は、Tensor データ フローのスケジュール設定かもしれません。それらはローカル メモリ、共有メモリ、またはグローバル メモリに配置する必要がありますか?どうやって配置するのですか?

これらの変数を組み合わせると、巨大な検索空間が形成され、CPU が数日間計算しても結果を取得できない可能性があります。

しかし、ニューラル ネットワークの計算はより大きな粒度の演算子で構成されており、演算子の上にはさらに大きな粒度の層構造があることがわかっています。また、各レイヤーは比較的独立していることも明確にわかっています。つまり、各レイヤーの計算を最適化でき、最終的に最適化されたレイヤーを連結することが、ネットワークのグローバルな最適解になる可能性が高いということです。

そのため、TensorRT は多くの演算子とレイヤー (CUDA カーネル) を事前に書き込みます。もちろん、これらの演算子の入力テンソルと出力テンソルは、ネットワークの入力と出力、および GPU リソースの違いに合わせて構成できます。

いくつかの最適化された演算子

元の命令レベルの検索から演算子レベルの検索へと、検索空間は小さくなりました。これらの実装は CUDA カーネルで記述されているため、カーネルレベルの検索であると言う方が正確です。

しかし、最も重要かつ複雑な部分でもある Tensor データフローのスケジューリング問題は解決されていません。入力テンソルをいくつのブロックに分割すればよいでしょうか?これらのブロックをいくつのスレッドに割り当てる必要がありますか? Tensor はどこに保存されますか?ローカル/共有/グローバルメモリはどこにありますか?中間計算結果はどこに保存されますか?

コンピューティング部分のパフォーマンスはシミュレーション(命令セットシミュレーターに類似)で計算できますが、共有/L2/グローバルメモリ内のTensorデータの流れのシミュレーションでは、シミュレートするデータ量とスレッド数が多すぎるため正確な結果を得ることが難しく、試す可能性が多数あるため、CPUシミュレーション計算に頼ることは忘れてください。唯一の方法は、候補演算子をターゲット GPU 上で直接実行し、パフォーマンスを計算し、最終的に比較して最適なソリューションを選択することです。 TensorRT はこのプロセスをタイミングと呼びます。TensorRTは、分析用に最適化された中間プロセスを保存することもでき、これをタイミング キャッシュと呼びます (trtexec --timingCacheFile=<file> 経由)。

Nvida GPU メモリ アーキテクチャ

上記の最適化プロセスは、ハードウェア認識最適化と呼ばれます。

要約すると、オプティマイザーは次の分析に重点を置きます。

  • ハードウェアの種類 (ハードウェアの機能...)
  • メモリ フットプリント (共有、キャッシュ、グローバル...)
  • 入力と出力の形状
  • ウェイトシェイプ
  • 重みの疎らさ
  • 量子化のレベル(メモリを再考する)

これらは、Pytorch などのフレームワークでは、特にストレージ システムの最適化については深く掘り下げられません。

2. カーネルの選択を強制する

ブロック間のスレッドの実行順序はランダムであるため、CPU は GDDR/HBM にデータを読み書きする可能性があり、GPU クロック周波数も負荷に応じて変化する可能性があり、異なるシステム動作環境では GPU パフォーマンスに違いが生じます。この違いにより、TensorRT Timing の最適解が実際の推論中に最適な解ではなくなり、最適でないカーネルが選択される可能性もあります。

TensorRT は、特定のカーネル実装が最適なソリューションであると確信している場合に、そのカーネル実装を強制的に選択するという解決策を提供します。

TensorRT が提供する API は AlgorithmSelector と呼ばれます。

3. プラグイン

もちろん、設計した演算子に自信がある場合は、独自のカーネルを記述し、その使用を指定することもできます。

しかし、ほとんどの場合、TensorRT が特定の演算子をサポートしていないことがわかり、カーネルを記述せざるを得なくなります。結局のところ、CUDA プログラミングは簡単ではなく、十分なパフォーマンスが必要です。

4. cuBLAS と cuDNN

TensorRT のインストール手順では、最初に CUDA SDK と cuDNN をインストールする必要があります。

TensorRT によって呼び出されるカーネルを Nvidia GPU 用のアセンブリ命令シーケンスにコンパイルするには NVCC コンパイラが必要であるため、CUDA SDK をインストールする必要があることは明らかです。

ただし、CUDA SDK には、TensorRT に依存する cuBLAS ライブラリもあります。C++ ライブラリ BLAS (Basic Linear Algebra Subprograms) は、CPU での線形代数計算に最適化されていることはわかっています。そして、cuBLAS は、CUDA GPU 用に開発された線形代数計算ライブラリです。もちろん、その基礎レイヤーは CUDA カーネルで記述されています。一般的な行列乗算演算子は、cuBLAS を直接呼び出すことができます。

cuBLAS は非常に初期に開発され、CUDA エコシステムで最も初期のライブラリの 1 つになるはずです。しかし、ディープラーニングの人気が高まるにつれて、Nvidia は cuDNN ライブラリをエコシステムに追加しました。これはより高いレベルにあり、ネットワーク層をカプセル化します。つまり、実際には、TensorRT は cuDNN ライブラリの最適化されたカーネルを直接呼び出すこともできます。はい、そしていいえ。

TensorRT は、TensorRT で記述されたカーネルを使用するか、cuBLAS と cuDNN を使用するかを決定する、いわゆるTactic (戦略)を選択できます。

5. 戦術

TensorRT の Tactic は多くの最適化オプションを決定できます。

たとえば、オペレーターの時間を計測するたびに、平均実行回数が必要になります。デフォルトでは、不確実性によって発生するエラーを減らすために TensorRT は 4 回実行されますが、この回数は変更できます。

前述のカーネルライブラリの選択、プラグインの選択、GPU クロック周波数のロックなども決定できます。

6. 定量化

TensorRT には、ネットワークを量子化する機能が確かにあります。ネットワーク全体を int8 に量子化する暗黙的な量子化方法を提供し、Q/DQ レイヤーを挿入する明示的な量子化方法も提供します。

ハイブリッド量子化は、Nvidia が非常に優れた成果を上げている分野であり、コンピューティング リソースの効率的な使用において重要な役割を果たします。ただし、これは別のトピックであり、機会があれば後で説明します。

7. マルチアプリケーション推論とマルチカード推論

実際、これが Nvidia の強みです。競合他社がシングルカードのパフォーマンスについて話しているとき、マルチカードまたはマルチノードは実際には Nvidia のキラー機能です。

さらに、単一のカードで十分なパフォーマンスが得られる場合は、並列推論のストリームを複数用意することが必要になる場合がありますが、これも TensorRT では必須です。

4. TensorRT のカーネルとは何ですか?

回答: 実際の操作を通じて、ネットワーク、入力、出力テンソル、およびターゲット GPU リソースに基づいて候補ライブラリから最適なカーネルを選択するハードウェア対応オプティマイザー。

5. コンパイラ

最後に、コンパイラのフロントエンドとバックエンドの理論を適用する必要がある場合、上で説明した部分は、基盤となるハードウェアと密接に関連しているため、コンパイラのバックエンド部分に属する必要があります。論理的には物理コンパイラ NVCC の上に配置されているだけです。コンパイラのフロントエンド、つまりハードウェアに関係のないグラフ融合部分も TensorRT Builder で完結します。

AIコンパイラについてあまり知らない人は、次の入門記事を読んでみてください。

https://zhuanlan.zhihu.com/p/632648673

最後に、まとめとして2枚の写真を送ります

TensorRT ツールチェーン

TensorRTバックエンド最適化プロセス


<<:  AIがピークを迎える中、CIOはクラウドコンピューティングのコスト戦略を強化

>>:  動作計画のための探索アルゴリズム: フロントエンド計画、バックエンド軌道生成から状態解まで

ブログ    
ブログ    

推薦する

マイクロソフトのAI研究者が、クラウドストレージリンクの設定ミスにより、大量の内部データを誤って公開した。

9月19日、サイバーセキュリティ企業の最新調査によると、マイクロソフトの人工知能研究チームがソフト...

2022年に注目すべき5つのAI活用法

AI インフラストラクチャの継続的な革新と開発により、今日の仕事のやり方は変化しました。人工知能は...

本当に知っておくべき 10 の AI テクノロジートレンド

人工知能技術のトレンドは人類を前進させています。デジタル変革はあらゆる業界に広がり、人工知能は科学者...

...

...

LLaVA-1.6は非常に強力で、Gemini Proを上回り、推論機能とOCR機能が向上しています。

昨年 4 月、ウィスコンシン大学マディソン校、マイクロソフト リサーチ、コロンビア大学の研究者が共同...

アルトマン:解雇されて戻ってくるのは辛かったが、OpenAIにとっては良いことだ

1月8日、OpenAIのCEOサム・アルトマン氏は、タイム誌編集長とのインタビューで、昨年末に同社と...

米国エネルギー省、AIによる科学的発見の自動化を支援するために1,600万ドルを投資

技術の複雑さが年々増すにつれ、科学的な革新と発見への扉がより多くの分野に開かれています。現在の問題は...

...

ドアを早く開けてください、ロボット先生が教えに来ます

[[206421]]国慶節の連休中の数日間、河南省では新たなテクノロジードラマが繰り広げられた。コン...

これからオープンする無人コンビニや無人スーパーにはこんな7つのブラックテクノロジーが隠されている

もうすぐダブルイレブンがやってきます。さまざまな商店が準備を進めています。JDの無人コンビニや無人ス...

5G時代の人工知能のホットスポットとなる業界はどこでしょうか?

このプロセスでは、多くのアプリケーションが継続的に追加されています。たとえば、コンピュータと通信の統...

カルパシーはOpenAIの内部闘争中にビデオを録画しました:大規模言語モデル入門がオンラインです

OpenAIでの混乱はひとまず終息し、社員たちは忙しく「仕事」をしている。今年初めに OpenAI ...

科学者らが磁場を使ってバイオニックロボットの動きを制御する新たな解決策を発表

科学者は長い間ロボット工学の分野に興味を持っており、最近のバイオニックソフトロボットはロボット工学の...