普段使いのハードウェアでAI推論を高速化しようとして、CPUの遅延とGPUの複雑さの間で立ち往生していると感じたことはありませんか? OpenVINOは、その問題を解決するかもしれません。 Intelによって構築されたOpenVINOは、一般的な深層学習モデルを、CPU、統合GPU、さらにはNPU上で実行できる高速でポータブルなアプリケーションに変換します。スタック全体を書き換える必要はありません。
この実践的でソリューション指向のガイドでは、インストールからモデル変換、最適化、デプロイまで、OpenVINOの正確な使用方法を学びます。最も一般的なワークフローを取り上げ、サンプルコードを共有し、重要なパフォーマンスのヒントを紹介します。
学習内容の概要:
- pipを使用してOpenVINOを数分でインストール
- Model Optimizerを使用してモデルを変換(ONNX/TF/PyTorchエクスポート)
- PythonでOpenVINO Runtimeを使用して推論を実行
- 最小限のコード変更で、CPU、iGPU、NPU全体にデプロイ
OpenVINOとは? なぜ使用するのか?
OpenVINOは、Intelハードウェア全体およびそれBeyondでAIモデルを最適化およびデプロイするためのオープンソースツールキットです。 予測可能なパフォーマンス、低レイテンシ、移植性を実現したい場合に特に強力です。 CUDAのセットアップは不要です。 ONNXなどの一般的なモデル形式をサポートし、一般的なフレームワークとシームレスに統合します。
主な利点:
- 速度:最適化されたカーネルとグラフ変換により、CPUおよびGPUでの推論が高速化されます。
- 移植性:同じアプリケーションで、1行のデバイス変更でCPU、iGPU、NPUをターゲットにできます。
- 効率:量子化、モデル圧縮、ランタイム最適化により、レイテンシとメモリが削減されます。
- シンプルさ:クリーンなPython APIとCLIツールにより、初心者でも使いやすくなっています。
ステップ1:OpenVINOをインストール
ほとんどのユーザーにとって、最も速い方法はpipを使用することです:
- Python 3.9〜3.12がインストールされていることを確認します(64ビット)。
- インストール:
pip install -U openvino openvino-dev
- 確認:
python -c "import openvino; print(openvino.version)"
公式のステップごとのリソースを使用する場合、またはバージョン固有の注意点やプラットフォームサポートを追跡する場合は、OpenVINO Get Startedのドキュメントと現在のドキュメントハブから始めてください。 簡単なpipインストールリファレンスと互換性については、PyPIページを参照してください。
ステップ2:モデルを準備する(ONNXを推奨)
OpenVINOは、IR(中間表現)モデル(.xml/.bin)で最適に動作します。 ほとんどのユーザーは最初にONNXにエクスポートし、次にModel Optimizerを使用してIRに変換します。
一般的な経路:
- PyTorch:torch.onnx.export → ONNX → OpenVINO IR
- TensorFlow/Keras:SavedModel → ONNX(tf2onnx経由)→ OpenVINO IR
簡単な例(PyTorch → ONNX):
- Python内でモデルをONNXにエクスポート:
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=17, do_constant_folding=True)
- onnx.checker.check_modelでONNXを検証するか、onnxruntimeで一度実行します。
ステップ3:Model Optimizerを使用してOpenVINO IRに変換
Model Optimizerは、フレームワークモデルをOpenVINO IRに変換し、グラフレベルの最適化を適用します。 openvino-devをインストールした後、以下を実行できます:
- mo --input_model model.onnx --output_dir ov_model
これにより、model.xmlとmodel.binが生成されます。
役立つフラグ:
- --input_shape:モデルが動的な場合、入力ディメンションを強制します。
- --mean_values/--scale_values:プリプロセスの間に入力を正規化します。
- --compress_to_fp16:速度/メモリ向上のために精度とモデルサイズを削減します。
ヒント:低レイテンシのCPU推論をターゲットにしている場合、FP16は速度と精度の優れたバランスをもたらすことがよくあります。 A/Bテスト用にベースラインFP32 IRを保持してください。
ステップ4:OpenVINO Runtime(Python)で推論を実行
コアランタイムワークフローは簡単です。
例(画像分類):
from openvino.runtime import Core
import numpy as np
import cv2
core = Core()
model = core.read_model("ov_model/model.xml")
compiled_model = core.compile_model(model, device_name="CPU") # options: "CPU", "GPU", "AUTO", "NPU" (サポートされている場合)
input_layer = compiled_model.inputs。 CPUのホットスポットとスレッドの使用率をプロファイルする場合は、Intel VTune ProfilerにOpenVINOアプリ専用のレシピがあります。
ステップ6:量子化で最適化(INT8)
Post-training quantization (PTQ)は、モデルサイズを縮小し、精度の低下を最小限に抑えながら速度を向上させることができます:
- openvino-devに含まれている組み込みのPOT(Post-Training Optimization Tool)を使用します。
- 本番データに似た小さなキャリブレーションデータセットを提供します。
- INT8 IRをエクスポートしてベンチマークします。 精度が不十分な場合は、混合精度(INT8 + FP16)または選択的量子化を試してください。
一般的な量子化フロー:
- POT量子化パラメータ(テンソルごとまたはチャネルごと、対称または非対称)を構成します。
- KPIを比較します:レイテンシ、スループット、上位1/上位5の精度、またはタスク固有のメトリック。
ステップ7:適切な方法で前処理を処理する
モデルI/Oの期待値は異なることがよくあります。 前処理を標準化します:
- 予想されるサイズ(例:224×224)にサイズ変更/中央クロップ
OpenVINO RuntimeのPrePostProcessor APIを使用して前処理ステップをIRに埋め込むことができるため、アプリコードはクリーンで移植可能なままになります。
コード例:
from openvino.runtime import Core, Layout, Type
from openvino.preprocess import PrePostProcessor
core = Core()
model = core.read_model("ov_model/model.xml")
ppp = PrePostProcessor(model)
ppp.input.tensor.set_layout(Layout("NHWC"))
ppp.input.preprocess.convert_element_type(Type.f32)
ppp.output.tensor
model = ppp.build()
compiled_model = core.compile_model(model, "AUTO")
ステップ8:ビデオとストリーミングにスケール
ビデオ分析の場合、OpenVINO推論をOpenCVまたはGStreamerとパイプライン化できます。 非同期推論リクエストとバッチ処理を使用して、FPSを高く、レイテンシを低く保ちます。
ヒント:
- 非同期APIを使用します:複数のインフライトリクエストにより、CPUのスループットが向上します。
- モデルがベクトル化された実行からメリットを得られる場合は、フレームをバッチ処理します。
- マルチコアシステムでの予測可能なレイテンシのために、スレッドを固定するか、ストリームを調整します。
ステップ9:デバイス間でスマートにデプロイ
OpenVINOのスーパーパワーの1つは、シームレスなデバイスターゲティングです:
- CPU:強力なデフォルト; 広く利用可能; エッジおよびサーバーに最適。
- GPU(統合):ディスクリートGPUなしで良好な高速化; ドライバーの品質が重要です。
- AUTO:ランタイムに選択させます; ポータブルアプリに最適。
- Hetero execution:有益な場合にレイヤーをデバイス間で分割します。
移植性のためにAUTOから始めます。 より厳密な制御が必要な場合は、CPUとGPUをベンチマークし、モデルごとに決定します。
タスクごとの実践的な例
- ONNX → IRに変換; FP16を使用; AUTOデバイス; 非同期推論。
- 精度をわずかに低下させて>2×スループットが必要な場合は、量子化します。
- 動的形状が処理されるか、入力サイズが固定されていることを確認します。
- 出力を解析します:ボックスをデコードし、NMSをクライアント側で適用します。
- CPUでリアルタイムを実現するために、エッジデプロイメントにINT8を使用します。
- ベクトル化されたNumPyで後処理(argmax、カラーマッピング)を最適化します。
- OpenVINO-textの最適化が利用可能な場合は使用します。
- トークン化パイプラインをキャッシュします; トランスフォーマーにはINT8を検討してください。
- FP16をターゲットにします; スケジューラ/推論ループを最適化します。
- プロファイリングが役立ちます—拡散パイプラインは多段階です。
テストと検証のチェックリスト
- 小さなテストセットのベースライン(PyTorch/TF/ONNXRuntime)と出力を比較します。
- FP16/INT8変換後の数値的差異を検証します。
- 予想される負荷の下でレイテンシp50/p95とスループットを測定します。
- ストレステスト:メモリまたはスレッドの問題をキャッチするための長時間の実行。
トラブルシューティングのクイックアンサー
- openvino-devを更新します; より新しいopsetを試します; ONNXグラフを簡略化します(onnxsim)。
- --input_shapeを提供します; 動的入力サポートを確認します。
- FP16/INT8、非同期APIを使用し、スレッド/ストリームを調整します; benchmark_appを実行します。
- ドライバーを更新します; device="AUTO"を試します; サポートされているGPUのドキュメントを確認します。
学習リソースと公式ドキュメント
- 実践的なチュートリアル、ノートブック、およびセットアップガイドについては、ここから始めてください:OpenVINO Get Started
- API、Model Optimizer、POT、サンプルに関する完全なドキュメントポータル:OpenVINO Docs
- 簡単なインストールと互換性のためのPipインストールリファレンス:PyPI openvino
- OpenVINOアプリのプロファイリングとパフォーマンス分析:Intel VTuneガイド
ちなみに、最適化とデプロイメントに関する技術コンテンツ、チュートリアル、または内部プレイブックを作成している場合、Sider.AIのライティングワークスペースのようなツールを使用すると、コード、ベンチマーク、ナラティブをすばやくまとめることができます。複雑なOpenVINOパフォーマンス実験やマルチデバイス比較を文書化する場合に役立ちます。 実行可能な次のステップ
- pipでOpenVINOをインストールし、サンプルIRでbenchmark_appを実行します。
- 既知の正常なONNXモデル(例:ResNet50)を変換し、精度を検証します。
- FP16、次にPOTでINT8を試します; レイテンシとスループットを測定します。
- CPU、GPU、AUTO間でdevice_nameを切り替えます; ターゲットハードウェアに最適なものを選択します。
- 追加のパフォーマンスを絞り出す必要がある場合は、VTuneでプロファイルします。
重要なポイント
- OpenVINOは、AI推論を高速、ポータブル、およびハードウェア対応にします。
- IRへの変換とスマートな前処理により、信頼性の高い高速化が実現します。
- 量子化と非同期実行は、リアルタイムパフォーマンスに最適です。
- デバイスの柔軟性(CPU/iGPU/NPU/AUTO)は、1つのコードベース、多数のターゲットを意味します。
FAQ
Q1:OpenVINOを最も簡単にインストールするにはどうすればよいですか?
仮想環境を使用し、以下を実行します:pip install -U openvino openvino-dev。 簡単なインポートチェックで確認し、プラットフォームの詳細については公式のGet Startedドキュメントを参照してください。
Q2:モデルをOpenVINO IRに変換するにはどうすればよいですか?
モデルをONNXにエクスポートし、Model Optimizer(mo)を実行して.xml/.bin IRファイルを生成します。 入力形状を提供し、速度とメモリ向上のためにFP16を検討してください。
Q3:OpenVINOは、コードを変更せずにCPUおよび統合GPUで実行できますか?
はい。 device_name="AUTO"、"CPU"、または"GPU"でモデルをコンパイルします。 コードの残りの部分をそのままにして、1つのパラメータでデバイスを切り替えることができます。
Q4:OpenVINOで推論を高速化するにはどうすればよいですか?
FP16またはINT8量子化、非同期推論APIを使用し、benchmark_appでスレッドとストリームを調整します。 より詳細なボトルネック分析については、VTuneでプロファイルします。
Q5:OpenVINOはNLPおよび生成モデルをサポートしていますか?
はい。 さまざまなNLPおよび拡散モデルをサポートしています。 FP16を使用し、トランスフォーマーにはINT8を検討してください。 最適化後に精度を検証し、負荷の下でレイテンシを測定します。