NVIDIA Nsight 開発ツールを使用して Jetson Orin を最大限に活用しましょう

Orin アーキテクチャは、12 個の ARM Cortex A78 コアと 2 MB L3 キャッシュで構成される業界をリードするパフォーマンスで次世代エッジ AI システムを強化します。NVIDIA Ampere アーキテクチャ GPU は、16 個のストリーミング マルチプロセッサまたは SM ごとに 128 個の CUDA コアを提供します。Orin には、専用のアクセラレータもあります。ビデオ スケーリング、画像処理用のワークロード、オプティカル フロー アクセラレータ (OFA、2 つの JPEG デコーダ、2 つのディープ ラーニング アクセラレータ ユニットまたはディープ ラーニング操作用の Tensor RT 対応 DLA)、プログラマブル ビデオ アクセラレータ (PVA) およびビデオ コーデック エンジンも含まれます。Orin は高帯域幅 LPDDR5 メモリを使用し、22 個の PCI Express レーン、4 個のギガビット イーサネット コネクタ、16 個の CSI レーンを含む豊富な IO 接続オプションを備えています。これらすべての強力な機能を備えた Jetson Orin は、エッジ AI シナリオに取り組むための十分な装備を備えています。

次に、NVIDIA Nsight 開発ツールを使用してプラットフォームを最大限に活用する方法について説明します。開発者ツールの詳細に入る前に、新機能の概要を簡単に説明したいと思います。

NVIDIA は現在、完全に刷新された開発者ツールのランディング ページをhttp://nvidia.comに公開しています。今すぐサイトにアクセスして、すべてのツールとその機能の包括的な概要を確認し、業務に適したツールを見つけることができます。便利なガイド付きインターフェイスを使用して、取り組んでいる問題に適した特定のツールを絞り込むこともできます。

ARM 上でのツール GUI のネイティブ実行もサポートされるようになりました。Nsight Sys term、Nsight compute、および Nsight Visual Studio Code エディションは、既存のリモート分析およびコマンド ライン インターフェイスに加えて、NVIDIA Jetson AGX Orin SOC 上でネイティブに実行できるようになりました。

ここで、一般的な開発ワークフローと、これらのステップに関連する NVIDIA の Nsight ツールの全体像を見てみましょう。

アプリケーションの開発はいくつかの段階を経ます。

最初からIDEや開発環境でアプリケーションを作成し、

次に、デバッグしてそれが正しいことを確認し、その機能を証明します。

最後に、パフォーマンスのチューニングまたはプロファイリングがあり、プラットフォームを最大限に活用してパフォーマンスを最適化するためにアプリケーションまたはアルゴリズムが調整されます。

NVIDIA Nsight ツール スイートは、あらゆる段階を支援するために利用できるほか、コンピューティング ワークロードやグラフィックス ワークロードに重点を置いたワークフローのソリューションも提供します。Jetson 用のアプリケーションの開発がかつてないほど簡単になりました。

Nsight Visual Studio Code Edition は、VSC コードの完全な IDE 統合と、CUDA のネイティブ IntelliSense サポートを提供します。Jetson 上の Visual Studio Code で直接、または Windows または Linux ホストからリモートで CPU および GPU コードをビルドおよびデバッグできるようになりました。Nsight Visual Studio Code エディションは、組み込みの Visual Studio Code マーケットプレイスから手動でインストールすることも、Web サイトから手動でダウンロードすることもできます。

Nsight Visual Studio Code Edition を有効にすると、CUDA プログラミングとデバッグのためのワンストップ ツールになります。GPU ブレークポイントとデバイス コードを設定できます。CUDA フォーカスを使用して、SM ワープまたはレーンのステータスを表示します。CUDA コール スタックを見つけて、変数に興味深いイベントがないか調べます。CPU および GPU のレジスタ トレースとともに、オーバーレイやその他の状態を監視します。上級ユーザー向け。デバッグ コンソールは、デバッガ コマンドを直接実行するための便利なインターフェイスです。

Nsight の Visual Studio Code エディションで利用できるデバッグ機能について説明しました。しかし、それで終わりではありません。他にもあります。

CUDA gdb を使用すると、gdb 上に構築され、同じ CLI コマンドの多くを使用するコマンド ラインと IDE バックエンド デバッガーが得られます。CUDA gdb は、統合された CPU と CUDA デバッグを提供するだけでなく、CUDA C と SASS のサポートも提供します。

Compute Sanitizer は、正確性をチェックし、メモリの問題やエラーを特定するためのツール スイートです。これは、メモリ リークを特定するための memcheck で構成されます。Racecheck は競合状態を探し、Initcheck は初期化されていないグローバル メモリ アクセスを探し、Synccheck はスレッド同期の問題にフラグを立てます。

アプリケーションがデバッグ フェーズを通過すると、アプリケーションが機能し、設計どおりに機能することが検証されます。ここで分析フェーズに入り、最も効率的な形式で実行されるように最適化されます。そのオペレーティングプラットフォームを最大限に活用しながら。

パフォーマンスを最適化する技術は反復的なプロセスです。通常、次の 3 つの手順が必要です。

1 つ目は実行中のアプリケーションを分析または観察すること、2 つ目は分析結果を分析することです。分析が手元にあれば、アルゴリズムやアプリケーションに対して実行できる微調整や最適化のヒントが得られ、これらの変更を行った後に発見された設計のボトルネックやバグを改善および解決できます。このプロセスを繰り返し、プロファイルを再度実行して、加えた変更が望ましい効果と結果をもたらしたかどうかを確認します。

NVIDIA Nsight ツールを使用した分析はシームレスかつ強力です。これらのツールは、デバイス上で、またはこの GUI または CLI を使用してリモート ホストからなど、幅広いプロファイリング オプションを提供します。また、システムの組み込みデータ ソースを利用して、システムがどのように動作しているかを洞察することもできます。開発中のアプリケーション用に NVTX および開発者定義の NVTX タグで事前にアノテーションが付けられたライブラリ。トレースが収集されると、イベントを時間順に並べて依存関係を強調表示する GUI で視覚的に分析できます。アプリケーションの動作を視覚的に表現することは、これまで誤解されていた可能性のある設計上の考慮事項やアルゴリズムの動作を強調するのに非常に便利なツールです。さらに、データ プロファイルを利用して統計モデルを作成し、パターンや外れ値を特定することができます。

Nsight ツールには、トレースを分析し、アプリケーションのパフォーマンスを向上させるために対処できる一般的な問題や違反を見つけるのに役立つ分析ツールも組み込まれています。完了したばかりの分析から学んだ教訓を使用して、特定された問題に対処し、必要な最適化を行うためにアプリケーションが変更されます。次に、簡単な健全性チェックによって機能エラーが排除された後、ステップ 1 に戻ってアプリケーションを再度分析し、このプロセスを繰り返して、変更によって期待される改善がもたらされたことを確認します。この反復プロセスは通常、収穫逓減の法則に従います。この演習の最終目標は、このアプリケーションまたはシナリオに設定されたパフォーマンス目標によって決まります。

前のセクションでは、プロファイリング ワークフローと、プロファイリング マーカーがアプリケーションの動作を強調表示して追跡するのにどのように役立つかについて説明しました。NVTX または NVIDIA ツール拡張ライブラリは、オーバーヘッドを最小限に抑えた軽量のヘッダー注釈ライブラリです。NVTX を使用すると、アプリケーションのソース コードをタグや範囲注釈で装飾できます。これには、分析をさらに支援するためのいくつかの関数が含まれています。NVTX 注釈は、競合を回避し、トレース内の読みやすさを向上させるために範囲を指定できます。ネストされたスレッドは、スレッド スコープを使用して時間の経過とともに視覚化できます。プロセス スコープを使用すると、任意の同時実行性を考慮して、時間の経過とともにプロセスを追跡および視覚化できます。マーカーと範囲注釈をイベント属性で装飾して、色やカテゴリなどの追加の情報属性をイベントに提供して、ツールによるデータの視覚化をガイドし、読みやすさを向上させ、分析を支援します。

Nsight ツールを使用してプロファイル トレースを実行すると、すぐに使用できる多数の組み込みデータ ソースを利用できます。システム上の CPU、GPU、メモリ、通信、ネットワーク、CUDA、および OS アクティビティを観察できることに加えて、SDK およびアクセラレーション ライブラリ (TensorRT、cuDLA、cuDNN など) は NVTX アノテーションでより完全に装飾されています。これらをトレースに表示できるため、開発者は作業中のアプリケーションに注釈を付けるだけで済みます。

Nsight ファミリの分析ツールを使用すると、コンピューティングおよびグラフィックス アプリケーションの分析シナリオをサポートできます。コンピューティング中心のアプリケーションに取り組む開発者は、Nsight Systems と Nsight コンピューティングを組み合わせて使用​​しますが、グラフィックスに取り組む開発者は、Nsight Systems と Nsight Graphics を使用することになります。

通常、Nsight Systems から開始します。Nsight Systems は、ボトルネックやコールド スポットの分析と特定に役立つシステム全体の包括的なビューを提供します。コンピューター アプリケーションに取り組んでいる場合は、Nsight コンピューティングを使用して詳細な調査を実施し、CUDA カーネルのパフォーマンスの問題をさらに調査し、トラブルシューティングします。

同様に、グラフィックス アプリケーションの場合は、Nsight グラフィックス最適化を使用して、シェーダーとフレームのレンダリングのパフォーマンスの問題に対処します。Nsight Computer Graphics で修正を検証した後、Nsight System でシステムレベルの構成ファイルを再実行して、最適化が期待どおりに機能することを確認し、さらに重要なことに、他の場所でのリグレッションの可能性を排除します。前に見たように、すすぎ、このプロセスを繰り返します。

プロファイリング時に考慮すべきプロのヒントは、CUDA カーネルまたはグラフィックス シェーダーに進む前にシステム レベルのビューの収集をスキップしないことです。Nsight システム プロファイルを実行すると、メモリのボトルネック、OS と CPU のスケジューリングの問題、PCI BAR1 サブスクリプションの問題などが浮き彫りになることは明らかです。場合によっては、これらの問題は、アプリケーションがシステムで利用可能な GPU アクセラレータを最大限に活用できなくなり、システムのパフォーマンスに影響を与えるほど深刻になります。

ここで、Nsight システムの機能を詳しく見てみましょう。Nsight System は、システム全体にわたる強力な分析ツールです。これにより、CPU と GPU の相互作用を調べて、コードを最適化および調整する最大の機会を特定できます。Nsight を使用したプロファイリングは、GPU ワークロードを CPU の起源まで遡って追跡する調査に役立ち、GPU とアクセラレータ ユニットの使用率、および OS と vulan や cuda などのさまざまな API の間のアクティビティについてより詳細な洞察を得ることができます。

Nsight は、Gui または CLI を使用したオンデバイスおよびリモート プロファイリングをサポートし、すぐに使用できるランタイム プロファイルと、すぐに使用できる NVTX に付属するクールなアクセラレーション ライブラリを備えたマルチ GPU システムをサポートできます。アプリケーションに低オーバーヘッドと NVTX を追加することで、わずか数ステップでアプリケーションについてさらに洞察を得ることができます。Nsight での GPU メトリクス サンプリングは、視覚的なタイムライン上で低レベルのシステム メトリクスを可視化するのに役立ちます。これらは、システム全体のワークロード効率の概要を提供します。これらには、PCIE、DRAM などのスループットを含む IO アクティビティ メトリックが含まれます。また、リリースされた Tensor コアのアクティブな命令の使用率、占有および未割り当てのワーク スロットのワープも示しています。この情報は、システム アクティビティをより深く理解するのに役立ち、GPU がほとんどの時間アクティブであるかどうかなどの基本的な質問に答えるのに役立ちます。カーネル グリッドは十分大きく、SM 命令率は高いですか? Tensor Core を使用するかどうかなど。また、遭遇する可能性のある一般的な最適化プロセスを含む、拡張可能な分析およびエキスパート システム フレームワークも付属しています。

今日説明したすべてのツールは、ローカルの Jetson で実行できます。

Nsight compute は、CUDA アプリケーション用のカーネル プロファイラーです。詳細な低レベルのパフォーマンス メトリクスと API 情報を収集して、GPU 上で実行されている cUDA カーネルを分析するのに役立ちます。選択したカーネル プロファイルの特定のインスタンスを指定しながら、GUI または CLI を使用して CUDA カーネルを対話的にプロファイリングできます。これは非常に強力であり、メモリ ワークロードを追跡して GPU を最大限に活用するために使用できます。また、コアの最適化をガイドする、拡張可能な Python ベースのガイド付き分析フレームワークも含まれています。

Nsight compute は、GPU デバッガーおよびプロファイラーです。これは、パフォーマンス監視の実行、3D およびレイ トレーシング API のデバッグをより安価に行うのに役立ちます。また、キッカーや途切れを排除するためにグラフィックス アプリケーションのパフォーマンス チューニングにも役立ちます。GPU トレース プロバイダーは、jetson で vulcan と opengl をサポートしており、グラフィックス アプリケーションの 1 つ以上のフレームにわたる低レベルのメトリクスを表示するために使用できます。これらのメトリクスは、フレーム内で十分に活用されていない GPU の領域を特定するために使用でき、最適化の決定に役立ちます。しかし、それだけではありません。プラトーに達して自由に始めるには、もう少し深く掘り下げる必要があるかもしれません。Range Analyzer または Shader Analyzer を使用します。命令のスケジューリングをドリルダウンして、GPU の使用率低下の原因となっているストールを特定できます。これらのストールを解消すると、GPU が複数の命令を同時に実行できるようになり、スループットが向上し、可能な限り最速のフレーム レートが保証されます。

細かく調整されたソフトウェアの構築と配布は、さまざまなレベルで行われる可能性があります。開発者デスクのミクロレベルでは、開発者は Pro Nsight 分析ツールを使用してデバイス上で分析するか、リモート ホストを使用してターゲットを分析します。利用可能な Gui および cli インターフェイスを使用すると、開発者はプロファイル データを収集し、Gui 上で視覚化してアプリケーションを分析および微調整することができます。さらに一歩進んで、アナライザーによって生成された統計出力を使用して回帰分析を実行し、テスト アプリケーションを実行できます。CICD、つまり継続的統合および継続的展開システムを利用している大規模なシステムおよび組織では、プロファイラーの出力を使用してパフォーマンスを監視し、KPI 目標に対してアプリケーションのベンチマークを作成できます。

次に、畳み込みニューラル ネットワーク (CNN) 用のツールである Nsight DL デザイナーについて話しましょう。これには、リアルタイム推論 CNN の作成に役立つ IDE、非常に直観的なモデル表現を提供する GUI ベースのエディターが含まれています。また、GPU メトリクスを利用して、高すぎる可能性のあるレイヤーを特定するプロファイラーも含まれており、レイヤーの順序変更などの最適化を促進して操作を高速化し、場合によっては品質と速度の間のトレードオフを実現することもできます。検出される特徴の数を減らそうとするようなものです。これまで説明した、または今日説明した他のツールと同様に、デザイナー内部にも Jetson 上で直接実行する機能があり、Pytorch を使用して展開用のモデルをエクスポートできます。

Nvidia SDK Manager は、開発者向けの開発環境セットアップを簡素化および自動化します。SDK、ライブラリ、ドライバーの組み合わせを調整します。そして、互換性の依存関係を確保します。これは、Jetson プラットフォーム上のすべての Nvidia ハードウェア依存関係とソフトウェアをターゲットの Jetson デバイスにフラッシュします。また、最新の Nvidia SDK ツールとソフトウェア リリースの通知で最新の状態を維持できるため、常に最新かつ最高のものを実行して作業できます。

おすすめ

転載: blog.csdn.net/lovely_yoshino/article/details/131290535