YOLO Vision 2026:

OpenVINO Inferenzoptimierung für YOLO#

OpenVINO Ecosystem

Einführung#

Wenn du deep learning-Modelle bereitstellst, insbesondere solche für die object detection wie Ultralytics YOLO-Modelle, ist das Erreichen einer optimalen Leistung von entscheidender Bedeutung. Diese Anleitung befasst sich mit der Nutzung des Intel's OpenVINO toolkit zur Optimierung der Inferenz, wobei der Schwerpunkt auf Latenz und Durchsatz liegt. Egal, ob du an Verbraucheranwendungen oder groß angelegten Bereitstellungen arbeitest, das Verständnis und die Anwendung dieser Optimierungsstrategien stellen sicher, dass deine Modelle effizient auf verschiedenen Geräten laufen.

Optimierung auf Latenz#

Die Latenzoptimierung ist unerlässlich für Anwendungen, die eine sofortige Reaktion von einem einzelnen Modell auf eine einzelne Eingabe erfordern, was typisch für Szenarien mit Endverbrauchern ist. Das Ziel ist es, die Verzögerung zwischen Eingabe und Inferenzergebnis zu minimieren. Das Erreichen einer niedrigen Latenz erfordert jedoch sorgfältige Überlegungen, insbesondere bei der Ausführung gleichzeitiger Inferenzen oder der Verwaltung mehrerer Modelle.

Wichtige Strategien zur Latenzoptimierung:#

  • Einzelne Inferenz pro Gerät: Der einfachste Weg zu niedriger Latenz ist die Beschränkung auf eine Inferenz nach der anderen pro Gerät. Zusätzliche Parallelität führt oft zu erhöhter Latenz.
  • Nutzung von Sub-Geräten: Geräte wie Multi-Socket-CPUs oder Multi-Tile-GPUs können mehrere Anfragen mit minimalem Latenzanstieg ausführen, indem sie ihre internen Sub-Geräte nutzen.
  • OpenVINO Performance Hints: Die Verwendung von OpenVINOs ov::LATENCY für die Eigenschaft ov::performance_mode während der Modellkompilierung vereinfacht die Leistungsanpassung und bietet einen geräteunabhängigen und zukunftssicheren Ansatz.

Verwaltung der Latenz bei der ersten Inferenz:#

  • Modell-Caching: Um zu verhindern, dass Lade- und Kompilierzeiten die Latenz beeinträchtigen, nutze nach Möglichkeit Modell-Caching. Für Szenarien, in denen Caching nicht praktikabel ist, bieten CPUs im Allgemeinen die schnellsten Modellladezeiten.
  • Model Mapping vs. Reading: Um die Ladezeiten zu verkürzen, hat OpenVINO das Lesen von Modellen durch Mapping ersetzt. Wenn sich das Modell jedoch auf einem Wechsel- oder Netzwerklaufwerk befindet, erwäge die Verwendung von ov::enable_mmap(false), um wieder zum Lesen zu wechseln.
  • AUTO-Geräteauswahl: Dieser Modus beginnt die Inferenz auf der CPU und wechselt zu einem Beschleuniger, sobald dieser bereit ist, was die Latenz bei der ersten Inferenz nahtlos reduziert.

Optimierung auf Durchsatz#

Die Durchsatzoptimierung ist entscheidend für Szenarien, die zahlreiche Inferenzanfragen gleichzeitig bedienen, und maximiert die resource utilization, ohne die Leistung einzelner Anfragen wesentlich zu beeinträchtigen.

Ansätze zur Durchsatzoptimierung:#

  1. OpenVINO Performance-Hinweise: Eine übergeordnete, zukunftssichere Methode zur Verbesserung des Durchsatzes über Geräte hinweg mithilfe von Performance-Hinweisen.

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. Explizites Batching und Streams: Ein granularerer Ansatz, der explizites Batching und die Verwendung von Streams für fortgeschrittenes Performance-Tuning umfasst.

Gestaltung von durchsatzorientierten Anwendungen:#

Um den Durchsatz zu maximieren, sollten Anwendungen:

  • Eingaben parallel verarbeiten und die Fähigkeiten des Geräts voll ausnutzen.
  • Datenflüsse in gleichzeitige Inferenzanfragen zerlegen, die für eine parallele Ausführung geplant sind.
  • Die Async API mit Callbacks verwenden, um die Effizienz zu wahren und eine Unterauslastung der Geräte zu vermeiden.

Multi-Device-Ausführung:#

Der Multi-Device-Modus von OpenVINO vereinfacht die Skalierung des Durchsatzes, indem Inferenzanfragen automatisch über Geräte hinweg ausgeglichen werden, ohne dass ein Management auf Anwendungsebene erforderlich ist.

Leistungsgewinne in der Praxis#

Die Implementierung von OpenVINO-Optimierungen mit Ultralytics YOLO-Modellen kann zu signifikanten Leistungsverbesserungen führen. Wie in benchmarks gezeigt, können Anwender bis zu 3-mal schnellere Inferenzgeschwindigkeiten auf Intel-CPUs erzielen, wobei auf dem gesamten Hardwarespektrum von Intel, einschließlich integrierter GPUs, dedizierter GPUs und VPUs, noch größere Beschleunigungen möglich sind.

Wenn du beispielsweise YOLO26-Modelle auf Intel Xeon-CPUs ausführst, übertreffen die OpenVINO-optimierten Versionen ihre PyTorch-Gegenstücke in Bezug auf die Inferenzzeit pro Bild durchgehend, ohne Kompromisse bei der accuracy einzugehen.

Praktische Implementierung#

Um dein Ultralytics YOLO-Modell für OpenVINO zu exportieren und zu optimieren, kannst du die export-Funktionalität verwenden:

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

Nach dem Export kannst du die Inferenz mit dem optimierten Modell ausführen:

# 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)

Fazit#

Die Optimierung von Ultralytics YOLO-Modellen auf Latenz und Durchsatz mit OpenVINO kann die Leistung deiner Anwendung erheblich steigern. Durch das sorgfältige Anwenden der in diesem Leitfaden beschriebenen Strategien können Entwickler sicherstellen, dass ihre Modelle effizient laufen und den Anforderungen verschiedener Einsatzszenarien gerecht werden. Denke daran, dass die Wahl zwischen der Optimierung auf Latenz oder Durchsatz von deinen spezifischen Anwendungsanforderungen und den Eigenschaften der Bereitstellungsumgebung abhängt.

Ausführlichere technische Informationen und die neuesten Updates findest du in der OpenVINO documentation und im Ultralytics YOLO repository. Diese Ressourcen bieten tiefgehende Anleitungen, Tutorials und Community-Support, damit du das Beste aus deinen deep learning-Modellen herausholen kannst.


Um sicherzustellen, dass deine Modelle eine optimale Leistung erzielen, geht es nicht nur darum, Konfigurationen anzupassen; es geht darum, die Bedürfnisse deiner Anwendung zu verstehen und fundierte Entscheidungen zu treffen. Egal, ob du für real-time responses optimierst oder den Durchsatz für die groß angelegte Verarbeitung maximierst, die Kombination aus Ultralytics YOLO-Modellen und OpenVINO bietet Entwicklern ein leistungsstarkes Toolkit zur Bereitstellung von Hochleistungs-KI-Lösungen.

FAQ#

  • Die Optimierung von Ultralytics YOLO-Modellen auf niedrige Latenz umfasst mehrere Schlüsselstrategien:

    1. Einzelne Inferenz pro Gerät: Begrenze Inferenzen auf eine nach der anderen pro Gerät, um Verzögerungen zu minimieren.
    2. Nutzung von Sub-Geräten: Nutze Geräte wie Multi-Socket-CPUs oder Multi-Tile-GPUs, die mehrere Anfragen mit minimalem Latenzanstieg verarbeiten können.
    3. OpenVINO Performance Hints: Verwende OpenVINOs ov::LATENCY während der Modellkompilierung für eine vereinfachte, geräteunabhängige Anpassung.

    Weitere praktische Tipps zur Latenzoptimierung findest du im Abschnitt Latency Optimization section unseres Leitfadens.

  • OpenVINO verbessert den Durchsatz von Ultralytics YOLO-Modellen durch Maximierung der Ressourcenauslastung des Geräts, ohne die Leistung zu beeinträchtigen. Zu den Hauptvorteilen gehören:

    • Performance-Hinweise: Einfaches, übergeordnetes Performance-Tuning über Geräte hinweg.
    • Explizites Batching und Streams: Feinabstimmung für fortgeschrittene Leistung.
    • Multi-Device-Ausführung: Automatisierter Lastausgleich für Inferenzen, was das Management auf Anwendungsebene erleichtert.

    Beispielkonfiguration:

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)

    Erfahre mehr über die Durchsatzoptimierung im Abschnitt Throughput Optimization section unseres ausführlichen Leitfadens.

  • Um die Latenz bei der ersten Inferenz zu reduzieren, beachte diese Praktiken:

    1. Modell-Caching: Nutze Modell-Caching, um Lade- und Kompilierzeiten zu verringern.
    2. Model Mapping vs. Reading: Verwende standardmäßig das Mapping (ov::enable_mmap(true)), wechsle aber zum Lesen (ov::enable_mmap(false)), wenn sich das Modell auf einem Wechsel- oder Netzwerklaufwerk befindet.
    3. AUTO-Geräteauswahl: Nutze den AUTO-Modus, um mit der CPU-Inferenz zu starten und nahtlos auf einen Beschleuniger überzugehen.

    Ausführliche Strategien zur Handhabung der Latenz bei der ersten Inferenz findest du im Abschnitt Managing First-Inference Latency section.

  • Das Ausbalancieren von Latenz- und Durchsatzoptimierung erfordert das Verständnis deiner Anwendungsanforderungen:

    • Latenzoptimierung: Ideal für Echtzeitanwendungen, die sofortige Reaktionen erfordern (z. B. Anwendungen für Endverbraucher).
    • Durchsatzoptimierung: Am besten für Szenarien mit vielen gleichzeitigen Inferenzen, um die Ressourcennutzung zu maximieren (z. B. Großprojekte).

    Die Verwendung von OpenVINOs High-Level-Leistungshinweisen und Multigerätemodi kann helfen, das richtige Gleichgewicht zu finden. Wähle die geeigneten OpenVINO performance hints basierend auf deinen spezifischen Anforderungen.

  • Ja, Ultralytics YOLO-Modelle sind äußerst vielseitig und können in verschiedene KI-Frameworks integriert werden. Optionen sind unter anderem:

    Entdecke weitere Integrationen auf der Ultralytics Integrations page.

Kommentare