Optimierung der OpenVINO-Inferenz für YOLO#
Einleitung#
Bei der Bereitstellung von Deep-Learning-Modellen, insbesondere von Modellen zur Objekterkennung wie den Ultralytics YOLO-Modellen, ist eine optimale Leistung entscheidend. Dieser Leitfaden zeigt, wie du das OpenVINO-Toolkit von Intel nutzen kannst, um die Inferenz mit Fokus auf Latenz und Durchsatz zu optimieren. Unabhängig davon, ob du Anwendungen für Endverbraucher oder groß angelegte Bereitstellungen entwickelst: Wenn du diese Optimierungsstrategien verstehst und anwendest, laufen deine Modelle auf verschiedenen Geräten effizient.
Optimierung der Latenz#
Die Latenzoptimierung ist für Anwendungen entscheidend, die als Reaktion auf eine einzelne Eingabe eines einzelnen Modells sofortige Ergebnisse benötigen, wie es typischerweise bei Anwendungen für Endverbraucher der Fall ist. Ziel ist es, die Verzögerung zwischen Eingabe und In یاferenzresultat zu minimieren. Eine niedrige Latenz zu erreichen, erfordert jedoch eine sorgfältige Abwägung, insbesondere wenn Inferenzen gleichzeitig ausgeführt oder mehrere Modelle verwaltet werden.
Wichtige Strategien zur Latenzoptimierung#
- Eine Inferenz pro Gerät: Die einfachste Möglichkeit, eine niedrige Latenz zu erreichen, besteht darin, die Verarbeitung auf eine Inferenz gleichzeitig pro Gerät zu begrenzen. Eine zusätzliche Parallelität führt häufig zu einer höheren Latenz.
- Nutzung von Untergeräten: Geräte wie CPUs mit mehreren Sockeln oder GPUs mit mehreren Kacheln können mehrere Anfragen mit minimalem Latenzanstieg ausführen, indem sie ihre internen Untergeräte nutzen.
- OpenVINO-Leistungshinweise: Die Verwendung von
ov::LATENCYvon OpenVINO für die Eigenschaftov::performance_modewährend der Modellkompilierung vereinfacht die Leistungsoptimierung und bietet einen geräteunabhängigen, zukunftssicheren Ansatz.
Umgang mit der Latenz der ersten Inferenz#
- Modell-Caching: Um die Auswirkungen von Lade- und Kompilierungszeiten des Modells auf die Latenz zu verringern, solltest du nach Möglichkeit Modell-Caching verwenden. Wenn Caching nicht möglich ist, bieten CPUs im Allgemeinen die schnellsten Ladezeiten für Modelle.
- Modellzuordnung gegenüber dem Einlesen: Um Ladezeiten zu verkürzen, hat OpenVINO das Einlesen von Modellen durch die Zuordnung in den Speicher ersetzt. Wenn sich das Modell jedoch auf einem Wechseldatenträger oder Netzlaufwerk befindet, solltest du
ov::enable_mmap(false)verwenden, um wieder zum Einlesen zu wechseln. - AUTO-Geräteauswahl: Dieser Modus startet die Inferenz auf der CPU und wechselt zu einem Beschleuniger, sobald dieser bereit ist, wodurch die Latenz bei der ersten Inferenz nahtlos reduziert wird.
Optimierung des Durchsatzes#
Die Durchsatzoptimierung ist entscheidend für Szenarien, in denen zahlreiche Inferenzanfragen gleichzeitig verarbeitet werden. Dabei wird die Ressourcennutzung maximiert, ohne die Leistung einzelner Anfragen wesentlich zu beeinträchtigen.
Ansätze zur Durchsatzoptimierung#
-
OpenVINO-Leistungshinweise: Eine übergeordnete, zukunftssichere Methode zur Steigerung des Durchsatzes auf verschiedenen Geräten mithilfe von Leistungshinweisen.
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) -
Explizite Stapelverarbeitung und Datenströme: Ein detaillierterer Ansatz, der explizite Stapelverarbeitung und die Verwendung von Datenströmen für eine fortgeschrittene Leistungsoptimierung umfasst.
Entwurf von durchsatzorientierten Anwendungen#
Um den Durchsatz zu maximieren, sollten Anwendungen:
- Eingaben parallel verarbeiten und die Fähigkeiten des Geräts vollständig nutzen.
- Den Datenfluss in gleichzeitig ausgeführte Inferenzanfragen aufteilen, die zur parallelen Ausführung eingeplant werden.
- Die Async API mit Rückruffunktionen verwenden, um die Effizienz aufrechtzuerhalten und eine Unterauslastung des Geräts zu vermeiden.
Ausführung auf mehreren Geräten#
Der Modus für mehrere Geräte von OpenVINO vereinfacht die Skalierung des Durchsatzes, indem Inferenzanfragen automatisch auf die Geräte verteilt werden, ohne dass die Anwendung die Geräte verwalten muss.
Leistungssteigerungen in der Praxis#
Das Implementieren von OpenVINO-Optimierungen mit Ultralytics YOLO-Modellen kann erhebliche Leistungsverbesserungen bringen. Wie in den benchmarks gezeigt wird, kannst du eine bis zu dreimal schnellere Inferenzgeschwindigkeit auf Intel-CPUs erzielen, wobei auf der gesamten Hardware-Palette von Intel, einschließlich integrierter GPUs, dedizierter GPUs und NPUs, noch größere Beschleunigungen möglich sind.
Wenn beispielsweise YOLO26-Modelle auf Intel Xeon-CPUs ausgeführt werden, sind die für OpenVINO optimierten Versionen bei der Inferenzzeit pro Bild durchgehend schneller als ihre PyTorch-Gegenstücke, ohne Einbußen bei der Genauigkeit.
Praktische Implementierung#
Um dein Ultralytics YOLO-Modell für OpenVINO zu exportieren und zu optimieren, kannst du die Exportfunktion 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 precisionNach dem Export kannst du mit dem optimierten Modell Inferenzen 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 für Latenz und Durchsatz mit OpenVINO kann die Leistung deiner Anwendung deutlich 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: Ob du für Latenz oder Durchsatz optimierst, hängt von den Anforderungen deiner konkreten Anwendung und den Eigenschaften der Bereitstellungsumgebung ab.
Ausführlichere technische Informationen und aktuelle Neuigkeiten findest du in der OpenVINO-Dokumentation und im Ultralytics YOLO-Repository. Diese Ressourcen bieten ausführliche Anleitungen, Tutorials und Unterstützung durch die Community, damit du das Beste aus deinen Deep-Learning-Modellen herausholen kannst.
Um eine optimale Leistung deiner Modelle sicherzustellen, reicht es nicht aus, lediglich Konfigurationen anzupassen. Du musst die Anforderungen deiner Anwendung verstehen und fundierte Entscheidungen treffen. Unabhängig davon, ob du für Echtzeitreaktionen optimierst oder den Durchsatz bei umfangreicher Verarbeitung maximierst: Die Kombination aus Ultralytics YOLO-Modellen und OpenVINO bietet Entwicklern ein leistungsfähiges Toolkit für die Bereitstellung leistungsstarker KI-Lösungen.
FAQ#
Die Optimierung von Ultralytics YOLO-Modellen für eine niedrige Latenz umfasst mehrere wichtige Strategien:
- Eine Inferenz pro Gerät: Begrenze Inferenzen auf eine gleichzeitig pro Gerät, um Verzögerungen zu minimieren.
- Nutzung von Untergeräten: Nutze Geräte wie CPUs mit mehreren Sockeln oder GPUs mit mehreren Kacheln, die mehrere Anfragen mit minimalem Latenzanstieg verarbeiten können.
- OpenVINO-Leistungshinweise: Verwende
ov::LATENCYvon OpenVINO während der Modellkompilierung, um eine vereinfachte, geräteunabhängige Optimierung zu ermöglichen.
Weitere praktische Tipps zur Latenzoptimierung findest du im Abschnitt Latenzoptimierung unseres Leitfadens.
OpenVINO steigert den Durchsatz von Ultralytics YOLO-Modellen, indem die Ressourcen des Geräts optimal genutzt werden, ohne die Leistung zu beeinträchtigen. Zu den wichtigsten Vorteilen gehören:
- Leistungshinweise: Einfache, übergeordnete Leistungsoptimierung auf verschiedenen Geräten.
- Explizite Stapelverarbeitung und Datenströme: Feinabstimmung für eine fortgeschrittene Leistungsoptimierung.
- Ausführung auf mehreren Geräten: Automatischer Ausgleich der Inferenzlast, wodurch die Verwaltung auf Anwendungsebene vereinfacht wird.
Beispielkonfiguration:
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)Weitere Informationen zur Durchsatzoptimierung findest du im Abschnitt Durchsatzoptimierung unseres ausführlichen Leitfadens.
Um die Latenz bei der ersten Inferenz zu verringern, solltest du die folgenden Maßnahmen in Betracht ziehen:
- Modell-Caching: Verwende Modell-Caching, um Lade- und Kompilierungszeiten zu verkürzen.
- Modellzuordnung gegenüber dem Einlesen: Verwende standardmäßig die Zuordnung (
ov::enable_mmap(true)), wechsle jedoch zum Einlesen (ov::enable_mmap(false)), wenn sich das Modell auf einem Wechseldatenträger oder Netzlaufwerk befindet. - AUTO-Geräteauswahl: Nutze den AUTO-Modus, um mit der Inferenz auf der CPU zu beginnen und nahtlos zu einem Beschleuniger zu wechseln.
Detaillierte Strategien zur Verwaltung der Latenz bei der ersten Inferenz findest du im Abschnitt Verwaltung der Latenz bei der ersten Inferenz.
Um Latenz und Durchsatz ausgewogen zu optimieren, musst du die Anforderungen deiner Anwendung verstehen:
- Latenzoptimierung: Ideal für Echtzeitanwendungen, die sofortige Antworten erfordern, beispielsweise Anwendungen für Endverbraucher.
- Durchsatzoptimierung: Optimal für Szenarien mit vielen gleichzeitig ausgeführten Inferenzen, bei denen die Ressourcennutzung maximiert werden soll, beispielsweise groß angelegte Bereitstellungen.
Die übergeordneten Leistungshinweise und Modi für mehrere Geräte von OpenVINO können dabei helfen, das richtige Gleichgewicht zu finden. Wähle die geeigneten OpenVINO-Leistungshinweise anhand deiner konkreten Anforderungen aus.
Ja, Ultralytics YOLO-Modelle sind sehr vielseitig und können in verschiedene KI-Frameworks integriert werden. Zu den Optionen gehören:
- TensorRT: Zur Optimierung für NVIDIA-GPUs findest du weitere Informationen im Integrationsleitfaden für TensorRT.
- CoreML: Für Apple-Geräte findest du weitere Informationen in unseren Anweisungen zum CoreML-Export.
- LiteRT.js: Für Web- und Node.js-Anwendungen findest du weitere Informationen im Integrationsleitfaden für LiteRT und in der Web-Laufzeitumgebung von LiteRT.js.
Weitere Integrationen findest du auf der Ultralytics-Integrationsseite.