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はクラウドコンピューティングのコスト戦略を強化

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

ブログ    

推薦する

PyTorch を使用したノイズ除去拡散モデルの実装

ノイズ除去拡散確率モデル (DDPM) の仕組みを詳しく検討する前に、生成 AI の進歩、具体的には...

TransformerはAI分野を支配するのでしょうか?結論を出すのは時期尚早だ

自然言語処理タスクから始まり、画像分類と生成の分野で活躍する無敵のトランスフォーマーは、次の伝説とな...

MLCommonsがAI安全ワーキンググループを発表

人工知能ベンチマーク組織 MLCommons は、人工知能安全性 (AIS) ワーキング グループの...

...

AI時代が近づいています。将来的には人工知能を活用した教育方法も登場するのでしょうか?

人工知能技術の進歩により、あらゆる生活がこの技術によって変化し始めています。近い将来、人工知能技術の...

...

人工知能は過去70年間で急速に成長し始めたばかりである

[[337550]] 2019年末現在、わが国の中核人工知能産業の規模は510億人民元を超え、人工知...

AV-TESTに再び認定されました! Sangfor EDRは中国で初めて満点を獲得したエンタープライズレベルのエンドポイントセキュリティ製品となる

検出能力6点!パフォーマンス消費6ポイント!使いやすさ6点!先日、国際的に権威のある評価機関 AV-...

AIによる顔の改造の一般的な手法の詳細な説明

最近また「AI変顔」が流行っていますね。 Leiphone.com(公式アカウント:Leiphone...

「段階的に考える」だけでは不十分です。モデルを「より多くのステップで考える」ようにすれば、より有用になります。

今日では、大規模言語モデル (LLM) とその高度なヒント戦略の出現により、特に古典的な NLP タ...

企業における機械学習: 次の 1 兆ドル規模の成長はどこから来るのでしょうか?

ハリー・ポッターの世界では、組分け帽子は生徒の行動履歴、好み、性格に関するデータを取得し、そのデータ...

7つの予測ストレージ分析ツールの比較

人工知能技術は、機械学習、計算統計、さまざまなディープラーニングモデルの使用を通じて主流になりました...

...

...

静的解析に機械学習を使用する方法

機械学習と人工知能は、特にマーケティング分析とサイバーセキュリティの分野で多くの分野で広く応用されて...