1 行のコードを追加するだけでインテルのハードウェア上で推論を高速化

OpenVINO™ ツールキットマシンラーニング

この記事は、Intel AI Blog で公開されている「Faster Inferencing on Intel® Hardware with Just One Extra Line of Code」の日本語参考訳です。


OpenVINO™ Execution Provider for ONNX* Runtime の概要

たった 1 行のコードを追加するだけで、ディープラーニング・モデルのパフォーマンスが約 50% も向上することをご存知ですか? ONNX* Tiny YOLOv2 の物体検出モデルをインテル® Core™ i7 プロセッサーで使用したところ、30 FPS から 47 FPS へジャンプしました1。これは 50% 近い向上であり、ディープラーニング・モデルのパフォーマンスに大きな違いをもたらします。

たった 1 行のコードで、どうしたらこのようなパフォーマンスが得られるのか不思議に思われるでしょう。答えはとても簡単です。OpenVINO™ ツールキットを使用すれば良いのです。OpenVINO™ ツールキット (英語) は、人間の視覚のエミュレーション、自動音声認識、自然言語処理、推薦システムなど、さまざまな課題を解決するアプリケーションやソリューションを迅速に開発するための包括的なツールキットです。OpenVINO™ ツールキットは、インテルのハードウェア向けに最適化された最先端の最適化技術を用いて、ディープラーニング・モデルのパフォーマンスを向上します。

OpenVINO™ ツールキットは、ONNX* Runtime (RT) のような一般的な AI フレームワークとどのように結び付くのでしょうか? 開発者は、TensorFlow*、PyTorch*、Keras などの AI フレームワークからエクスポートまたは変換できる ONNX* モデルの推論を加速するため、ONNX* Runtime を通じて OpenVINO™ ツールキットを活用できます。インテルとマイクロソフトが共同で開発した OpenVINO™ Execution Provider for ONNX* Runtime は、OpenVINO™ ツールキットをバックエンドとして使用しながら、ONNX* モデルが ONNX* Runtime API を使用して推論を実行できるようにします。OpenVINO™ Execution Provider を利用してたった 1 行のコードを追加するだけで、ONNX* Runtime はインテルの CPU、GPU、VPU、FPGA 上での汎用アクセラレーションと比較して、同じハードウェア上でより優れた推論パフォーマンスを実現します。そして、さまざまなワークロードでこのパフォーマンスの大幅な向上を確認しています。


図 1: ONNX* RT に対する OpenVINO™ Execution Provider のパフォーマンス2

まだ納得できない方は、OpenVINO™ Execution Provider for ONNX* RT を使用して作成したサンプルをご覧ください。


図 2: OpenVINO™ Execution Provider for ONNX* Runtime のアーキテクチャー図

サンプル

OpenVINO™ Execution Provider for ONNX* Runtime の可能性を紹介するため、たった 1 行のコードを追加するだけでパフォーマンスを向上できることを示すいくつかのサンプルを作成しました。

Python* サンプル

物体検出サンプルでは、ONNX* Model Zoo (英語) の Tiny YOLOv2 ディープラーニング ONNX* モデルを使用します。

このサンプルでは、フレームごとの動画を ONNX* Runtime に提示し、OpenVINO™ Execution Provider を使用して、さまざまなインテルのハードウェア・デバイス上で推論を実行し、鳥、バス、車、人など最大 20 種類のオブジェクトを検出するオブジェクト検出を行います。

tinyYOLOv2 を使用したオブジェクト検出の Python* サンプル
(https://github.com/microsoft/onnxruntime/blob/gh-pages/docs/tutorials/tutorials/OpenVINO_EP_samples/tiny_yolo_v2_object_detection_python.md)


Python* サンプルで OpenVINO™ を実行プロバイダーとして設定する

デモ 1: Python* サンプルで OpenVINO™ Execution Provider for ONNX* RT を使用する (英語)

C# サンプル

C# サンプルでは、ONNX* Model Zoo で公開されている Yolov3 ディープラーニング ONNX* モデルを使用します。

このサンプルでは、ONNX* Runtime (RT) に画像を提示し、OpenVINO™ Execution Provider for ONNX* RT を使用して、入力画像に対してオブジェクト検出を行うことで、インテル® Movidius™ ニューラル・コンピュート・スティック 2 (インテル® Movidius™ Myriad™ X VPU) 上で推論を実行します。

YOLOv3 を使用したオブジェクト検出の C# サンプル
(https://github.com/microsoft/onnxruntime/blob/gh-pages/docs/tutorials/tutorials/OpenVINO_EP_samples/yolov3_object_detection_csharp.md)

デモ 2: C# サンプルで OpenVINO™ Execution Provider for ONNX* RT を使用する (英語)

C++ サンプル

C++ サンプルでは、ONNX Model Zoo で公開されている SqueezeNet ディープラーニング ONNX* モデルを使用します。

このサンプルでは、ONNX* Runtime に画像を提示し、OpenVINO™ Execution Provider を使用して、さまざまなインテルのハードウェア・デバイス上で推論を実行します。このサンプルでは、画像処理に OpenCV* を使用しています。サンプル画像が推論された後、ターミナルは予測されたラベルクラスを信頼度の高い順に出力します。

この実装は、ほとんどの ImageNet 分類ニューラル・ネットワークや、ほかのソースの画像にもわずかな修正で対応できるはずです。さらに、デフォルトの CPU Execution Provider と OpenVINO™ Execution Provider で測定した推論レイテンシーを比較します。

Squeezenet を使用した画像分類の C++ サンプル
(https://github.com/microsoft/onnxruntime/blob/gh-pages/docs/tutorials/tutorials/OpenVINO_EP_samples/squeezenet_classification_cpp.md)


C++ サンプルで OpenVINO™ を実行プロバイダーとして設定する

デモ 2: C++ サンプルで OpenVINO™ Execution Provider for ONNX* RT を使用する (英語)

  1. プロセッサー:
    インテル® Core™ i7-7700T プロセッサー @ 2.90GHz、
    ソケットごとに 4 コア、コアごとに 2 スレッド

    グラフィックス:
    インテル® HD グラフィックス 630、クロック周波数 33MHz

    DDR4 メモリー:
    8192MB

    BIOS バージョン:
    V2RMAR17、ベンダー: American Megatrends Inc.

    OS:
    Ubuntu* 18.04.5 LTS

    システム情報:
    メーカー: iEi、メーカー No: TANK-870AI-i7/8G/2A-R11、
    製品名: SER0
    バージョン: V1.0

    マイクロコード:
    0xde

    フレームワーク構成:
    ONNX* Runtime 1.7.0、OpenVINO™ 2021.3 Binary Release、
    ビルドタイプ: Release Mode

    アプリケーション構成:
    ONNX* Runtime Python* API、EP: OpenVINO™、デフォルト CPU、
    入力: 動画ファイル

    アプリケーション・メトリック:
    1 秒あたりのフレーム数 (FPS): (1.0 / 1 つの ONNX* Runtime セッションの実行にかかった時間)

    テスト実施日:
    2021 年 5 月 14 日

    テスト実施者:
    Intel Corporation

  2. プロセッサー:
    インテル® Core™ i7-7700T プロセッサー @ 2.90GHz、
    ソケットごとに 4 コア、コアごとに 2 スレッド

    グラフィックス:
    インテル® HD グラフィックス 630、クロック周波数 33MHz

    DDR4 メモリー:
    8192MB

    BIOS バージョン:
    V2RMAR17、ベンダー: American Megatrends Inc.

    OS:
    Ubuntu* 18.04.5 LTS

    システム情報:
    メーカー: iEi、メーカーNo: TANK-870AI-i7/8G/2A-R11、
    製品名: SER0、
    バージョン: V1.0

    マイクロコード:
    0xde

    フレームワーク構成:
    ONNX* Runtime 1.7.0、OpenVINO™ 2021.3 Binary Release、
    ビルドタイプ: Release Mode

    コンパイラー・バージョン:
    gcc バージョン: 7.5.0

    アプリケーション構成:
    onnxruntime_perf_test、推論要求数: 1000、EP: OpenVINO™

    セッション数: 1

    テスト実施日:
    2021 年 5 月 14 日

    テスト実施者:
    Intel

法務上の注意書き

性能は、使用状況、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。

性能の測定結果はシステム構成の日付時点のテストに基づいています。また、現在公開中のすべてのセキュリティー・アップデートが適用されているとは限りません。構成の詳細は、補足資料を参照してください。絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

タイトルとURLをコピーしました