YOLO向けOpenVINO推論最適化#
はじめに#
ディープラーニングモデル、特にUltralytics YOLOモデルのような物体検出用モデルをデプロイする際には、最適なパフォーマンスを達成することが不可欠です。本ガイドでは、インテルのOpenVINOツールキットを活用して推論を最適化する方法について、レイテンシとスループットに焦点を当てて詳しく解説します。コンシューマー向けアプリケーションに取り組んでいる場合でも、大規模なデプロイに取り組んでいる場合でも、これらの最適化戦略を理解して適用することで、様々なデバイス上でモデルが効率的に動作するようになります。
レイテンシの最適化#
レイテンシの最適化は、消費者向けシナリオに典型的な、単一の入力に対して単一のモデルから即時の応答を必要とするアプリケーションにとって極めて重要です。目標は、入力から推論結果までの遅延を最小限に抑えることです。しかし、低レイテンシを実現するには、特に並行推論を実行する場合や複数のモデルを管理する場合に、慎重な検討が必要です。
レイテンシ最適化の主要戦略:#
- デバイスごとの単一推論: 低レイテンシを実現する最も単純な方法は、デバイスごとに一度に実行する推論を1つに制限することです。同時実行数を増やすと、多くの場合レイテンシが増加します。
- サブデバイスの活用: マルチソケットCPUやマルチタイルGPUなどのデバイスでは、内部のサブデバイスを活用することで、レイテンシの増加を最小限に抑えながら複数のリクエストを処理できます。
- OpenVINOパフォーマンスヒント: モデルコンパイル時にOpenVINOの
ov::LATENCYをov::performance_modeプロパティに対して利用することで、パフォーマンスのチューニングがシンプルになり、デバイス非依存で将来性のあるアプローチを提供します。
初回推論レイテンシの管理:#
- モデルキャッシュ: モデルのロード時間やコンパイル時間がレイテンシに与える影響を軽減するため、可能な場合はモデルキャッシュを使用してください。キャッシュが利用できないシナリオでは、通常CPUが最も速いモデルロード時間を提供します。
- モデルのマッピングと読み込みの比較: 読み込み時間を短縮するため、OpenVINOではモデルの読み込みがマッピングに置き換えられました。ただし、モデルがリムーバブルドライブやネットワークドライブにある場合は、
ov::enable_mmap(false)を使用して読み込みに戻すことを検討してください。 - AUTOデバイス選択: このモードではCPUで推論を開始し、準備ができ次第アクセラレータに切り替えることで、初回推論レイテンシをシームレスに短縮します。
スループットの最適化#
スループットの最適化は、多数の推論リクエストを同時に処理するシナリオにおいて、個々のリクエストのパフォーマンスを大幅に犠牲にすることなくリソース利用率を最大化するために極めて重要です。
スループット最適化へのアプローチ:#
-
OpenVINOパフォーマンスヒント: パフォーマンスヒントを使用して、デバイス全体でスループットを向上させるための高レベルかつ将来性のある手法です。
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
明示的なバッチ処理とストリーム: 明示的なバッチ処理やストリームの使用を含む、より詳細なパフォーマンス調整のための手法です。
スループット指向のアプリケーション設計:#
スループットを最大化するために、アプリケーションは以下を行うべきです:
- デバイスの機能をフル活用して、入力を並列処理すること。
- データフローを並列実行用にスケジュールされた同時推論リクエストに分解すること。
- Async APIとコールバックを利用して効率を維持し、デバイスの飢餓状態を回避すること。
マルチデバイス実行:#
OpenVINOのマルチデバイスモードは、アプリケーションレベルでデバイス管理を行う必要なしに、デバイス間で推論リクエストを自動的にバランスさせることで、スループットの拡張を簡素化します。
実用上のパフォーマンス向上#
Ultralytics YOLOモデルでOpenVINOの最適化を実装すると、大幅なパフォーマンスの向上が得られます。ベンチマークで示されているように、インテル製CPUでは最大3倍高速な推論速度を体験でき、統合GPU、専用GPU、VPUを含むインテルのハードウェアスペクトル全体でさらに優れた高速化が可能です。
例えば、インテル製Xeon CPU上でYOLO26モデルを実行する場合、OpenVINOで最適化されたバージョンは、精度を妥協することなく、画像あたりの推論時間においてPyTorch版を一貫して上回ります。
実践的な実装#
OpenVINO向けにUltralytics YOLOモデルをエクスポートおよび最適化するには、エクスポート機能を使用できます。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", quantize=16) # Export with FP16 precisionエクスポート後、最適化されたモデルで推論を実行できます:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)結論#
OpenVINOを使用してUltralytics YOLOモデルをレイテンシやスループット向けに最適化することで、アプリケーションのパフォーマンスを大幅に向上させることができます。本ガイドで概説した戦略を慎重に適用することで、開発者はモデルを効率的に実行し、さまざまなデプロイメントシナリオの要件を満たすことができます。レイテンシ向けかスループット向けかの最適化の選択は、アプリケーションの具体的なニーズとデプロイ環境の特性に依存することを忘れないでください。
より詳細な技術情報や最新情報については、OpenVINOのドキュメントおよびUltralytics YOLOリポジトリを参照してください。これらのリソースでは、ディープラーニングモデルを最大限に活用するための詳細なガイド、チュートリアル、コミュニティサポートを提供しています。
モデルが最適なパフォーマンスを発揮できるようにすることは、単に設定を微調整することだけではありません。それはアプリケーションのニーズを理解し、十分な情報に基づいた決定を下すことです。リアルタイム応答のための最適化を行っている場合でも、大規模処理のためのスループットを最大化している場合でも、Ultralytics YOLOモデルとOpenVINOの組み合わせは、開発者が高性能なAIソリューションをデプロイするための強力なツールキットを提供します。
よくある質問 (FAQ)#
OpenVINOを使用してUltralytics YOLOモデルの低レイテンシ化を実現するにはどうすればよいですか?#
Ultralytics YOLOモデルを低レイテンシ化するための主な戦略は以下の通りです:
- デバイスごとの単一推論: 遅延を最小限にするため、デバイスごとに一度に実行する推論を1つに制限します。
- サブデバイスの活用: マルチソケットCPUやマルチタイルGPUなどのデバイスを利用して、レイテンシの増加を抑えつつ複数のリクエストを処理します。
- OpenVINOパフォーマンスヒント: 簡素化されたデバイス非依存のチューニングを行うために、モデルコンパイル時にOpenVINOの
ov::LATENCYを使用してください。
レイテンシの最適化に関するより実践的なヒントについては、ガイドのレイテンシ最適化セクションをご確認ください。
なぜUltralytics YOLOのスループット最適化にOpenVINOを使用すべきなのですか?#
OpenVINOは、パフォーマンスを犠牲にすることなくデバイスのリソース使用率を最大化することで、Ultralytics YOLOモデルのスループットを向上させます。主な利点は以下の通りです:
- パフォーマンスヒント: デバイス全体でのシンプルで高レベルなパフォーマンス調整。
- 明示的なバッチ処理とストリーム: 高度なパフォーマンスを実現するための詳細な調整。
- マルチデバイス実行: 推論の自動負荷分散による、アプリケーションレベル管理の負荷軽減。
設定例:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)スループットの最適化についての詳細は、詳細ガイドのスループット最適化セクションでご覧いただけます。
OpenVINOで初回推論レイテンシを短縮するためのベストプラクティスは何ですか?#
初回推論レイテンシを短縮するには、以下のプラクティスを検討してください:
- モデルキャッシュ: モデルキャッシュを使用して、ロード時間とコンパイル時間を短縮します。
- モデルのマッピングと読み込みの比較: デフォルトではマッピング(
ov::enable_mmap(true))を使用し、モデルがリムーバブルドライブやネットワークドライブにある場合は読み込み(ov::enable_mmap(false))に切り替えてください。 - AUTOデバイス選択: AUTOモードを活用して、CPU推論から開始し、シームレスにアクセラレータへ移行します。
初回推論レイテンシを管理するための詳細な戦略については、初回推論レイテンシの管理セクションを参照してください。
Ultralytics YOLOとOpenVINOを使用して、レイテンシとスループットの最適化を両立させるにはどうすればよいですか?#
レイテンシとスループットの最適化のバランスを取るには、アプリケーションのニーズを理解することが必要です:
- レイテンシ最適化: 即時の応答を必要とするリアルタイムアプリケーション(消費者向けアプリなど)に最適です。
- スループット最適化: 多くの同時推論が発生するシナリオで、リソース使用率を最大化する(大規模なデプロイメントなど)のに最適です。
OpenVINOの高レベルなパフォーマンスヒントとマルチデバイスモードを使用すると、適切なバランスを取ることができます。特定の要件に基づいて、適切なOpenVINOパフォーマンスヒントを選択してください。
Ultralytics YOLOモデルをOpenVINO以外のAIフレームワークで使用することはできますか?#
はい、Ultralytics YOLOモデルは非常に汎用性が高く、さまざまなAIフレームワークと統合できます。選択肢は以下の通りです:
- TensorRT: NVIDIA GPUの最適化については、TensorRT統合ガイドに従ってください。
- CoreML: Appleデバイスについては、CoreMLエクスポート手順を参照してください。
- LiteRT.js: WebおよびNode.jsアプリについては、LiteRT統合ガイドとLiteRT.js Webランタイムをご覧ください。
Ultralytics統合ページでその他の統合を探索してください。