OpenVINO-Inferenzoptimierung für YOLO

OpenVINO Ecosystem

Einführung

Beim Bereitstellen von Deep Learning-Modellen, insbesondere solchen für die Objekterkennung wie Ultralytics YOLO-Modellen, ist eine optimale Leistung entscheidend. Dieser Leitfaden befasst sich mit der Nutzung des Intel OpenVINO-Toolkits zur Optimierung der Inferenz, wobei der Schwerpunkt auf Latenz und Durchsatz liegt. Egal, ob du an Endverbraucheranwendungen 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 für Latenz

Die Latenzoptimierung ist wichtig für Anwendungen, die eine sofortige Reaktion von einem einzelnen Modell bei einer einzelnen Eingabe erfordern, wie es typischerweise bei Endverbraucherszenarien der Fall ist. Das Ziel ist es, die Verzögerung zwischen Eingabe und Inferenzergebnis zu minimieren. Das Erreichen einer niedrigen Latenz erfordert jedoch eine sorgfältige Abwägung, insbesondere wenn gleichzeitige Inferenzen ausgeführt oder mehrere Modelle verwaltet werden.

Hauptstrategien für die Latenzoptimierung:

  • Einzelne Inferenz pro Gerät: Der einfachste Weg, eine niedrige Latenz zu erreichen, besteht darin, die Inferenz auf eine pro Gerät zu beschränken. Zusätzliche Nebenläufigkeit führt oft zu einer erhöhten Latenz.
  • Nutzung von Untergeräten: Geräte wie Multi-Socket-CPUs oder Multi-Tile-GPUs können mehrere Anfragen mit minimalem Latenzanstieg ausführen, indem sie ihre internen Untergeräte nutzen.
  • OpenVINO-Leistungshinweise: Die Verwendung von OpenVINO ov::LATENCY für die Eigenschaft ov::performance_mode während der Modellkompilierung vereinfacht die Leistungsoptimierung und bietet einen geräteunabhängigen und zukunftssicheren Ansatz.

Verwaltung der Latenz der ersten Inferenz:

  • Modell-Caching: Um zu verhindern, dass Modelllade- und Kompilierungszeiten die Latenz beeinträchtigen, verwende nach Möglichkeit Modell-Caching. Für Szenarien, in denen Caching nicht praktikabel ist, bieten CPUs im Allgemeinen die schnellsten Modellladezeiten.
  • Modell-Mapping vs. Lesen: Um Ladezeiten zu reduzieren, hat OpenVINO das Lesen des Modells durch Mapping ersetzt. Wenn sich das Modell jedoch auf einem Wechseldatenträger oder Netzlaufwerk befindet, solltest du ov::enable_mmap(false) verwenden, um wieder zum Lesen zurückzukehren.
  • AUTO-Geräteauswahl: Dieser Modus beginnt die Inferenz auf der CPU und wechselt zu einem Beschleuniger, sobald dieser bereit ist, wodurch die Latenz der ersten Inferenz nahtlos reduziert wird.

Optimierung für Durchsatz

Die Durchsatzoptimierung ist entscheidend für Szenarien, die zahlreiche Inferenzanfragen gleichzeitig bedienen, um die Ressourcenauslastung zu maximieren, ohne die Leistung einzelner Anfragen wesentlich zu beeinträchtigen.

Ansätze zur Durchsatzoptimierung:

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

    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 detaillierterer Ansatz, der explizites Batching und die Verwendung von Streams zur fortgeschrittenen Leistungsoptimierung beinhaltet.

Entwurf von durchsatzorientierten Anwendungen:

Um den Durchsatz zu maximieren, sollten Anwendungen:

  • Eingaben parallel verarbeiten und die Fähigkeiten des Geräts voll ausnutzen.
  • Den Datenfluss in gleichzeitige Inferenzanfragen zerlegen, die für eine parallele Ausführung geplant sind.
  • Die Async API mit Callbacks nutzen, um die Effizienz aufrechtzuerhalten und eine Ressourcenknappheit des Geräts zu vermeiden.

Multi-Geräte-Ausführung:

Der Multi-Geräte-Modus von OpenVINO vereinfacht die Skalierung des Durchsatzes, indem er Inferenzanfragen automatisch über Geräte hinweg ausbalanciert, ohne dass eine geräteübergreifende Verwaltung auf Anwendungsebene erforderlich ist.

Leistungssteigerungen in der Praxis

Die Implementierung von OpenVINO-Optimierungen bei Ultralytics YOLO-Modellen kann zu signifikanten Leistungsverbesserungen führen. Wie in den Benchmarks gezeigt, können Benutzer bis zu 3x schnellere Inferenzgeschwindigkeiten auf Intel-CPUs erzielen, wobei noch größere Beschleunigungen über das gesamte Hardware-Spektrum von Intel hinweg möglich sind, einschließlich integrierter GPUs, dedizierter GPUs und VPUs.

Wenn du beispielsweise YOLOv8-Modelle auf Intel Xeon-CPUs ausführst, übertreffen die OpenVINO-optimierten Versionen ihre PyTorch-Gegenstücke in Bezug auf die Inferenzzeit pro Bild konsistent, ohne dabei die Genauigkeit zu beeinträchtigen.

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", half=True)  # 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 with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)

Fazit

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

Für detailliertere technische Informationen und die neuesten Updates verweisen wir auf die OpenVINO-Dokumentation und das Ultralytics YOLO-Repository. Diese Ressourcen bieten tiefgehende Anleitungen, Tutorials und Community-Unterstützung, damit du das Beste aus deinen Deep Learning-Modellen herausholen kannst.


Die Sicherstellung einer optimalen Modellleistung bedeutet nicht nur, Konfigurationen anzupassen; es geht darum, die Bedürfnisse deiner Anwendung zu verstehen und informierte Entscheidungen zu treffen. Egal, ob du auf Echtzeitreaktionen optimierst oder den Durchsatz für groß angelegte Verarbeitungen maximierst, die Kombination von Ultralytics YOLO-Modellen und OpenVINO bietet Entwicklern ein leistungsstarkes Toolkit für die Bereitstellung hochperformanter KI-Lösungen.

FAQ

Wie optimiere ich Ultralytics YOLO-Modelle für eine niedrige Latenz mit OpenVINO?

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

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

Für weitere praktische Tipps zur Latenzoptimierung, schau dir den Abschnitt Latenzoptimierung in unserem Leitfaden an.

Warum sollte ich OpenVINO zur Optimierung des Durchsatzes von Ultralytics YOLO verwenden?

OpenVINO verbessert den Durchsatz von Ultralytics YOLO-Modellen, indem es die Ressourcenauslastung des Geräts maximiert, ohne die Leistung zu opfern. Zu den Hauptvorteilen gehören:

  • Leistungshinweise: Einfache, übergeordnete Leistungsoptimierung über Geräte hinweg.
  • Explizites Batching und Streams: Feinabstimmung für fortgeschrittene Leistung.
  • Multi-Geräte-Ausführung: Automatischer Lastausgleich bei der Inferenz, was die Verwaltung 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 Durchsatzoptimierung in unserem ausführlichen Leitfaden.

Was ist die beste Praxis zur Reduzierung der Latenz der ersten Inferenz in OpenVINO?

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

  1. Modell-Caching: Nutze Modell-Caching, um Lade- und Kompilierungszeiten zu verkürzen.
  2. Modell-Mapping vs. Lesen: Verwende standardmäßig Mapping (ov::enable_mmap(true)), wechsle aber zum Lesen (ov::enable_mmap(false)), falls sich das Modell auf einem Wechseldatenträger oder Netzlaufwerk befindet.
  3. AUTO-Geräteauswahl: Nutze den AUTO-Modus, um mit der CPU-Inferenz zu starten und nahtlos auf einen Beschleuniger überzugehen.

Detaillierte Strategien zum Management der Latenz der ersten Inferenz findest du im Abschnitt Management der Latenz der ersten Inferenz.

Wie balanciere ich die Optimierung für Latenz und Durchsatz mit Ultralytics YOLO und OpenVINO?

Die Balance zwischen Latenz- und Durchsatzoptimierung erfordert ein Verständnis deiner Anwendungsanforderungen:

  • Latenzoptimierung: Ideal für Echtzeitanwendungen, die sofortige Reaktionen erfordern (z. B. Endverbraucher-Apps).
  • Durchsatzoptimierung: Am besten für Szenarien mit vielen gleichzeitigen Inferenzen, wobei die Ressourcennutzung maximiert wird (z. B. groß angelegte Bereitstellungen).

Die Verwendung der übergeordneten Leistungshinweise und Multi-Geräte-Modi von OpenVINO kann helfen, die richtige Balance zu finden. Wähle die passenden OpenVINO-Leistungshinweise basierend auf deinen spezifischen Anforderungen.

Kann ich Ultralytics YOLO-Modelle mit anderen KI-Frameworks außer OpenVINO verwenden?

Ja, Ultralytics YOLO-Modelle sind äußerst vielseitig und können in verschiedene KI-Frameworks integriert werden. Zu den Optionen gehören:

Entdecke weitere Integrationen auf der Ultralytics-Integrationsseite.

Kommentare