NVIDIA Triton Inference Server を使用したエッジでの AI モデルの展開の簡素化

Chris To
NVIDIA Japan
Published in
9 min readSep 30, 2021

AI の機械学習 (ML) やディープラーニング (DL) は、ロボット、小売、ヘルスケア、産業などの様々な分野で、多様なコンピューティングの問題を解決するための有効なツールになりつつあります。低レイテンシー、リアルタイム応答性、プライバシーへのニーズにより、AI アプリケーションをエッジで実行することが求められています。

しかし、エッジのアプリケーションやサービスに AI モデルを展開することは、インフラストラクチャーやオペレーションチームにとって困難な場合があります。多様なフレームワーク、エンドツーエンドのレイテンシー要件、標準化された実装の欠如といった要因が、AI のデプロイを難しくしています。この記事では、これらの課題を克服し、AI モデルをエッジの実運用環境に展開する方法を探ります。

ここでは、推論用モデルを導入する際の最も一般的な課題を紹介します。

  • 複数のモデルフレームワーク: データサイエンティストや研究者は、モデルを構築するために、TensorFlow、PyTorch、TensorRT、ONNX Runtime、または単なる Python など、さまざまな AI フレームワークを使用しています。これらのフレームワークはそれぞれ、モデルを本番で実行するための実行バックエンドを必要とします。複数のフレームワークのバックエンドを同時に管理することは、コストがかかり、スケーラビリティやメンテナンスの問題につながります。
  • さまざまな推論クエリタイプ: エッジで推論を行うには、複数の同時クエリ、リアルタイムのオンライン予測などの異なるタイプのクエリ、ストリーミングデータ、複数モデルの複雑なパイプラインなどを処理する必要があります。これらはそれぞれ推論のための特別な処理を必要とします。
  • 絶えず進化するモデル: 刻々と変化するこの世界では、新しいデータや新しいアルゴリズムに基づいて、AI モデルが継続的に再学習/更新されます。運用中のモデルは、デバイスを再起動することなく継続的に更新されなければなりません。典型的な AI アプリケーションでは、多くの異なるモデルを使用します。現場でモデルを更新するためには、問題の規模が大きくなります。

NVIDIA Triton Inference Server は、これらの複雑さに対処することで推論の提供を簡素化する、オープンソースの推論提供ソフトウェアです。NVIDIA Triton は、マルチフレームワークモデルでの推論の実行や、データセンター、クラウド、組み込みデバイス、仮想化環境などのさまざまな展開環境をサポートできる、標準化された単一の推論プラットフォームを提供します。高度なバッチ処理とスケジューリングアルゴリズムにより、さまざまなタイプの推論クエリをサポートし、モデルのライブアップデートにも対応します。また、NVIDIA Triton は、モデルの同時実行や動的バッチ処理によってハードウェアを最大限に活用し、推論のパフォーマンスを向上させるように設計されています。

2021 年 8 月にリリースされた NVIDIA JetPack 4.6 を使用して Triton Inference Server を NVIDIA Jetson に導入しました。NVIDIA Triton により、AI の展開をクラウド、データセンター、エッジで標準化できるようになりました。

主な機能

ここでは、Jetson でのモデル展開を簡素化するための NVIDIA Triton の主な機能をご紹介します。

図 1. NVIDIA Jetson 上の Triton Inference Server アーキテクチャ

組み込みアプリケーションの統合

クライアントアプリケーションと Triton Inference Server の間の通信では、C API の直接統合がサポートされていますが、gRPC や HTTP/REST API もサポートされています。クライアントアプリケーションと推論サーバの両方が同じデバイス上で動作する Jetson では、クライアントアプリケーションは、通信のオーバーヘッドをゼロにして、Triton 推論サーバの API を直接呼び出すことができます。NVIDIA Triton は、全機能をアプリケーションに直接組み込むことができる C API を備えた共有ライブラリとして提供されています。これは、Jetson ベースの組み込みアプリケーションに最も適しています。

複数のフレームワークのサポート

NVIDIA Triton は、TensorFlow 1.x/2.x、ONNX ランタイム、TensorRT、さらにはカスタムバックエンドなどの一般的なフレームワークバックエンドをネイティブに統合しています。これにより、開発者は変換プロセスを経ることなく、Jetson で直接モデルを実行できます。また、NVIDIA Triton は、カスタムバックエンドの追加にも柔軟に対応しています。開発者はさまざまなフレームワークバックエンドを自由に選択でき、インフラチームは 1 つの推論エンジン (NVIDIA Triton) で展開を効率化することができます。

DLA サポート

Jetson 上の Triton Inference Server は、GPU と DLA の両方でモデルを実行できます。DLA は、Jetson Xavier NX および Jetson AGX Xavier で利用可能なディープラーニングアクセラレータです。

こちらのリンクの “Deep Learning Accelerator” に詳細があります。

モデルの同時実行

Triton Inference Server は、Jetson 上で複数のモデルを同時に実行することで、パフォーマンスを最大化し、エンドツーエンドのレイテンシーを削減します。これらのモデルは、すべて同じモデルにすることも、異なるフレームワークの異なるモデルにすることもできます。同時実行可能なモデル数の制限は、GPU メモリサイズのみです。

こちらのリンクの “モデルの並列実行” に図付きの説明があります。

動的バッチ処理 (Dynamic Batching)

バッチ処理は、推論のスループットを向上させる手法です。推論リクエストをバッチ処理するには、クライアントとサーバーのバッチ処理の2つの方法があります。NVIDIA Triton は、サーバーバッチ処理を実装しており、個々の推論要求をまとめて推論のスループットを向上させます。これは、ユーザーが設定可能な遅延しきい値までバッチを構築し、動的に動作します。しきい値が満たされると、NVIDIA Triton は現在のバッチを実行するようにスケジューリングします。スケジューリングとバッチ処理の決定は、推論を要求するクライアントに対して透過的であり、モデルごとに設定されます。動的バッチ処理により、NVIDIA Triton は、厳格な遅延要件を満たしながら、スループットを最大化します。

動的バッチ処理の例の 1 つは、アプリケーションで検出モデルと分類モデルの両方を実行する場合です。分類モデルへの入力は、検出モデルから検出されたオブジェクトです。このシナリオでは、分類する検出がいくつあってもよいため、動的バッチ処理により、検出されたオブジェクトのバッチを動的に作成し、分類をバッチリクエストとして実行できるようになり、全体的なレイテンシが短縮され、パフォーマンスが向上します。

こちらのリンクの “Dynamic Batching” に図付きの説明があります。

モデルアンサンブル (Model Ensemble)

モデルアンサンブル機能は、さまざまなモデルのパイプラインを作成し、さまざまなワークロードを処理するための前処理または後処理操作を作成するために使用されます。アンサンブル学習とは異なるので注意してください。NVIDIA Triton アンサンブルを使用すると、ユーザーは複数のモデルと前処理または後処理操作を、入力と出力が接続された単一のパイプラインにつなぎ合わせることができます。NVIDIA Triton は、クライアントアプリケーションからアンサンブルへの単一の推論要求だけで、パイプライン全体の実行を簡単に管理できます。例として、車両を分類しようとするアプリケーションは、NVIDIA Triton モデルアンサンブルを使用して車両検出モデルを実行し、検出された車両で車両分類モデルを実行できます。

カスタムバックエンド

人気のある AI バックエンドに加えて、NVIDIA Triton はカスタム C++ バックエンドの実行もサポートしています。これらは、前処理や後処理、さらには通常のモデルなどの特別なロジックを作成するのに役立ちます。

動的モデルの読み込み

NVIDIA Triton には、モデルを動的にロード/アンロードするために使用できるモデルコントロール API があります。これにより、アプリケーションで必要なときにデバイスがモデルを使用できるようになります。また、モデルが新しいデータで再学習された場合、アプリケーションの再起動やサービスを中断することなく、NVIDIA Triton 上にシームレスに再配置することができ、モデルのライブアップデートが可能になります。

結論

Triton Inference Server は、Jetson 用の共有ライブラリとしてリリースされています。NVIDIA Triton のリリースは毎月行われ、新機能の追加や最新のフレームワーク・バックエンドのサポートを行います。詳細については、Triton Inference Server Support for Jetson and JetPack を参照してください。

NVIDIA Triton は、すべてのデータセンター、クラウド、および組み込みデバイスで、標準化されたスケーラブルな実運用環境での AI を支援します。複数のフレームワークをサポートし、GPU や DLA などの複数のコンピューティングエンジン上でモデルを実行しさまざまなタイプの推論クエリを処理します。NVIDIA JetPack との統合により、NVIDIA Triton を組み込みアプリケーションに使用できます。

なお、Triton の詳細については、NVIDIA Japan のソリューションアーキテクトが以前に書いたブログ記事もご参照してください。

--

--

Chris To
NVIDIA Japan

Manager, Solution Architecture & Engineering | NVIDIA