OpenVINOによる深層学習モデルのパフォーマンス改善

機械学習モデルの社会実装が加速する現代において、その推論速度は、アプリケーションの応答性、ひいてはユーザー体験を左右する重要な要素となっています。リアルタイム性が求められるエッジAIの現場から、大量データを処理するクラウド環境まで、あらゆる場面で高速な推論が不可欠です。

そこで注目されるのが、Intelが開発したOpenVINO™ツールキットです。OpenVINO™は、ディープラーニングモデルの推論を効率化し、高速化するための包括的なソリューションを提供します。CPU、GPU、VPUなど、多様なハードウェアに対応し、最適化されたモデルを実行することで、優れたパフォーマンスを実現します。

本記事では、OpenVINO™の基本概要から、モデル最適化、異種ハードウェア対応、高レベルAPIといった主要機能を解説します。さらに、実際のコード例を交えながら、具体的な高速化の手法とその効果を検証します。

はじめに

機械学習モデルの社会実装が急速に進む現代において、その推論速度は、アプリケーションの応答性とユーザー体験を大きく左右する重要な要素となっています。リアルタイム性が求められるエッジAIの現場から、大量データを処理するクラウド環境まで、あらゆる場面で高速な推論が不可欠です。

例えば、自動運転システムでは、周囲の状況を瞬時に認識し、安全な判断を下すために、高速な物体検出と経路予測が求められます。スマートシティにおける監視カメラシステムでは、リアルタイムでの異常検知が、人々の安全を守るために不可欠です。また、ECサイトのレコメンデーションシステムでは、ユーザーの行動履歴に基づいて最適な商品を提示するために、高速な推論処理が重要となります。

このように、機械学習モデルの推論速度は、アプリケーションのパフォーマンスに直接影響を与えるだけでなく、新たなビジネスモデルやサービスの創出にも貢献します。

そこで注目されるのが、Intelが開発したOpenVINO™ツールキットです。OpenVINO™は、ディープラーニングモデルの推論を効率化し、高速化するための包括的なソリューションを提供します。CPU、GPU、VPUなど、多様なハードウェアに対応し、最適化されたモデルを実行することで、優れたパフォーマンスを実現します。

OpenVINO™を使用することで、開発者は、エッジデバイスからクラウドまで、様々な環境で機械学習モデルを効率的に展開できます。これにより、開発期間の短縮、コスト削減、そしてアプリケーションの応答性向上を実現し、ユーザーに最高の体験を提供することが可能になります。

図1. OpenVINOとは?https://docs.openvino.ai/2025/index.html より引用)

OpenVINOの概要

OpenVINOとは?:Intel製ハードウェアに最適化された推論エンジン

OpenVINO™(Open Visual Inference and Neural Network Optimization)は、Intelが開発した、ディープラーニングモデルの推論処理を高速化するためのソフトウェアツールキットです。もともとはコンピュータビジョンアプリケーション向けに開発されましたが、現在では、自然言語処理(NLP)、音声認識など、幅広い分野のディープラーニングモデルに対応しています。

OpenVINO™の最大の特徴は、Intel製のハードウェア、すなわちCPU、GPU、VPU(Vision Processing Unit)、FPGA(Field Programmable Gate Array)などのパフォーマンスを最大限に引き出すように最適化されている点です。これにより、開発者は、これらのハードウェア上で、学習済みのディープラーニングモデルを効率的に実行し、高速な推論処理を実現できます。

主要な機能:モデル最適化、異種ハードウェア対応、高レベルAPI

OpenVINO™は、ディープラーニングモデルの推論を効率化するための様々な機能を提供します。主な機能としては、以下の3つが挙げられます。

  • モデル最適化:学習済みのモデルをOpenVINO™の中間表現(IR: Intermediate Representation)に変換し、様々な最適化手法を適用することで、推論速度を向上させます。
  • 異種ハードウェア対応:CPU、GPU、VPU、FPGAなど、様々な種類のハードウェア上でモデルを実行できます。これにより、アプリケーションの要件や利用可能なリソースに応じて、最適なハードウェアを選択できます。
  • 高レベルAPI:C++、Pythonなどのプログラミング言語で利用可能なAPIを提供し、開発者が容易に推論処理をアプリケーションに組み込めるようにします。また、モデルのデプロイを容易にするためのツールやライブラリも提供します。

OpenVINOを使用するメリット:推論速度の向上、消費電力の削減、柔軟なデプロイ

OpenVINO™を使用することで、開発者は様々なメリットを享受できます。

  • 推論速度の向上:モデルの最適化とハードウェアに特化した実行により、推論速度を大幅に向上させることができます。これにより、リアルタイム性が求められるアプリケーションでも、高速な応答を実現できます。
  • 消費電力の削減:効率的な推論処理により、消費電力を削減できます。これは、特にエッジデバイスなど、電力供給が限られた環境で重要なメリットとなります。
  • 柔軟なデプロイ:様々な種類のハードウェアに対応しているため、アプリケーションの要件や利用可能なリソースに応じて、最適な環境にモデルをデプロイできます。これにより、開発の柔軟性が向上し、開発期間の短縮にもつながります。

OpenVINO™は、これらのメリットにより、開発者がより効率的に、より高性能な機械学習アプリケーションを開発し、展開することを可能にする強力なツールキットと言えます。

図2. OpenVINOの概要

モデル最適化

OpenVINO™におけるモデル最適化は、学習済みディープラーニングモデルを、様々なハードウェア上で効率的に実行するための重要なプロセスです。このプロセスでは、モデルの精度を可能な限り維持しながら、サイズを縮小し、推論速度を向上させるための様々な手法が用いられます。

モデルオプティマイザ:学習済みモデルをOpenVINOの中間表現(IR)に変換

OpenVINO™のモデル最適化プロセスの最初のステップは、モデルオプティマイザと呼ばれるツールを使用して、学習済みモデルをOpenVINO™の中間表現(IR: Intermediate Representation)に変換することです。

モデルオプティマイザは、TensorFlow、PyTorch、ONNXなど、様々なディープラーニングフレームワークで学習されたモデルをサポートしています。これらのフレームワークで学習されたモデルを、OpenVINO™が効率的に実行できる形式であるIRに変換することで、OpenVINO™の様々な最適化機能を適用できるようになります。

量子化:モデルの精度を維持しつつ、データ型を低精度化(例:FP32からINT8)

量子化は、モデルの重みや活性化関数のデータ型を、より低い精度に変換する手法です。例えば、一般的な32ビット浮動小数点数(FP32)を、8ビット整数(INT8)に変換することで、モデルサイズを縮小し、メモリ帯域幅の使用量を削減できます。これにより、推論速度が向上し、特にCPUのようなハードウェアでの実行効率が向上します。

ただし、量子化によってモデルの精度が低下する可能性があるため、OpenVINO™は、量子化後もモデルの精度を可能な限り維持するための様々な手法を提供しています。

レイヤー融合:複数のレイヤーを統合し、計算量を削減

ディープラーニングモデルには、複数のレイヤーが含まれています。レイヤー融合は、これらのレイヤーのうち、計算グラフ上で連続する複数のレイヤーを、一つのレイヤーに統合する手法です。これにより、レイヤー間のデータ転送のオーバーヘッドを削減し、計算量を削減できます。

例えば、畳み込み層、バッチ正規化層、活性化関数層は、一つの層に融合できる場合があります。レイヤー融合により、モデル全体の計算グラフが簡素化され、推論速度が向上します。

モデルの剪定:重要度の低いニューロンや接続を削除し、モデルを軽量化

モデルの剪定は、モデルの精度に対する影響が小さいニューロンや接続を削除する手法です。これにより、モデルのサイズを縮小し、計算量を削減できます。

剪定は、モデルの構造を簡素化することで、推論速度を向上させる効果があります。ただし、過度な剪定は、モデルの精度を大きく低下させる可能性があるため、注意が必要です。

OpenVINO™は、これらのモデル最適化手法を組み合わせることで、様々なディープラーニングモデルの推論速度を効率的に向上させます。開発者は、これらの最適化手法を適切に適用することで、アプリケーションの要件に合わせた最適なパフォーマンスを実現できます。

異種ハードウェア対応

OpenVINO™の大きな特徴の一つが、異種ハードウェアへの対応です。これは、CPU、GPU、VPU、FPGAなど、様々な種類のハードウェア上でディープラーニングモデルの推論を実行できるということを意味します。

プラグインアーキテクチャ:CPU、GPU、VPUなど、様々なハードウェア上で実行可能

OpenVINO™は、プラグインアーキテクチャを採用しています。これにより、各ハードウェアに対応するプラグインを組み込むことで、様々なデバイス上でモデルを実行できます。

例えば、CPU用のプラグイン、GPU用のプラグイン、VPU用のプラグインなどが用意されており、これらのプラグインを切り替えることで、同じモデルを異なるハードウェア上で実行できます。

自動デバイス検出:利用可能なハードウェアを自動的に検出し、最適なデバイスで実行

OpenVINO™は、システムに接続されているハードウェアを自動的に検出し、その中で最適なデバイスを選択して推論を実行できます。これにより、開発者は、ハードウェアの種類を意識することなく、効率的に推論処理を行うことができます。

また、複数のハードウェアが利用可能な場合、OpenVINO™は、それぞれのハードウェアの特性を考慮して、最適なデバイスを選択します。例えば、CPUは汎用的な処理に適しているため、複雑な処理やバッチ処理などに使用し、GPUは並列処理に特化しているため、画像処理などのタスクに使用するといった使い分けが可能です。

異種実行:複数のハードウェアを組み合わせて実行し、パフォーマンスを最大化

OpenVINO™は、複数のハードウェアを組み合わせて実行する異種実行もサポートしています。これにより、単一のハードウェアでは実現できない高いパフォーマンスを達成できます。

例えば、モデルの一部をCPUで実行し、別の部分をGPUで実行することで、それぞれのハードウェアの強みを活かし、効率的に推論処理を行うことができます。

OpenVINO™の異種ハードウェア対応により、開発者は、アプリケーションの要件や利用可能なリソースに応じて、最適なハードウェア構成を選択し、最大限のパフォーマンスを引き出すことができます。これは、エッジデバイスからクラウドまで、様々な環境で機械学習モデルを展開する上で、大きなメリットとなります。

高レベルAPI

OpenVINO™は、開発者がディープラーニングモデルの推論処理をアプリケーションに組み込むための、高レベルAPIを提供します。これらのAPIは、C++やPythonなど、様々なプログラミング言語で利用でき、開発者は、自分の得意な言語や、アプリケーションの要件に合わせて、最適なAPIを選択できます。

OpenVINO Runtime API:C++、Pythonなど、様々な言語で利用可能

OpenVINO™ Runtime APIは、OpenVINO™の主要なAPIであり、C++とPythonで利用できます。C++ APIは、パフォーマンスが重視されるアプリケーションに適しており、Python APIは、手軽にプロトタイプを作成したり、実験を行ったりするのに適しています。

これらのAPIを使用することで、開発者は、学習済みモデルの読み込み、入力データの準備、推論の実行、結果の取得といった、一連の推論処理を、わずかなコードで実装できます。

OpenVINO Model Server:REST APIまたはgRPCインターフェースを介してモデルをデプロイ

OpenVINO™ Model Serverは、REST APIまたはgRPCインターフェースを介して、ディープラーニングモデルをデプロイするためのツールです。これにより、開発者は、モデルをサービスとして提供し、ネットワーク経由で利用できるようになります。

OpenVINO™ Model Serverを使用することで、複数のクライアントからのリクエストを効率的に処理したり、モデルのバージョン管理を行ったり、スケーラビリティを確保したりすることができます。

OpenVINO Notebooks:Jupyter Notebook環境でOpenVINOを体験

OpenVINO™ Notebooksは、Jupyter Notebook環境でOpenVINO™を体験するためのサンプル集です。これらのサンプルを使用することで、開発者は、OpenVINO™の様々な機能を、対話的に学ぶことができます。

OpenVINO™ Notebooksには、様々な種類のディープラーニングモデルを使用した推論の例や、OpenVINO™の最適化機能を試す例などが含まれています。

OpenVINO™の高レベルAPIは、開発者が、ディープラーニングモデルの推論処理を、より簡単かつ効率的にアプリケーションに組み込むための強力なツールとなります。

実際の使用例と利点

OpenVINO™は、その高いパフォーマンスと柔軟性から、様々な分野で活用されています。ここでは、その代表的な例と、OpenVINO™を使用する上での利点を紹介します。

エッジAI:リアルタイム性が求められる分野

OpenVINO™は、エッジデバイスでの推論処理に非常に適しており、リアルタイム性が求められる分野で広く採用されています。

  • 監視カメラ:OpenVINO™を使用することで、監視カメラの映像から、不審行動や異常をリアルタイムで検知できます。これにより、セキュリティの向上や、事件・事故の未然防止に貢献できます。
  • 自動運転:自動運転システムでは、OpenVINO™を使用して、LiDARやカメラなどのセンサーからのデータを高速に処理し、周囲の状況を認識します。これにより、安全な走行をサポートします。
  • スマートファクトリー:製造ラインにOpenVINO™を導入することで、製品の品質検査や、設備の異常検知を自動化できます。これにより、生産性の向上や、コスト削減に貢献できます。

クラウドAI:大規模な推論処理

OpenVINO™は、クラウド環境での大規模な推論処理にも活用できます。

  • 画像認識:OpenVINO™を使用することで、大量の画像データを高速に処理し、物体検出や画像分類などのタスクを実行できます。これにより、画像検索や、コンテンツ分析などのアプリケーションを効率化できます。
  • 自然言語処理:OpenVINO™は、自然言語処理モデルの推論も高速化できます。これにより、テキスト分類や、感情分析、機械翻訳などのタスクを、より高速に実行できます。
  • レコメンデーションシステム:OpenVINO™を使用することで、ユーザーの行動履歴や嗜好に基づいて、最適な商品をレコメンドできます。これにより、ECサイトの売上向上や、ユーザーエンゲージメントの向上に貢献できます。

医療分野:高精度な推論が求められる分野

OpenVINO™は、医療画像の解析など、高精度な推論が求められる分野でも活用されています。

  • 医療画像の解析:OpenVINO™を使用することで、CTスキャンやMRIなどの医療画像を高速に解析し、病気の早期発見や、診断支援に貢献できます。

小売分野:データに基づいた意思決定を支援

OpenVINO™は、小売分野でも、顧客行動の分析や、需要予測などに活用できます。

  • 顧客行動分析:OpenVINO™を使用することで、店舗内のカメラ映像や、POSデータなどを分析し、顧客の行動パターンや購買傾向を把握できます。これにより、店舗レイアウトの最適化や、商品配置の改善に役立てることができます。
  • 需要予測:OpenVINO™を使用することで、過去の販売データや、外部要因(天気、イベントなど)を分析し、将来の需要を予測できます。これにより、在庫管理の最適化や、販売戦略の策定に貢献できます。

OpenVINO™は、これらの例からもわかるように、様々な分野で、機械学習モデルの推論を高速化し、アプリケーションのパフォーマンス向上に貢献します。

図5. OpenVINOのユースケース-スマート・ストアhttps://www.isus.jp/wp-content/uploads/openvino/2024/docs/get-started.html より引用)

実践:OpenVINOを使った高速化

このセクションでは、実際にOpenVINO™を使用して、機械学習モデルの推論を高速化する手順を、具体的なコード例を交えながら解説します。

サンプルモデルの準備:TensorFlow、PyTorchなどで学習済みモデルを用意

まず、OpenVINO™で推論を行うための学習済みモデルを用意します。このモデルは、TensorFlow、PyTorch、ONNXなど、一般的なディープラーニングフレームワークで学習されたもので構いません。

ここでは、例として、TensorFlowで学習された画像分類モデルを使用します。

モデルの変換:Model Optimizerを使用してIR形式に変換

次に、用意した学習済みモデルを、OpenVINO™のModel Optimizerを使用して、OpenVINO™の中間表現(IR)形式に変換します。

Model Optimizerは、コマンドラインツールとして提供されており、以下のコマンドを実行することで、モデルをIR形式に変換できます。

$ python3 <openvino_install_dir>/tools/mo/mo.py \
    --input_model <path_to_model>/model.pb \
    --output_dir <output_dir>

この例では、<path_to_model>/model.pbがTensorFlowモデルのパス、<output_dir>がIR形式のモデルを保存するディレクトリです。

Model Optimizerは、モデルの構造を解析し、OpenVINO™が効率的に実行できる形式にモデルを変換します。変換後、<output_dir>ディレクトリには、モデルの構造を記述した.xmlファイルと、モデルの重みなどを格納した.binファイルが生成されます。

推論の実行:OpenVINO Runtime APIを使用して推論を実行

モデルをIR形式に変換したら、OpenVINO™ Runtime APIを使用して、実際に推論を実行します。

OpenVINO™ Runtime APIは、C++またはPythonで利用できます。ここでは、Pythonの例を示します。

import cv2
import numpy as np
import openvino.runtime as ov

# OpenVINO Runtimeの初期化
core = ov.Core()

# IR形式のモデルを読み込む
model = core.read_model(model="<path_to_model>/model.xml")

# 入力と出力の情報を取得
input_layer = model.input(0)
output_layer = model.output(0)

# 推論を実行するデバイスを選択
compiled_model = core.compile_model(model=model, device_name="CPU") # または "GPU" など

# 入力データを準備
image = cv2.imread("<path_to_image>/image.jpg")
resized_image = cv2.resize(image, (224, 224)) # モデルの入力サイズに合わせる
input_data = np.expand_dims(resized_image, axis=0)
input_data = input_data.transpose((0, 3, 1, 2))  # NCHW形式に変換

# 推論を実行
results = compiled_model.infer_new_request({input_layer: input_data})

# 結果を取得
predictions = results[output_layer]
predicted_class = np.argmax(predictions)

print("Predicted class:", predicted_class)

この例では、まずov.Core()を呼び出してOpenVINO™ Runtimeを初期化し、core.read_model()でIR形式のモデルを読み込みます。次に、core.compile_model()で、推論を実行するデバイス(この例ではCPU)を選択し、コンパイル済みモデルを取得します。

その後、入力画像をモデルの入力サイズに合わせてリサイズし、モデルが必要とする形式に変換します。そして、compiled_model.infer_new_request()を呼び出して推論を実行し、結果を取得します。

パフォーマンス計測:推論速度を計測し、高速化の効果を確認

OpenVINO™を使用することによる高速化の効果を確認するために、推論速度を計測します。

推論速度は、1秒あたりのフレーム数(FPS: Frames Per Second)などで評価できます。以下のコードは、OpenVINO™を使用して画像分類モデルの推論速度を計測する例です。

import cv2
import numpy as np
import openvino.runtime as ov
import time

# OpenVINO Runtimeの初期化
core = ov.Core()

# IR形式のモデルを読み込む
model = core.read_model(model="<path_to_model>/model.xml")

# 入力と出力の情報を取得
input_layer = model.input(0)
output_layer = model.output(0)

# 推論を実行するデバイスを選択
compiled_model = core.compile_model(model=model, device_name="CPU") # または "GPU" など

# 入力データを準備
image = cv2.imread("<path_to_image>/image.jpg")
resized_image = cv2.resize(image, (224, 224))
input_data = np.expand_dims(resized_image, axis=0)
input_data = input_data.transpose((0, 3, 1, 2))

# 推論を繰り返し実行し、実行時間を計測
num_iterations = 100
start_time = time.time()
for _ in range(num_iterations):
    results = compiled_model.infer_new_request({input_layer: input_data})
end_time = time.time()

# FPSを計算
elapsed_time = end_time - start_time
fps = num_iterations / elapsed_time

print("FPS:", fps)

この例では、推論を100回繰り返し実行し、その実行時間を計測しています。そして、総実行時間をイテレーション数で割ることで、1秒あたりのフレーム数を計算しています。

このコードを実行することで、OpenVINO™を使用した場合の推論速度(FPS)が得られます。この値を、OpenVINO™を使用しない場合の推論速度と比較することで、高速化の効果を確認できます。

OpenVINO™を使用すると、モデルの最適化とハードウェアに特化した実行により、多くの場合、推論速度が大幅に向上します。特に、CPUではなくGPUやVPUなどのアクセラレータを使用した場合や、モデルの量子化などの最適化手法を適用した場合には、より大きな高速化効果が得られます。

まとめ

OpenVINO™は、ディープラーニングモデルの推論を高速化するための強力なツールキットであり、ソフトウェアエンジニアにとって、アプリケーションのパフォーマンス向上と効率化を実現するための鍵となります。

本記事では、OpenVINO™の概要、主要な機能、そして実際の使用例について解説しました。OpenVINO™を使用することで、開発者は、モデルの最適化、異種ハードウェアの活用、高レベルAPIの利用といった様々なメリットを享受し、機械学習モデルの推論を効率的に高速化できます。

OpenVINO™は、エッジAIからクラウドAIまで、幅広い分野で活用されており、その応用範囲は日々拡大しています。今後、OpenVINO™の技術は、ますます重要性を増し、様々な分野で革新的なアプリケーションの開発を加速させるでしょう。

AIエンジニアは、このOpenVINO™を積極的に活用し、より高速で効率的なAIアプリケーションを開発することで、新たな価値を創造し、社会の発展に貢献していくことが期待されます。

More Information