コンテンツへスキップ

Ultralytics YOLO モデルのためのOpenVINO 推論の最適化:包括的ガイド

OpenVINO エコシステム

はじめに

ディープラーニングモデル、特にUltralytics YOLO モデルのような物体検出用のモデルを導入する場合、最適なパフォーマンスを達成することが極めて重要です。このガイドでは、Intel OpenVINO ツールキットを活用して推論を最適化する方法について、レイテンシーとスループットに焦点を当てて詳しく説明します。コンシューマーグレードのアプリケーションであれ、大規模なデプロイメントであれ、これらの最適化戦略を理解し適用することで、様々なデバイス上でモデルが効率的に動作するようになります。

レイテンシーの最適化

待ち時間の最適化は、消費者向けシナリオで典型的な、1つの入力に対して1つのモデルから即座に応答することを必要とするアプリケーションにとって不可欠である。目標は、入力と推論結果の間の遅延を最小化することです。しかし、低遅延を達成するためには、特に同時推論を実行する場合や複数のモデルを管理する場合には、慎重な検討が必要です。

遅延最適化のための主要戦略:

  • デバイスあたり1回の推論:低レイテンシを実現する最もシンプルな方法は、デバイスごとに一度に1つの推論に制限することである。同時並行性を高めると、レイテンシが増大することが多い。
  • サブデバイスの活用:マルチソケットCPUやマルチタイルGPUのようなデバイスは、内部のサブデバイスを活用することで、レイテンシの増加を最小限に抑えながら複数のリクエストを実行することができる。
  • OpenVINO パフォーマンスのヒント OpenVINO の活用 ov::hint::PerformanceMode::LATENCY のために ov::hint::performance_mode プロパティをモデルコンパイル時に使用することで、パフォーマンスチューニングを簡素化し、デバイスにとらわれない将来性のあるアプローチを提供する。

最初の推論待ち時間の管理:

  • モデルキャッシング:レイテンシに影響するモデルのロード時間とコンパイル時間を短縮するために、可能な限りモデルキャッシングを使用します。キャッシングが実行できないシナリオでは、一般的にCPUが最も速いモデルロード時間を提供します。
  • モデルマッピングとリーディングの比較: ロード時間を短縮するため、OpenVINO 、モデルの読み込みをマッピングに置き換えました。ただし、モデルがリムーバブルドライブやネットワークドライブ上にある場合は ov::enable_mmap(false) をクリックして読書に戻る。
  • 自動デバイス選択:このモードでは、CPU で推論を開始し、準備ができ次第アクセラレータに移行することで、最初の推論の待ち時間をシームレスに短縮する。

スループットの最適化

スループットの最適化は、多数の推論リクエストに同時に対応するシナリオにおいて、個々のリクエストのパフォーマンスを大幅に犠牲にすることなく、リソースの利用率を最大化するために極めて重要である。

スループット最適化へのアプローチ:

  1. OpenVINO パフォーマンス・ヒント:パフォーマンス・ヒントを使用してデバイス間のスループットを向上させる、ハイレベルで将来性のある方法。

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
    
  2. 明示的バッチ処理とストリーム:高度なパフォーマンス・チューニングのための明示的なバッチ処理とストリームの使用を含む、よりきめ細かいアプローチ。

スループット指向アプリケーションの設計

スループットを最大化するために、アプリケーションは

  • 入力を並行して処理し、装置の能力をフルに活用する。
  • データフローを並列実行される推論要求に分解する。
  • コールバックを使った非同期APIを活用することで、効率を維持し、デバイスの飢餓状態を回避する。

マルチデバイス実行:

OpenVINOのマルチ・デバイス・モードは、アプリケーション・レベルのデバイス管理を必要とすることなく、デバイス間の推論要求を自動的にバランスさせることにより、スループットのスケーリングを簡素化する。

実世界でのパフォーマンス向上

Ultralytics YOLO モデルにOpenVINO 最適化を実装することで、パフォーマンスが大幅に向上します。ベンチマークで実証されているように、ユーザーはIntel CPU上で最大3倍高速な推論速度を体験することができ、統合GPU、専用GPU、VPUを含むIntelハードウェア全域でさらに大きな高速化が可能です。

例えば、Intel Xeon CPU上でYOLOv8 モデルを実行した場合、OpenVINOバージョンは、精度に妥協することなく、画像1枚あたりの推論時間という点で、PyTorch 同等バージョンを常に上回っています。

実践的な実施

Ultralytics YOLO モデルをOpenVINO用にエクスポートして最適化するには、エクスポート機能を使用します:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Export the model to OpenVINO format
model.export(format="openvino", half=True)  # Export with FP16 precision

エクスポート後、最適化されたモデルで推論を実行することができます:

# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")

# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)

結論

Ultralytics YOLO モデルのレイテンシとスループットをOpenVINO で最適化することで、アプリケーションのパフォーマンスを大幅に向上させることができます。このガイドに概説されている戦略を注意深く適用することで、開発者はモデルが効率的に実行され、さまざまな展開シナリオの要求を満たすようにすることができます。レイテンシとスループットのどちらを最適化するかは、特定のアプリケーションのニーズと配備環境の特性によって決まることを忘れないでください。

より詳細な技術情報と最新のアップデートについては、OpenVINO ドキュメントと Ultralytics YOLO リポジトリを参照してください。これらのリソースでは、ディープラーニングモデルを最大限に活用するための詳細なガイド、チュートリアル、コミュニティサポートを提供しています。


モデルが最適なパフォーマンスを達成できるようにすることは、単に設定を微調整することではなく、アプリケーションのニーズを理解し、情報に基づいた意思決定を行うことです。リアルタイム応答の最適化であれ、大規模処理のスループットの最大化であれ、Ultralytics YOLO モデルとOpenVINO 組み合わせは、開発者が高性能AIソリューションを展開するための強力なツールキットを提供します。

よくあるご質問

OpenVINO を使ってUltralytics YOLO のモデルを低遅延に最適化するには?

Ultralytics YOLO モデルを低遅延に最適化するには、いくつかの重要な戦略がある:

  1. デバイスごとに1回の推論:遅延を最小化するために、推論をデバイスごとに一度に1つに制限する。
  2. サブデバイスの活用:マルチソケットCPUやマルチタイルGPUなど、複数のリクエストを最小限のレイテンシ増加で処理できるデバイスを活用する。
  3. OpenVINO パフォーマンスのヒント OpenVINO を使用する。 ov::hint::PerformanceMode::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 、先制点の待ち時間を短縮するためのベストプラクティスとは?

最初の推論のレイテンシを減らすには、以下のことを考慮する:

  1. モデル・キャッシュ:ロード時間とコンパイル時間を短縮するためにモデル・キャッシュを使用します。
  2. モデルマッピングとリーディングの比較: マッピング(ov::enable_mmap(true))に切り替わります。ov::enable_mmap(false)モデルがリムーバブルドライブまたはネットワークドライブ上にある場合)。
  3. AUTOデバイス選択:AUTOモードを利用して、CPU 推論から始め、シームレスにアクセラレーターに移行する。

第一推論レイテンシの管理に関する詳細な戦略については、「第一推論レイテンシの管理」のセクションを参照のこと。

レイテンシーとスループットの最適化と、Ultralytics YOLO 、OpenVINO のバランスを取るには?

レイテンシーとスループットの最適化のバランスを取るには、アプリケーションのニーズを理解する必要があります:

  • レイテンシーの最適化:即時応答が必要なリアルタイム・アプリケーション(コンシューマー・グレードのアプリケーションなど)に最適。
  • スループットの最適化:同時推論が多く、リソースを最大限に使用するシナリオに最適(例:大規模展開)。

OpenVINO のハイレベルなパフォーマンスヒントとマルチデバイスモードを使用することで、適切なバランスをとることができます。OpenVINO パフォーマンスのヒントは、特定の要件に基づいて適切なものを選択してください。

OpenVINO 以外のAIフレームワークで、Ultralytics YOLO のモデルを使用できますか?

はい、Ultralytics YOLO モデルは汎用性が高く、様々なAIフレームワークと統合することができます。オプションには以下が含まれます:

Ultralytics インテグレーションのページで、より多くのインテグレーションをご覧ください。

📅作成:1年前 ✏️更新 9日前

コメント