Ultralytics YOLO27:

YOLO向けOpenVINO推論最適化#

OpenVINO Ecosystem

はじめに#

ディープラーニングモデル、特にUltralytics YOLOモデルのような物体検出モデルをデプロイする場合、最適なパフォーマンスを実現することが重要です。このガイドでは、IntelのOpenVINOツールキットを活用して推論を最適化する方法について、レイテンシとスループットに焦点を当てて説明します。コンシューマー向けアプリケーションでも大規模なデプロイでも、これらの最適化戦略を理解して適用することで、さまざまなデバイス上でモデルを効率的に実行できます。

レイテンシの最適化#

レイテンシの最適化は、単一の入力に対して単一のモデルから即時応答を必要とするアプリケーション(コンシューマー向けのシナリオで一般的)に不可欠です。目標は、入力から推論結果までの遅延を最小限に抑えることです。ただし、同時実行推論や複数モデルの管理を行う場合は、低レイテンシを実現するために慎重な検討が必要です。

レイテンシ最適化のための主要な戦略#

  • デバイスあたり1回の推論: 低レイテンシを実現する最も簡単な方法は、デバイスごとに一度に1回の推論だけに制限することです。同時実行を追加すると、レイテンシが増加することがよくあります。
  • サブデバイスの活用: マルチソケットCPUやマルチタイルGPUなどのデバイスは、内部のサブデバイスを活用することで、レイテンシの増加を最小限に抑えながら複数のリクエストを実行できます。
  • OpenVINOのパフォーマンスヒント: モデルのコンパイル時にov::LATENCYov::performance_modeプロパティに使用すると、パフォーマンスチューニングが簡素化され、デバイスに依存せず将来性のあるアプローチを実現できます。

初回推論レイテンシの管理#

  • モデルキャッシュ: モデルの読み込み時間とコンパイル時間がレイテンシに影響するのを軽減するため、可能な場合はモデルキャッシュを使用します。キャッシュが適さないシナリオでは、一般にCPUが最も高速なモデル読み込み時間を提供します。
  • モデルのマッピングと読み取り: 読み込み時間を短縮するため、OpenVINOはモデルの読み取りをマッピングに置き換えました。ただし、モデルがリムーバブルドライブまたはネットワークドライブ上にある場合は、ov::enable_mmap(false)を使用して読み取りに戻すことを検討してください。
  • AUTOデバイス選択: このモードはCPUで推論を開始し、準備が整うとアクセラレータに切り替えることで、初回推論のレイテンシをシームレスに短縮します。

スループットの最適化#

スループットの最適化は、多数の推論リクエストを同時に処理するシナリオで重要です。個々のリクエストのパフォーマンスを大きく犠牲にすることなく、リソース使用率を最大化できます。

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

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

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. 明示的なバッチ処理とストリーム: 明示的なバッチ処理とストリームを使用して、高度なパフォーマンスチューニングを行う、よりきめ細かなアプローチです。

スループット重視アプリケーションの設計#

スループットを最大化するため、アプリケーションは次の処理を行う必要があります:

  • 入力を並列処理し、デバイスの能力を最大限に活用します。
  • データフローを同時実行する推論リクエストに分解し、並列実行するようスケジュールします。
  • コールバック付きのAsync APIを使用して効率を維持し、デバイスのアイドル状態を回避します。

マルチデバイス実行#

OpenVINOのマルチデバイスモードは、アプリケーションレベルでデバイスを管理することなく、デバイス間で推論リクエストを自動的に分散することで、スループットのスケーリングを簡素化します。

実環境でのパフォーマンス向上#

Ultralytics YOLO モデルで OpenVINO 最適化を実装すると、大幅なパフォーマンス向上が得られます。benchmarks で示されているように、Intel CPU では最大 3 倍高速な推論速度を体験でき、統合 GPU、専用 GPU、NPU を含む Intel のハードウェア範囲全体でさらに優れた高速化が可能です。

たとえば、Intel Xeon CPU上でYOLO26モデルを実行する場合、OpenVINOで最適化されたバージョンは、精度を損なうことなく、画像あたりの推論時間においてPyTorch版を一貫して上回ります。

実践的な実装#

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

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)

まとめ#

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

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

モデルで最適なパフォーマンスを実現するには、設定を調整するだけでは不十分です。アプリケーションの要件を理解し、十分な情報に基づいて判断することが重要です。リアルタイム応答向けに最適化する場合でも、大規模処理のスループットを最大化する場合でも、Ultralytics YOLOモデルとOpenVINOの組み合わせは、高性能なAIソリューションをデプロイするための強力なツールキットを開発者に提供します。

FAQ#

  • Ultralytics YOLOモデルを低レイテンシ向けに最適化するには、次のような主要戦略があります:

    1. デバイスあたり1回の推論: 遅延を最小限に抑えるため、推論をデバイスごとに一度に1回に制限します。
    2. サブデバイスの活用: マルチソケットCPUやマルチタイルGPUなど、レイテンシの増加を最小限に抑えながら複数のリクエストを処理できるデバイスを活用します。
    3. OpenVINOのパフォーマンスヒント: モデルのコンパイル時にOpenVINOのov::LATENCYを使用して、デバイスに依存しない簡素化されたチューニングを行います。

    レイテンシ最適化に関する実践的なヒントについては、ガイドのレイテンシ最適化セクションを参照してください。

  • OpenVINOは、パフォーマンスを犠牲にすることなくデバイスのリソース使用率を最大化することで、Ultralytics YOLOモデルのスループットを向上させます。主なメリットは次のとおりです:

    • パフォーマンスヒント: デバイス間でシンプルかつ高レベルなパフォーマンスチューニングを行えます。
    • 明示的なバッチ処理とストリーム: 高度なパフォーマンス向けにきめ細かなチューニングを行えます。
    • マルチデバイス実行: 推論負荷を自動的に分散し、アプリケーションレベルの管理を簡素化します。

    設定例:

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)

    スループット最適化の詳細については、詳細ガイドのスループット最適化セクションを参照してください。

  • 初回推論のレイテンシを削減するには、次の方法を検討してください:

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

    初回推論のレイテンシ管理に関する詳細な戦略については、初回推論のレイテンシ管理セクションを参照してください。

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

    • レイテンシの最適化: 即時応答を必要とするリアルタイムアプリケーション(例: コンシューマー向けアプリ)に適しています。
    • スループットの最適化: 多数の同時実行推論があり、リソース使用率を最大化するシナリオ(例: 大規模デプロイ)に最適です。

    OpenVINOの高レベルなパフォーマンスヒントとマルチデバイスモードを使用すると、適切なバランスを取るのに役立ちます。具体的な要件に基づいて、適切なOpenVINOパフォーマンスヒントを選択してください。

  • はい、Ultralytics YOLOモデルは非常に汎用性が高く、さまざまなAIフレームワークと統合できます。選択肢には次のものがあります:

    その他の統合については、Ultralytics統合ページをご覧ください。

コメント