Skip to main content

NVIDIA® Jetson デバイスで Deci を始める

pir

Deci プラットフォームは、本番環境でモデルを簡単に管理、最適化、デプロイ、提供することを可能にします。TensorFlow、PyTorch、Keras、ONNX などの人気のある DL フレームワークを引き続き使用できます。必要なのは Deci の Web ベースプラットフォームまたは Deci Python クライアントだけで、コードから実行できます。

Deci が提供するもの:

  • パフォーマンス加速 – Deci の自動ニューラルアーキテクチャ構築(AutoNAC)技術を使用して、精度を損なうことなく、任意のハードウェア上でモデル推論パフォーマンスを 2 倍から 10 倍加速します。

  • 任意のハードウェアでのスケーリング – プライベートクラウドやパブリッククラウド、独自のサーバー、または任意のコンピューター、エッジ、モバイルデバイスに関係なく、クラウド計算コストと BOM を最大 80% 削減し、大規模な推論を可能にします。

  • 推論ベンチマーク – 任意のターゲットハードウェア環境とバッチサイズでモデルをベンチマークし、モデルの最適なスループット、レイテンシ、メモリ使用量、クラウドコストを見つけます。

  • モデルパッケージング – 本番環境への迅速で簡単なデプロイ – Deci Lab から訓練されたモデルを、すべての環境ライブラリ依存関係を単一のカプセル化されたコンテナに含めて、任意の本番環境にシームレスにデプロイします。

  • モデル提供 – Deci の独自の深層学習ランタイム推論エンジンは、独自のマシン(任意のハードウェア – オンプレミス / エッジ / クラウド)にデプロイできます。Deci は、Deci 最適化モデルを独立した効率的なランタイムサーバーとしてデプロイするための以下のオプションを提供します:

    • Deci のランタイム推論コンテナ(RTiC)、これはコンテナ化された機械学習ランタイムエンジンです。
    • Deci の INFERY(推論という言葉から)、Python パッケージからモデルを実行できるようにします。

サポートされているハードウェア

Deci は以下の Jetson 関連ハードウェアでサポートされています:

  • Seeed のキット:

    • Jetson Nano で構築された reComputer J1010
    • Jetson Nano で構築された reComputer J1020
    • Jetson Xavier NX 8GB で構築された reComputer J2011
    • Jetson Xavier NX 16GB で構築された reComputer J2012
  • Seeed のキャリアボード:

    • Jetson Mate
    • Jetson SUB Mini PC
    • Jetson Xavier AGX H01 Kit
    • A203 Carrier Board
    • A203 (Version 2) Carrier Board
    • A205 Carrier Board
    • A206 Carrier Board
  • NVIDIA の公式開発キット:

    • NVIDIA® Jetson Nano Developer Kit
    • NVIDIA® Jetson Xavier NX Developer Kit
    • NVIDIA® Jetson AGX Xavier Developer Kit
    • NVIDIA® Jetson TX2 Developer Kit
    • NVIDIA® Jetson AGX Orin Developer Kit
  • NVIDIA の公式 SoM:

    • NVIDIA® Jetson Nano module
    • NVIDIA® Jetson Xavier NX module
    • NVIDIA® Jetson TX2 NX module
    • NVIDIA® Jetson TX2 module
    • NVIDIA® Jetson AGX Xavier module

上記のハードウェアのいずれかをお持ちの場合、お使いのハードウェアで deci を使用して作業を進めることができます。

ハードウェア前提条件

以下のハードウェアを準備してください:

  • 上記のJetsonデバイスのいずれかでJetPack 4.6が動作しているもの
  • モニター、キーボード、マウス(オプション)

Deciアカウントのサインアップ

  • ステップ 1. このページにアクセスしてDeciアカウントにサインアップします

  • ステップ 2. 必要な詳細情報を入力し、サインアップ処理を完了します

これでDeci Labプラットフォームが表示されます

pir

事前最適化モデルを含むDeci Labモデルズー

デフォルトでは、Deci LabにはResNet50 Baselineモデルが含まれており、これは既にインターフェースに読み込まれ、異なるハードウェア向けにいくつかの最適化が施されています。それだけではありません。DeciはDeci Model Zooで、異なるハードウェア向けの対応する最適化バージョンのモデルと共に、ベースモデルの膨大なコレクションを提供しています。Model ZooListをクリックして、利用可能なすべてのモデルを表示します。

pir

例として、検索バーでYOLOXを検索して、すべてのYOLOXモデルを表示します。

pir

ご覧のように、YOLOX_NanoYOLOX_Smallなどのベースモデルと、YOLOX_Nano Jetson Nano OptimizedYOLOX_Nano Jetson Xavier Optimizedなどの最適化モデルがあります

独自モデルの最適化

上記で説明したように、事前最適化モデルを手動で最適化する必要なく直接使用できます。ただし、独自のモデルを使用したい場合は、モデルをDeci Labにアップロードし、ターゲットハードウェアに応じて最適化できます

ステップ 1: Deci Labで**+ New Model**をクリックします

pir

ステップ 2: モデルに応じて適切なタスクを選択します。ここではObject Detectionを選択しました

pir

ステップ 3: モデルの名前を入力し、Nextをクリックします

pir

ステップ 4: モデルフレームワーク(この場合はONNX)を選択し、選択したフレームワークに応じてモデルをアップロードし、Nextをクリックします。ここではyolov6n.onnxモデルをアップロードしました。

pir

ステップ 5: Primary hardwareInference batch sizeQuantization levelを選択し、Nextをクリックします

pir

ステップ 6: パフォーマンス目標と制約を追加します。これは主にプレミアムバージョンに含まれる機能であるAutoNACを使用する場合に有用です。AutoNACは、モデルサイズを削減しながらモデル推論パフォーマンスを劇的に向上させることができます。AutoNACを使用しない場合は、Throughputの値を入力する必要があり、ここでは40に設定しました(ランダムな値でも構いません)。最後にstartをクリックして最適化プロセスを開始します。

pir

これで最適化プロセスが以下のように進行状況を表示し、数分後に完了します。

pir

モデル性能の比較

Deci Labプラットフォームを使用してベースモデルと最適化モデル間のモデル性能を比較するか、またはモデルをターゲットハードウェアにデプロイしてベンチマークを実行することができます。Deci Lab上ですべてを視覚化する方が簡単ですが、特定のハードウェアに対して性能メトリクスが正確であることを確認するために、モデルをデプロイしてターゲットデバイス上でベンチマークを実行することを推奨します。

Deci Labでの視覚化

ここではYOLOX_NanoベースモデルとYOLOX_Nano Jetson Xavier NX Optimizedモデルを使用して比較します。

ステップ1: Model Zooに移動し、YOLOX_NanoベースモデルとYOLOX_Nano Jetson Xavier NX Optimizedモデルの横にあるcloneをクリックします

pir

ステップ2: Deci Lab上で、MODEL_VERSIONSの下にあるYOLOX_Nanoモデルをクリックしてmodel insightsセクションに移動します。

ステップ3: Target HardwareとしてJetson Xavierを選択します

pir

これで、Jetson Xavier NXデバイスにデプロイされる場合のYOLOX_Nanoモデルのすべての性能メトリクスが表示されます。

ステップ4: Deci Labのホームページに戻り、MODEL_VERSIONSの下にあるYOLOX_Nano Jetson Xavier NX Optimizedモデルをクリックします

pir

これで、Jetson Xavier NXデバイスにデプロイされる場合のYOLOX_Nano Jetson Xavier NX Optimizedモデルのすべての性能メトリクスが表示されます。

性能比較

以下の表を使用して、Jetson Xavierターゲットハードウェアに対して以前に取得した結果を比較できます

YOLOX_NanoYOLOX_Nano Jetson Xavier NX Optimized
Accuracy25.825.8
Throughput62.8fps175.8fps
Latency15.9361ms5.6897ms
GPU memory footprint1.05MB1.01MB
Model size3.66MB9.74MB

ご覧のように、主な性能向上はスループットで、最適化モデルはベースモデルよりも約2.7倍高速です。

Jetsonデバイスでのデプロイとベンチマーク

上記の2つのモデルをJetson Xavier NXデバイスにデプロイし、ベンチマークを実行して正確な性能結果を取得することを確認します。

INFERYのインストール

  • ステップ1. Jetsonデバイスでターミナルウィンドウを開き、パッケージリストを更新します
sudo apt update 
  • Step 2. Install pip package manager
sudo apt install python3-pip
  • Step 3. Update pip to the latest version
python3 -m pip install -U pip
  • ステップ 4. Jetson用INFERYをインストールする
sudo python3 -m pip install https://deci-packages-public.s3.amazonaws.com/infery_jetson-3.2.2-cp36-cp36m-linux_aarch64.whl

モデルの読み込み

  • ステップ 1. Deci Lab で、モデル名にマウスを合わせ、ポップアップから Deploy をクリックします

pir

  • ステップ 2. Download model をクリックしてモデルを PC にダウンロードし、このモデルファイルを Jetson デバイスのホームディレクトリにコピーします

pir

  • ステップ 3. Jetson デバイスでターミナルウィンドウを開き、以下を実行します
lakshanthad@nano:~$ python3
Python 3.6.9 (default, Dec 8 2021, 21:08:43)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import infery, numpy as np
  • ステップ 4. Deci lab の Deploy Model ウィンドウの LOAD MODEL にある 2 番目のコマンドを Jetson デバイスのターミナルウィンドウにコピーします(ターゲットハードウェアに Jetson が選択されていることを確認してください)

pir

ex: model = infery.load(model_path='YOLOX_Nano.onnx', framework_type='onnx', inference_hardware='gpu')

注意: 事前にモデルをコピーした場所に応じて、model_path パラメータを必ず調整してください。モデルファイルをホームディレクトリにコピーした場合は、パスをそのまま保持できます。

モデルが正常に読み込まれた場合、以下の出力が表示されます

infery_manager -INFO- Loading model YOLOX_Nano.onnx to the GPU
infery_manager -INFO- Successfully loaded YOLOX_Nano.onnx to the GPU.

モデルのパフォーマンスを測定する

INFERYを使用してモデルのパフォーマンスを測定するには、アプリケーションからmodel.benchmarkコマンドを実行します

model.benchmark(batch_size=1)

以下はYOLOX_Nanoモデルの出力結果です

base_inferencer -INFO- Benchmarking the model in batch size 1 and dimensions [(3, 416, 416)]...
<ModelBenchmarks: {
"batch_size": 1,
"batch_inf_time": "13.63 ms",
"batch_inf_time_variance": "1.12 ms",
"memory": "3537.89 mb",
"pre_inference_memory_used": "3532.94 mb",
"post_inference_memory_used": "3537.89 mb",
"total_memory_size": "7765.41 mb",
"throughput": "73.36 fps",
"sample_inf_time": "13.63 ms",
"include_io": true,
"framework_type": "onnx",
"framework_version": "1.8.0",
"inference_hardware": "GPU",
"infery_version": "3.2.2",
"date": "18:23:57__07-06-2022",
"ctime": 1657112037,
"h_to_d_mean": null,
"d_to_h_mean": null,
"h_to_d_variance": null,
"d_to_h_variance": null
}>

where:

  • 'batch_size' – ベンチマークで使用されたバッチサイズを指定します。
  • 'batch_inf_time' – バッチ全体のレイテンシを指定します。
  • 'sample_inf_time' – バッチ内の単一サンプルのレイテンシを指定します。batch_inf_timeをbatch_sizeで割った値と同等です。
  • 'memory' – 推論中にモデルが使用するメモリフットプリントを指定します。
  • 'throughput' – 1秒間に処理される(フォワードパス)リクエスト数を指定します。
  • 'batch_inf_time_variance' – ベンチマーク中のバッチ推論時間の分散を指定します。分散が高い場合は、'repetitions'に渡す数値を増やしてベンチマークをより信頼性の高いものにすることをお勧めします。

YOLOX_Nano Jetson Xavier NX Optimized modelについても同じ手順を繰り返し、ベンチマークを実行すると、以下のような結果が表示されます:

base_inferencer -INFO- Benchmarking the model in batch size 1 and dimensions [(3, 416, 416)]...
<ModelBenchmarks: {
"batch_size": 1,
"batch_inf_time": "5.28 ms",
"batch_inf_time_variance": "0.05 ms",
"memory": "2555.62 mb",
"pre_inference_memory_used": "2559.38 mb",
"post_inference_memory_used": "2555.62 mb",
"total_memory_size": "7765.41 mb",
"throughput": "189.25 fps",
"sample_inf_time": "5.28 ms",
"include_io": true,
"framework_type": "trt",
"framework_version": "8.0.1.6",
"inference_hardware": "GPU",
"infery_version": "3.2.2",
"date": "18:30:05__07-06-2022",
"ctime": 1657112405,
"h_to_d_mean": "0.43 ms",
"d_to_h_mean": "0.20 ms",
"h_to_d_variance": "0.00 ms",
"d_to_h_variance": "0.00 ms"
}>

パフォーマンス比較

これらの結果について主にスループットを比較できます

YOLOX_NanoYOLOX_Nano Jetson Xavier NX Optimized
スループット73.36fps189.25fps

最適化されたモデルがベースモデルより約2.57倍高速であることがわかります。

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルをご用意しています。

Loading Comments...