ONNX Runtime と NVIDIA TensorRT の統合: プレビューを開始
執筆者: Manash Goswami (Principal Program Manager (AI Frameworks))
このポストは、2019 年 3 月 18 日に投稿された ONNX Runtime integration with NVIDIA TensorRT in preview の翻訳です。
本日マイクロソフトは、ONNX Runtime (英語) で NVIDIA TensorRT 実行プロバイダーのプレビューをオープン ソースとして公開しました。このリリースでは、開発者が業界最先端の GPU アクセラレーションを好きなフレームワークで使用できます。これにより、オープンで相互運用可能な AI の実現に向けてさらに一歩近づきました。開発者の皆様は ONNX Runtime で TensorRT (英語) を活用することで ONNX モデルの推論を高速化し、PyTorch や TensorFlow を始めとする主要なフレームワークからエクスポートまたは変換できます。
マイクロソフトと NVIDIA は、TensorRT 実行プロバイダーを ONNX Runtime と統合するために緊密に連携を取り、Model Zoo (英語) のすべての ONNX モデルをサポートしました。ONNX Runtime で TensorRT 実行プロバイダーを使用すると、同じハードウェアで汎用 GPU アクセラレーションを使用するよりも推論で高いパフォーマンスを得られます。Bing マルチメディア サービスの内部ワークロードで TensorRT 実行プロバイダーを使用した際には、パフォーマンスが最大 2 倍向上しました。
しくみ
ONNX Runtime と TensorRT 実行プロバイダーを組み合わせると、グラフが解析され、対応するハードウェアで TensorRT スタックを実行するためのノードが割り当てられることによって、ディープ ラーニング モデルの推論が高速化されます。TensorRT 実行プロバイダーは、そのプラットフォームにプレインストールされている TensorRT ライブラリと連携して、ONNX サブグラフの処理を NVIDIA ハードウェアで実行します。これにより、開発者はさまざまなハードウェアで ONNX モデルを実行したり、ハードウェア構成を問わない柔軟なアプリを構築したりできるようになります。このアーキテクチャは、ディープ ニューラル ネットワークの実行の最適化に必須となるハードウェア独自のライブラリを抽象化します。
TensorRT 実行プロバイダーの使用方法
ONNX Runtime と TensorRT 実行プロバイダーの組み合わせでは、Opset バージョン 9 を使用する ONNX Spec v1.2 またはそれ以降がサポートされます。TensorRT に最適化されたモデルは、Azure 上で NVIDIA GPU を使用する N シリーズ VM のすべてにデプロイ可能です。
TensorRT を使用するには、まず ONNX Runtime を TensorRT 実行プロバイダーでビルド (英語) します (build.sh ツールで --use_tensorrt --tensorrt_home <ローカル マシンの TensorRT ライブラリの場所のパス``>
というフラグを使用)。次に、ONNX Runtime API で推論セッションを初期化すると、TensorRT を使用できるようになります。ONNX Runtime によって、パフォーマンスが最大になるように、TensorRT で実行するサブグラフの優先度が自動で決定されます。
InferenceSession session_object{so};
session_object.RegisterExecutionProvider(std::make_unique<::onnxruntime::TensorrtExecutionProvider>());
status = session_object.Load(model_file_name);
詳細なガイドは GitHub (英語) で公開しています。また、リポジトリ内の onnx_test_runner ユーティリティでは標準的なテストのコレクションを使用できます。TensorRT 実行プロバイダーでの ONNX Runtime のビルドの検証にご利用ください。
ONNX と ONNX Runtime について
ONNX (英語) は、マイクロソフトが Facebook および AWS と共同開発したディープ ラーニングと従来型機械学習モデル向けのオープン フォーマットです。ONNX ではモデルを共通フォーマットで表し、ONNX Runtime を使用してさまざまなハードウェア プラットフォームで実行することができます。このため、開発者はタスクに適したフレームワークを自由に選ぶことが可能で、お好みのハードウェア上に存在するプラットフォームでモデルを効率的に実行できます。
ONNX Runtime (英語) は、ONNX-ML プロファイルを含む ONNX 1.2 またはそれ以降を完全にサポートする推論エンジンとして一般公開された初めての製品となります。ONNX Runtime は軽量でモジュール式になっており、TensorRT などのハードウェア アクセラレータを「実行プロバイダー」として接続できる拡張可能なアーキテクチャ (英語) を備えています。この実行プロバイダーにより、低レイテンシで高効率のニューラル ネットワーク コンピューティングが実現されます。現在、ONNX Runtime は Bing や Office などの数十億人のユーザーにサービスを提供する主要なシナリオで利用されています。
オープンで相互運用可能な AI を実現するための次のステップ
この ONNX Runtime 用 TensorRT 実行プロバイダーのプレビューは、AI のオープンで相互運用可能なエコシステムの構築を目指すマイクロソフトにとって大きな一歩です。運用モデルのレイテンシ要件が厳しくなる中、このリリースが AI のイノベーションの後押しになることを願っています。今後も ONNX Runtime の改良を継続していきますので、ぜひフィードバックやご協力をお願いいたします。
ONNX を使用してクラウドやエッジでの推論を高速化することについては、NVIDIA GTC の ONNX のセッション (英語) でより詳しくご紹介します。ぜひご参加ください。ONNX Runtime に関するご意見やご不明な点は、GitHub の Issue でご報告ください (英語)。また、最新情報については Twitter アカウントをフォローしてください。