インテル® ディストリビューションの OpenVINO™ ツールキットによる自動マルチデバイス推論


この記事は、インテル® IT Peer Network に公開されている「Automatic Multi-Device Inference with Intel® Distribution of OpenVINO™ toolkit」の日本語参考訳です。


畳み込みニューラル・ネットワークの台頭とともに、専用の推論アクセラレーター (英語) が登場し始めています。多くのエッジやクラウドの推論ワークロードでは、すでに複数のアクセラレーターが採用されています。従来からあるコンシューマー・アプリケーションでも、CPU と GPU の組み合わせは当たり前となっており (グラフィックス・プロセッサーを内蔵したインテル・ベースのプラットフォームなど)、両方のデバイスを自動的に利用することはますます魅力的になっています。

しかし、適切な実装なしには、より多くのアクセラレーターを統合することは容易でなく、コード変更やアプリケーション・ロジックの見直しが必要になります。幸いなことに、インテル® ディストリビューションの OpenVINO™ ツールキットは、さまざまなインテル® アーキテクチャーにわたって統一されたソリューションを提供し、新たにサポートされた自動マルチデバイス推論により、スケーラブルなアクセラレーター統合を可能にします。

以下は、自動マルチデバイス推論サポートによる主なパフォーマンスの利点です。

  • シングルデバイスでの実行と比較して、マルチデバイスでのスループットが向上
  • 推論の負荷を複数のデバイスに分散できるため、パフォーマンスの一貫性が向上。1 つのデバイスが推論以外のタスク (例えば、デコードなど) でビジーになった場合、ほかのデバイスは自動的に負荷を増やします。
  • デバイスごとの使用法をハードコードしなくても、さまざまなエンドユーザー・システムをサポート。新しい InferenceEngine API では、すべてのデバイスを列挙して、それを基にマルチデバイスを作成 (英語) することができます。

マルチデバイスの設定

マルチデバイス・サポートは、インテル® ディストリビューションの OpenVINO™ ツールキットの InferenceEngine (英語) 機能の一部です。セットアップには、大きく分けて 2 つのステップがあります。

  1. 通常どおり、個々のデバイスを設定します (例えば、CPU 用の推論スレッドの数など)。新しい InferenceEngine の「Core」 API (英語) では、デバイスのエイリアスを作成できます。
  2. 設定済みデバイスの (優先順位付けされた) リストを基にマルチデバイスを定義します。アプリケーションで必要な変更はこれだけです。デバイスの優先順位は、実行時に推論を停止することなく変更できます。

最後に、アプリケーションは、ほかのデバイスと同様に、マルチデバイスと通信します。例えば、自動的にネットワークをロードして、特定のマルチデバイス・インスタンスを飽和させるために必要な要求を作成します。詳細とサンプルコードは、ドキュメント (英語) を参照してください。

マルチデバイス実行

内部のマルチデバイス・ロジックは、自動的に個々の推論要求を利用可能な計算デバイスに割り当てて、要求を並列に実行します。

アプリケーションの実行ロジックは変更されません。各デバイスに明示的にネットワークをロードしたり、デバイスごとに個別のキューを維持したり、キュー間の推論要求のバランスを調整する必要はありません。アプリケーションは、マルチデバイスを実際のマシンを扱うデバイスの 1 つと認識します。

マルチデバイスでパフォーマンスを最大限に引き出すためには、次の 2 つが重要です。

  • マルチデバイス (ひいてはその下のデバイス) に十分なデータを供給する。推論要求 (ビデオフレームや画像など) は独立したデータであるため、マルチデバイスは、スケジュール・オーバーヘッドを最小限に抑えるため、(最も外側である) 「要求」レベルでロードバランスを行います。
  • 以前のブロッキング待機呼び出しとは対照的に、完了コールバックに推論要求を使用する。マルチデバイス実行では、(デバイスにより処理速度が大きく異なる可能性があり) 要求の完了順が必ずしも送信順と一致しないため、これはパフォーマンスにとって重要です。

例えば、1 つの CPU または GPU で 4 つのカメラ (と 4 つの推論要求) を処理する場合について考えてみます。CPU と GPU の両方を使用すれば、処理するカメラ (と要求) を増やすことでマルチデバイスをビジーに保つことができ、減らすことでレイテンシーを向上できます。

マルチデバイスのパフォーマンス

以下は、各種推論デバイスでのマルチデバイスのパフォーマンスです。

図 1. Multi-device execution on the CPU and integrated GPU of the Intel Core i7-8700K processor. ‘1’ represents the “ideal” performance (if the numbers from individual “CPU-only” and “GPU-only” devices were combined perfectly). Configuration: Intel® Core™ i7-8700k processor @ 3.20GHz with Gen9 Graphics, 16 GB RAM, OS: Ubuntu 16.04.3 LTS 64 bit, Kernel: 4.15.0-29-generic. Intel® Distribution of OpenVINO™ toolkit 2019 R2. See notices and disclaimers for details.

実際のマルチデバイス・パフォーマンスは、「理想的な」パフォーマンスよりも低く、トポロジーにより異なります。このケースでは、CPU と GPU は同じダイ上にあり、実際にはメモリー帯域幅を奪い合います。

また、どちらのデバイスのパフォーマンスも、動的な周波数スケーリングの影響を受けます。その結果、消費電力と発熱量を管理するため、一方または両方のデバイスがターボ周波数を利用できなくなる可能性があります。どちらの要因も全体的なパフォーマンスを低下させますが、マルチデバイスの効率は 79% ~ 93% です。

最後に、特定のモデルで CPU と GPU のどちらが速いかにかかわらず、マルチデバイスはシングルデバイスよりも常に高速です。

図 2. Multi-device execution on the integrated GPU and High-Density Deep Learning (HDDL, see Intel® Vision Accelerator Design with Intel® Vision Accelerator Intel® Movidius™ VPUs product details). ‘1’ represents the “ideal” performance (if the numbers from individual devices were combined perfectly). Configurations: Intel® Core™ i7-8700k processor @ 3.20GHz with Gen9 Graphics, 16 GB RAM, Intel® Vision Accelerator with 8 Intel® Movidius™ VPUs. OS: Ubuntu 16.04.3 LTS 64 bit, Kernel: 4.15.0-29-generic. Intel® Distribution of OpenVINO™ toolkit 2019 R2. See notices and disclaimers for details.

iGPU とインテル® ビジョン・アクセラレーター・デザイン (インテル® Movidius™ VPU 搭載) (英語) は、マルチデバイス実行で、すべてのモデル例において少なくとも 99% のマルチデバイスのパフォーマンス効率を達成しました。次に、この結果を再現する方法を説明します。

インテル® ディストリビューションの OpenVINO™ ツールキットのサンプルでマルチデバイスを使用してパフォーマンスのベンチマークを測定する

"-d" ("device" の略) コマンドライン・オプションをサポートするインテル® ディストリビューションの OpenVINO™ ツールキットのすべてのサンプルで、マルチデバイスを利用できます。Benchmark Application (英語) は、マルチデバイスの最適な使用法に関する最も優れたリファレンスです。以下に、HDDL+GPU パフォーマンスを評価するコマンドラインの例を示します。

$ ./benchmark_app –d MULTI:HDDL,GPU –m -i

前のセクションのパフォーマンス・データはこの方法で収集されました。最新バージョンのインテル® ディストリビューションの OpenVINO™ ツールキットでは、すべてのデバイスが FP16 IR をサポートしているため、FP16 IR の入力モデルをマルチデバイスで利用できます。

まとめ

複数のアクセラレーターの使用は、推論スループットの向上やその他のパフォーマンスの利点をもたらしますが、アプリケーションの実行に必要な多くの変数を調整しなければならず、多様で複雑な設計になります。

インテル® ディストリビューションの OpenVINO™ ツールキットは、広範なモデルセットとアプリケーション分野で強力な推論パフォーマンスを実現します。インテル® ディストリビューションの OpenVINO™ ツールキットのマルチデバイス推論機能は、アプリケーションで複数のアクセラレーターを活用する透過的な方法を提供します。これにより、既存のアプリケーションを明示的なマルチデバイス・ロジック向けに変更せずに、パフォーマンスを大幅に向上できます。

関連情報

Notices and Disclaimers

Test Configuration