CUDA と TensorRT モデルの展開の最適化: 重要な考慮事項と実践的な戦略

CUDA と TensorRT モデルの展開の最適化: 重要な考慮事項と実践的な戦略

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

私の個人的な理解

モデルの展開と最適化は、現在多くの自動運転企業が人材とリソースを投入して開発しているモジュールです。特定のチップにモデルを効率的に展開する方法が重要です。ディープラーニング モデルの導入と最適化は、いくつかの重要な考慮事項を伴う包括的なプロセスです。 TensorRT などのツールはモデルに対して強力な最適化を提供しますが、その適用範囲は無制限ではなく、開発者が手動で調整したり補足したりする必要がある場合もあります。さらに、CUDA コアまたは Tensor コアの選択、前処理と後処理の効率の考慮、さらにパフォーマンス分析とベンチマークを行うことはすべて、モデルが特定のハードウェア上で最適なパフォーマンスを実現できるようにするための重要なステップです。今日は、モデル展開に関する重要な考慮事項と実践的な戦略についてお話しします。

すべてのコンテンツ:すべて完了! TensorRT + CUDA アクセラレーション チュートリアルに基づく CNN/Transformer/Detection/BEV モデルの 4 つの主要なデプロイメント コード!

1. 失敗作

まず、FLOPS と TOPS の意味を説明しましょう。

FLOPS : Floating Point Operations Per Second の略で、1 秒あたりの浮動小数点演算回数を意味します。これは、コンピューターまたはコンピューティング デバイスが 1 秒間に実行する浮動小数点演算の数を測定するものです。通常、プロセッサの計算パフォーマンスを示すために使用されます。たとえば、1 TFLOPS は 1 秒あたり 1 兆回の浮動小数点演算を意味します。

TOPS : Tera Operations Per Second の略で、1 秒あたりの操作数を意味します。これは FLOPS に似ていますが、通常は浮動小数点演算だけでなく、整数または混合型の計算能力を測定するために使用されます。

以下は、NVIDIA A100 のパフォーマンス パラメータの表です (リリース時の公開情報に基づく)。これらのパフォーマンス数値は理論上のピークコンピューティング能力を表しており、実際のアプリケーションでのパフォーマンスはさまざまな要因によって異なる場合があることに注意してください。

パラメータ

パフォーマンス値

ピーク FP64 (倍精度浮動小数点パフォーマンス)

9.7 テラフロップス

ピーク FP32 (単精度浮動小数点パフォーマンス)

19.5 テラフロップス

ピーク FP16 (半精度浮動小数点パフォーマンス)

312 テラフロップス

テンソルパフォーマンス (FP16)

624トップス

INT8パフォーマンス

1248トップス

INT4 パフォーマンス

2496トップス

以下はJetson Xavier AGX Voltaのパラメータです

パラメータ

Jetson Xavier AGX (Volta)

コアの種類と数量


CUDAコア

512

テンソルコア

64

SMS

8

ピーク値を計算する


FP32

1.4 テラフロップス

FP16

11 テラフロップス

INT8

22トップス

帯域幅

137 GB/秒

頻度

900MHz

Tensor パフォーマンス (FP16):ディープラーニングと AI アプリケーション向けに最適化された Tensor Core の半精度浮動小数点パフォーマンス。

INT8 パフォーマンス:一部のディープラーニング ワークロードで一般的に使用される 8 ビット整数パフォーマンス。

INT4 パフォーマンス:より高いスループットを必要としながら、より低い精度でも許容できるアプリケーション向けの 4 ビット整数パフォーマンス。

このデータは、さまざまな精度とデータ タイプにおける A100 のパフォーマンスを包括的に示します。さまざまなアプリケーションやタスクでは、計算の精度と速度の要件に基づいて、最も適したデータ タイプと操作モードを選択できます。

2. FLOPs

これは混乱しやすいです。これはモデルのサイズの指標にすぎません。以下はYOLOV5とSwin TransformerのFLOPを示しています。

パラメータ/モデル

YOLOv5 (640x640)

スウィントランスフォーマー(224x224)

小さい

YOLOv5s: 約 3.5 GFLOP

Swin Tiny: 約 4.5 GFLOP

中くらい

YOLOv5m: 約6.9GFLOPS

Swin Small: ~8.7 GFLOPs

大きい

YOLOv5l: 約 12.7 GFLOP

Swin ベース: ~17.3 GFLOPs

特大

YOLOv5x: 約 17.4 GFLOP

Swin Large: ~34.5 GFLOPs

  1. モデルサイズと計算の複雑さの関係:
  • 各モデル ファミリ (YOLOv5 または Swin Transformer) では、モデル サイズが大きくなると (極小から特大へ)、計算の複雑さ (FLOP) もそれに応じて増加します。これは、通常、大規模なモデルにはより多くのレイヤーとパラメータがあり、より多くの計算が必要になるため、理解できます。
  1. モデル入力サイズの影響:
  • YOLOv5 の入力サイズは 640x640 ですが、Swin Transformer の入力サイズは 224x224 です。それでも、より小型の Swin Transformer モデルでも、同様の FLOP またはそれ以上の FLOP を実現しています。これは、従来の畳み込みネットワーク アーキテクチャと比較して、Transformer アーキテクチャがいかに計算集約的であるかを強調しています。


  1. さまざまなモデルタイプ:


  • 前述したように、YOLOv5 はオブジェクト検出モデルですが、Swin Transformer は主に画像分類用に設計されています。これら 2 つは異なるタスクに最適化されているため、比較するのは完全に公平ではない可能性があります。それでも、この比較により、さまざまなモデルや構造の計算の複雑さに関する一般的な感覚が得られます。


  1. FLOPとパフォーマンスの関係:


  • FLOP はモデルの計算の複雑さに関する情報を提供しますが、モデルが実際にどれだけ速く、効率的に実行されるかを直接示すものではありません。メモリ アクセス、最適化手法、ハードウェア特性などの他の要因も実際のパフォーマンスに影響します。

  • 同様に、FLOP はモデルの精度に直接関係するわけではありません。場合によっては、適切にトレーニングされ最適化されていれば、小さなモデルでも非常に優れたパフォーマンスを発揮することがあります。

全体として、この表は、異なるスケールでの 2 つの異なるモデル構造の計算の複雑さを視覚的に比較しています。ただし、これらのデータの解釈では、モデルの特定の目的、設計目標、およびその他の関連要因を考慮する必要があります。

3. CUDA コアと Tensor コア

CUDAコア:

  • 定義: CUDA Core は、浮動小数点演算と整数演算を実行するための NVIDIA GPU の基本的なコンピューティング ユニットです。
  • 目的: CUDA コアは主に、グラフィックス レンダリング、物理シミュレーション、その他の数値計算などの一般的なグラフィックスおよびコンピューティング タスクに使用されます。

テンソルコア:

  • 定義: Tensor Core は、ディープラーニングで行列演算を効率的に実行するために NVIDIA の新しいアーキテクチャ (Volta、Turing、Ampere など) の一部に導入された特殊なハードウェア ユニットです。
  • 目的: Tensor コアは、特にニューラル ネットワークのトレーニングと推論の中核となる大規模な行列乗算と加算演算を実行するために、ディープラーニング計算用に特別に設計されています。

つまり、CUDA Core は GPU の一般的なコンピューティングの主力であり、さまざまなグラフィックスおよびコンピューティング タスクを処理します。一方、Tensor Core はディープラーニング タスク用に特別に設計された効率的なコンピューティング ユニットです。

A100 には 6912 個の CUDA コアと 432 個の Tensor コアしかありません。 Tensor コアの数は少ないものの、特定のディープラーニング タスクの処理には非常に効率的です。

設計目的:

CUDA コアは、グラフィックス、物理シミュレーション、一般的な数値計算など、さまざまなタスクを処理できる汎用コンピューティング ユニットです。 Tensor コアは、ディープラーニングの計算、特に行列の乗算と累積演算用に特別に設計されています。パフォーマンス:

単一の CUDA コアは、基本的な浮動小数点演算と整数演算を実行できます。各 Tensor コアは、行列の乗算および累算演算の小さなブロック (たとえば、4x4 または 8x8) を 1 サイクルで処理できます。これにより、ディープラーニング操作を処理する際に非常に効率的になります。使用シナリオ:

グラフィック レンダリングや一般的なコンピューティング タスクを実行する場合、CUDA コアが主に使用されます。ディープラーニングのトレーニングや推論タスクを実行する場合、特に cuDNN や TensorRT などのライブラリを使用する場合は、最大の計算効率を実現するために Tensor コアが積極的に活用されます。 A100 を例にすると、NVIDIA が CUDA コアと Tensor コアを組み合わせることで、効率的なディープラーニングと一般的なコンピューティング パフォーマンスを提供する方法が明確にわかります。

4. ルーフラインモデル

ルーフライン モデルは、計算集約型アプリケーションのパフォーマンスを特徴付けるための視覚化ツールです。これは、開発者がアプリケーションのパフォーマンスのボトルネックを理解し、それを特定のハードウェアの理論上のピークパフォーマンスと比較できるフレームワークを提供します。ルーフライン モデルの主な目的は、アルゴリズムとハードウェアの相互作用に関する洞察を提供し、最適化のためのガイダンスを提供することです。

ルーフライン モデルは基本的に次のようなグラフです。

  • x 軸: 計算とデータ移動の比率。通常は「1 バイトあたりの浮動小数点演算」として表されます。
  • Y 軸: パフォーマンス。通常は「FLOPS」で測定されます。

この図には 2 つの主要な部分があります。

  1. Roof : ハードウェアのパフォーマンス上限を表します。これは 2 つの部分から構成されます。
  • 計算上限: これは通常、FLOPS 単位のピーク計算パフォーマンスです。
  • 帯域幅上限: これは、メイン メモリからコンピューティング ユニットにデータを移動できる最大速度です。
  1. : アプリケーションまたはアルゴリズムのパフォーマンスを表します。その傾きは、メモリ アクセスと浮動小数点計算の比率によって決まります。

開発者は、ルーフライン モデル上のアルゴリズムの位置を観察することで、アルゴリズムが計算能力または帯域幅によって制限されているかどうかを判断し、それに応じて最適化戦略を決定できます。

ケース1: RTX 3080

ケース2: Jetson Xavier AGX Volta

パラメータ

Jetson Xavier AGX (Volta)

コアの種類と数量


CUDAコア

512

テンソルコア

64

SMS

8

ピーク値を計算する


FP32

1.4テラフロップス

FP16

11 テラフロップス

INT8

22トップス

帯域幅

137 GB/秒

頻度

900MHz

この2つの事例の比較からもエッジとサーバーの違いがわかるので、TensorRT・CUDAの使いこなしは非常に重要です。こうしたSDKを使いこなしてお客様のニーズに応えられることは、私たちにとっても仕事に活かせるチャンスです。

5. モデルの展開に関する誤解

モデルのパフォーマンスと FLOP

FLOP(浮動小数点演算)は、モデルの計算の複雑さを測定するためによく使用されます。ただし、モデルのパフォーマンスを完全に説明するには不十分です。 FLOP はモデルの計算負荷を反映しますが、実際の推論速度と効率は他の要因によっても影響されます。たとえば、メモリへのアクセス、データの変換と再形成、コンピューティングとは関係ないがディープ ニューラル ネットワークの操作に関連するその他の部分などです。さらに、特に軽量モデルの場合、前処理や後処理などの手順にもかなりの時間がかかる場合があります。

TensorRT の制限

TensorRT は、ディープラーニング モデルを最適化して推論パフォーマンスを向上させることができる、NVIDIA が提供する強力なツールです。ただし、その最適化機能には制限がないわけではありません。たとえば、1x1 conv や depthwise conv などの計算密度が低い操作は、TensorRT では再構築できない可能性があります。一部の操作では、GPU を最適化できない場合、TensorRT は CPU 上で実行することを選択する場合があります。しかし、開発者は手動でコードを調整して、特定の CPU 操作を GPU にオフロードすることができます。さらに、TensorRT でまだサポートされていない演算子に遭遇した場合は、カスタム プラグインを作成して補足することができます。

mobileNet には、1x1 conv、depthwise conv 演算子が登場します。Transformer の最適化では、最後の FC レイヤーをこれらの 2 つの演算子に置き換えます。これにより、パラメータの数は減りますが、計算密度も減ります。

CUDA Core と Tensor Core を選択する際の考慮事項

NVIDIA の最新 GPU には通常、CUDA コアと Tensor コアが搭載されています。 Tensor コアはディープラーニング操作用に特別に最適化されていますが、TensorRT では必ずしも常に使用されるわけではありません。実際、TensorRT はカーネル自動チューニングを通じて最適なカーネル実行モードを選択するため、場合によっては INT8 のパフォーマンスが FP16 よりも悪くなる可能性があります。 Tensor Core を効果的に利用するには、テンソルの次元が 8 または 16 の倍数であることを確認する必要がある場合があります。

前処理と後処理にかかる時間オーバーヘッド

ディープラーニングの応用においては、前処理(画像調整や正規化など)と後処理(結果解釈など)が欠かせないステップです。ただし、軽量モデルの場合、これらの処理手順は実際の DNN 推論よりも時間がかかる可能性があります。一部の前処理および後処理手順は、ロジックが複雑なため、GPU 並列化には適していません。しかし、解決策としては、このロジックの並列部分を GPU に移動するか、CPU 上で Halide などの最適化されたライブラリを使用することです。これにより、ぼかしやスケーリングなどの特定のタスクの効率が向上します。

YOLO の後処理を行うときは、速度感を出すために GPU に任せることが多いのですが、これは必須ではありません。まず、GPU にはソート機能がありません。次に、しきい値を使用して YOLO シリーズの大部分をフィルタリングすると、残りの bbox は非常に小さくなり、必ずしも速度が大幅に速くなるわけではありません。

TRT がスムーズに実行されても終わりではありません。

TensorRT 推論エンジンの作成と使用は、最適化プロセスの始まりにすぎません。モデルが最適なパフォーマンスを実現することを保証するために、開発者はモデルのベンチマークとプロファイルをさらに行う必要があります。 NVIDIA は、nsys、nvprof、dlprof、Nsight などのツールを提供しており、開発者がパフォーマンスのボトルネックを正確に特定し、さらなる最適化の機会を見つけ、不要なメモリ アクセスを識別するのに役立ちます。

オリジナルリンク: https://mp.weixin.qq.com/s/OikQ9BUZi6_be8ul6L0F6g

<<:  医学物理学におけるAIの応用に関する簡単な分析

>>:  ADAPT: エンドツーエンドの自動運転の説明可能性を徹底的に探求する、理解の夜明け!

ブログ    
ブログ    

推薦する

アクセシブルな旅行はより安全です! ByteDanceの研究成果がCVPR2022 AVAコンペティションで優勝

最近、CVPR2022の各競技の結果が次々と発表されました。ByteDanceの知能創造AIプラット...

人工知能のシンギュラリティに関する考察: 超知能 AI の倫理的問題は無視できない

ロボットの電源を切ったり、人工知能アルゴリズムをオフにしたりするのは悲しいですか? まだそうではあり...

人工知能を使って手作業を置き換え、コストを削減し、効率を高めることは、まさに賢いことだ

「大丈夫ですよ。」 15年間工場で働いてきた「古い」労働者として、今日は人工知能についての私の見解を...

このバイオメディカル AI アプリケーションは信頼できますか?まずはシリコンバレーのトップベンチャーキャピタリストに6つの質問に答えてください

[[375650]]生物学分野における人工知能の応用は飛躍的に進歩しています。創薬、診断開発からヘル...

多くの機械学習戦略が失敗する理由

クラウド コンピューティング サービス プロバイダーの Rackspace Technology が...

滴滴出行とスタンフォード人工知能研究所が協力

滴滴出行は5月5日、スタンフォード人工知能研究所との提携を発表した。両者は人工知能のホットな話題につ...

浅いモデルから深いモデルへ: 機械学習最適化アルゴリズムの概要

論文リンク: https://arxiv.org/abs/1706.10207概要: この論文では、...

人工知能が詩を書きました。この詩の知的財産権は誰が所有しているのでしょうか?

以下は、テンセント研究所法律研究センター副所長兼主任研究員である蔡雄山氏の講演の記録です。多くの場合...

マスク氏の最新インタビュー:自動運転、AI、テスラのヒューマノイドロボットについて

最近、世界一の富豪イーロン・マスク氏がTEDディレクターのクリス・アンダーソン氏が主催する独占インタ...

...

自然言語処理がヒラリーとトランプの「話し方」を分析

[[173621]]編集者注:現地時間10月9日、米国大統領選挙の2人の候補者による第2回公開討論会...

AIは自己反復と最適化が可能で、わずか26秒で歩行ロボットを設計できる

10月10日のニュース、AIに陸上を歩けるロボットを設計するように頼んだら何秒かかるでしょうか?答え...

アルゴリズム要件実装の難航の記録: 軽量な人間姿勢推定モデル開発への道

[[425432]]この記事は、ソリューションの選択から再現の試みなど、軽量な人間の姿勢推定モデルを...

Excel 愛好家ですか?コンピュータービジョンのための細胞: 顔検出とOCRは問題なし

コンピュータービジョンとは何ですか?プロフェッショナルすぎると、やる気をなくしてしまうのでしょうか?...