Zum Inhalt springen

OpenVINO Inferenzoptimierung für YOLO

OpenVINO Ökosystem

Einführung

Bei der Bereitstellung von Deep-Learning-Modellen, insbesondere solchen für die Objekterkennung wie Ultralytics YOLO-Modelle, ist das Erreichen einer optimalen Leistung entscheidend. Dieser Leitfaden befasst sich mit der Nutzung des OpenVINO-Toolkits von Intel zur Optimierung der Inferenz, wobei der Schwerpunkt auf Latenz und Durchsatz liegt. Unabhängig davon, ob Sie an Anwendungen für Endverbraucher oder an groß angelegten Bereitstellungen arbeiten, stellt das Verständnis und die Anwendung dieser Optimierungsstrategien sicher, dass Ihre Modelle effizient auf verschiedenen Geräten laufen.

Optimierung für Latenz

Die Latenzoptimierung ist entscheidend für Anwendungen, die eine sofortige Reaktion von einem einzelnen Modell auf eine einzelne Eingabe erfordern, was typisch für Verbraucherszenarien ist. Ziel ist es, die Verzögerung zwischen Eingabe und Inferenz-Ergebnis zu minimieren. Das Erreichen einer geringen Latenz erfordert jedoch eine sorgfältige Abwägung, insbesondere beim Ausführen von gleichzeitigen Inferenzprozessen oder beim Verwalten mehrerer Modelle.

Wichtige Strategien zur Latenzoptimierung:

  • Einzelne Inferenz pro Gerät: Der einfachste Weg, um eine geringe Latenz zu erreichen, ist die Beschränkung auf eine Inferenz pro Gerät. Zusätzliche Parallelität führt oft zu erhöhter Latenz.
  • Nutzung von Sub-Devices: Geräte wie Multi-Socket-CPUs oder Multi-Tile-GPUs können mehrere Anfragen mit minimaler Latenzerhöhung ausführen, indem sie ihre internen Sub-Devices nutzen.
  • OpenVINO Leistungshinweise: Nutzung von OpenVINOs ov::hint::PerformanceMode::LATENCY für die ov::hint::performance_mode Die Eigenschaft während der Modellkompilierung vereinfacht die Leistungsoptimierung und bietet einen geräteunabhängigen und zukunftssicheren Ansatz.

Verwaltung der First-Inference-Latenz:

  • Modell-Caching: Um die Lade- und Kompilierzeiten des Modells zu reduzieren, die die Latenz beeinträchtigen, verwenden Sie nach Möglichkeit Modell-Caching. In Szenarien, in denen Caching nicht praktikabel ist, bieten CPUs im Allgemeinen die schnellsten Modellladezeiten.
  • Modell-Mapping vs. Lesen: Um die Ladezeiten zu verkürzen, hat OpenVINO das Lesen von Modellen durch Mapping ersetzt. Wenn sich das Modell jedoch auf einem Wechsel- oder Netzlaufwerk befindet, sollten Sie die Verwendung von ov::enable_mmap(false) 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, in denen zahlreiche Inferenzanfragen gleichzeitig bedient werden, wodurch die Ressourcenauslastung maximiert wird, ohne die Leistung einzelner Anfragen wesentlich zu beeinträchtigen.

Ansätze zur Durchsatzoptimierung:

  1. OpenVINO Performance Hints: Eine zukunftssichere High-Level-Methode zur Steigerung des Durchsatzes über verschiedene Geräte hinweg mithilfe von Performance Hints.

    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 für erweitertes Performance-Tuning beinhaltet.

Entwurf durchsatzorientierter Anwendungen:

Um den Durchsatz zu maximieren, sollten Anwendungen:

  • Verarbeiten Sie Eingaben parallel und nutzen Sie die Möglichkeiten des Geräts voll aus.
  • Zerlegen Sie den Datenfluss in gleichzeitige Inferenzanforderungen, die für die parallele Ausführung geplant sind.
  • Nutzen Sie die Async API mit Callbacks, um die Effizienz aufrechtzuerhalten und eine Geräteauslastung zu vermeiden.

Multi-Device Execution:

Der Multi-Device-Modus von OpenVINO vereinfacht die Skalierung des Durchsatzes, indem er Inferenzanfragen automatisch auf verschiedene Geräte verteilt, ohne dass eine Geräteverwaltung auf Anwendungsebene erforderlich ist.

Reale Leistungsgewinne

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

Wenn YOLOv8-Modelle beispielsweise auf Intel Xeon CPUs ausgeführt werden, übertreffen die OpenVINO-optimierten Versionen ihre PyTorch-Pendants in Bezug auf die Inferenzzeit pro Bild konstant, ohne Kompromisse bei der Genauigkeit einzugehen.

Praktische Implementierung

Um Ihr Ultralytics YOLO-Modell für OpenVINO zu exportieren und zu optimieren, können Sie die Export-Funktionalität verwenden:

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

Nach dem Export können Sie die Inferenz mit dem optimierten Modell ausführen:

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

Fazit

Die Optimierung von Ultralytics YOLO Modellen für Latenz und Durchsatz mit OpenVINO kann die Leistung Ihrer Anwendung erheblich verbessern. Durch die sorgfältige Anwendung der in diesem Leitfaden beschriebenen Strategien können Entwickler sicherstellen, dass ihre Modelle effizient laufen und die Anforderungen verschiedener Einsatzszenarien erfüllen. Die Wahl zwischen der Optimierung für Latenz oder Durchsatz hängt von Ihren spezifischen Anwendungsanforderungen und den Eigenschaften der Einsatzumgebung ab.

Für detailliertere technische Informationen und die neuesten Updates konsultieren Sie bitte die OpenVINO-Dokumentation und das Ultralytics YOLO Repository. Diese Ressourcen bieten ausführliche Anleitungen, Tutorials und Community-Support, damit Sie Ihre Deep-Learning-Modelle optimal nutzen können.


Sicherzustellen, dass Ihre Modelle eine optimale Leistung erzielen, bedeutet mehr als nur das Optimieren von Konfigurationen; es geht darum, die Anforderungen Ihrer Anwendung zu verstehen und fundierte Entscheidungen zu treffen. Ob Sie nun für Echtzeitreaktionen optimieren oder den Durchsatz für die groß angelegte Verarbeitung maximieren, die Kombination aus Ultralytics YOLO-Modellen und OpenVINO bietet Entwicklern ein leistungsstarkes Toolkit für die Bereitstellung von hochleistungsfähigen KI-Lösungen.

FAQ

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

Die Optimierung von Ultralytics YOLO Modellen für niedrige Latenz umfasst mehrere Schlüsselstrategien:

  1. Einzelne Inferenz pro Gerät: Beschränken Sie die Inferenz auf jeweils eine pro Gerät, um Verzögerungen zu minimieren.
  2. Nutzung von Sub-Devices: Nutzen Sie Geräte wie Multi-Socket-CPUs oder Multi-Tile-GPUs, die mehrere Anfragen mit minimaler Latenzerhöhung verarbeiten können.
  3. OpenVINO Leistungshinweise: OpenVINOs verwenden ov::hint::PerformanceMode::LATENCY während der Modellkompilierung für eine vereinfachte, geräteunabhängige Feinabstimmung.

Weitere praktische Tipps zur Optimierung der Latenz finden Sie im Abschnitt Latenzoptimierung in unserem Leitfaden.

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

OpenVINO verbessert den Durchsatz von Ultralytics YOLO Modellen, indem es die Geräteressourcenauslastung maximiert, ohne die Leistung zu beeinträchtigen. Zu den Hauptvorteilen gehören:

  • Performance-Hinweise: Einfache, allgemeine Leistungsoptimierung über verschiedene Geräte hinweg.
  • Explizites Batching und Streams: Feineinstellung für erweiterte Performance.
  • Multi-Device Execution: Automatisierter Inferenz-Lastausgleich, der die Anwendungsverwaltung vereinfacht.

Beispielkonfiguration:

import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)

Erfahren Sie mehr über die Durchsatzoptimierung im Abschnitt zur Durchsatzoptimierung in unserem ausführlichen Leitfaden.

Was ist die beste Vorgehensweise, um die Latenz der ersten Inferenz in OpenVINO zu reduzieren?

Um die Latenz bei der ersten Inferenz zu reduzieren, sollten Sie folgende Vorgehensweisen berücksichtigen:

  1. Modell-Caching: Verwenden Sie Modell-Caching, um die Lade- und Kompilierzeiten zu verringern.
  2. Modell-Mapping vs. Lesen: Verwenden Sie Mapping (ov::enable_mmap(true)) standardmäßig, aber wechseln Sie zum Lesen (ov::enable_mmap(false)), wenn sich das Modell auf einem Wechseldatenträger oder einem Netzlaufwerk befindet.
  3. AUTO Geräteauswahl: Verwenden Sie den AUTO-Modus, um mit der CPU-Inferenz zu beginnen und nahtlos zu einem Beschleuniger überzugehen.

Detaillierte Strategien zur Verwaltung der First-Inference-Latenz finden Sie im Abschnitt Verwaltung der First-Inference-Latenz.

Wie optimiere ich Latenz und Durchsatz mit Ultralytics YOLO und OpenVINO im Gleichgewicht?

Die Optimierung von Latenz und Durchsatz erfordert ein Verständnis der Anwendungsanforderungen:

  • Latenzoptimierung: Ideal für Echtzeitanwendungen, die sofortige Reaktionen erfordern (z. B. Apps für Endverbraucher).
  • Durchsatzoptimierung: Am besten geeignet für Szenarien mit vielen gleichzeitigen Inferenzvorgängen, um die Ressourcennutzung zu maximieren (z. B. großflächige Bereitstellungen).

Die Verwendung der High-Level-Performance-Hinweise und Multi-Device-Modi von OpenVINO kann helfen, das richtige Gleichgewicht zu finden. Wählen Sie die entsprechenden OpenVINO Performance hints basierend auf Ihren spezifischen Anforderungen.

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

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

Weitere Integrationen finden Sie auf der Ultralytics Integrationsseite.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 4 Monaten

Kommentare