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は「技術力」の集中を加速させる。巨大企業によるAIの独占は深刻な結果をもたらすのか?

AI テクノロジーがかなり集中化しており、テクノロジー大手が優位に立っていることにお気づきですか?...

スマートネットワークとスマート製造を備えた新エネルギーインテリジェントコネクテッドビークルがデジタル変革への道を開く

重慶には「マスター、急いでいます!」というスピードがあります。シートベルトを締めると、地面に近いとこ...

科学者:大規模なAIモデルは小さなAIツールを自動的に生成できる

12月18日、Businessinsiderによると、大規模なAIモデルは現在、人間の介入なしに完全...

2021年に注目すべき5つのAI関連の仕事スキル

困難な一年であったにもかかわらず、世界中の多くの企業が、ビジネスを最大化するために人工知能(AI)を...

4Paradigm、ビジネス担当者がAIアプリケーションを開発できるようにする新しいAIプラットフォームツールをリリース

9月18日、2018年世界人工知能会議中。 Fourth Paradigm は、自動機械学習プラット...

ジャック・マー:機械が人間に取って代わることは決してできない!それは何に代わるのでしょうか?

近年、人工知能、クラウドコンピューティング、ビッグデータ、モノのインターネット、産業用インターネット...

シアトル港が機械学習を活用して航空貨物業務を効率化する方法

シアトル港は100年以上の歴史がありますが、非常に新しい技術を導入しています。シアトル港とシアトル・...

ドローンは諸刃の剣でしょうか?それでは5Gを追加した後をご覧ください!

「ドローンは諸刃の剣だ」とよく言われます。なぜなら、一方ではドローンの大きな応用価値が私たちの生産...

...

AI を活用して災害による損失を評価し、救助活動を支援する

地震、ハリケーン、洪水などの自然災害は、広大な地域と何百万人もの人々に影響を及ぼし、物流上の大きな課...

AIは英語のエッセイを添削できますか? IELTS、CET-4、CET-6の採点、コメント、エラー修正が必要です

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

プログラマーという職業は10年以内にAIによって消滅するのでしょうか?

これは非常に興味深い質問です。プログラマーという職業はAIによって消滅することはないと思いますが、プ...

クラウド ネイティブが新たな標準になりますが、人工知能はそれに備えていますか?

テクノロジーの発展に伴い、クラウド コンピューティング テクノロジーは進歩し続け、その目的も変化して...

チューリング賞受賞者のジュディア・パールが語る「データだけに頼るな」

[[412443]]現在の人工知能研究コミュニティでは、データ中心の方法が絶対的に優勢であり、その...

人工知能産業は急速に発展しており、その規模は2020年には1600億ドルを超えるだろう

22日、「2018年中国IT市場年次大会」で、中国の中核人工知能産業の規模が2017年に700億元を...