Skip to content

Optimisation de l'inférence OpenVINO pour les modèles Ultralytics YOLO : Un guide complet

OpenVINO Ecosystème

Introduction

Lors du déploiement de modèles d'apprentissage profond, en particulier ceux destinés à la détection d'objets tels que les modèles Ultralytics YOLO , il est crucial d'obtenir des performances optimales. Ce guide approfondit l'exploitation de la boîte à outils OpenVINO d'Intel pour optimiser l'inférence, en se concentrant sur la latence et le débit. Que tu travailles sur des applications grand public ou sur des déploiements à grande échelle, la compréhension et l'application de ces stratégies d'optimisation te permettront de t'assurer que tes modèles fonctionnent efficacement sur divers appareils.

Optimisation de la latence

L'optimisation de la latence est vitale pour les applications qui exigent une réponse immédiate d'un seul modèle à partir d'une seule entrée, ce qui est typique des scénarios de consommation. L'objectif est de minimiser le délai entre l'entrée et le résultat de l'inférence. Cependant, l'obtention d'une faible latence nécessite une attention particulière, notamment lors de l'exécution d'inférences simultanées ou de la gestion de plusieurs modèles.

Stratégies clés pour l'optimisation du temps de latence :

  • Une seule infĂ©rence par appareil : La façon la plus simple d'obtenir une faible latence est de se limiter Ă  une seule infĂ©rence Ă  la fois par appareil. Une concurrence supplĂ©mentaire entraĂ®ne souvent une augmentation du temps de latence.
  • Exploiter les sous-dispositifs : Les appareils tels que les CPU multi-socket ou les GPU multi-tiroirs peuvent exĂ©cuter plusieurs requĂŞtes avec une augmentation minimale de la latence en utilisant leurs sous-dispositifs internes.
  • OpenVINO Conseils de performance : En utilisant OpenVINO's ov::hint::PerformanceMode::LATENCY pour les ov::hint::performance_mode lors de la compilation du modèle simplifie le rĂ©glage des performances, offrant ainsi une approche agnostique des appareils et Ă  l'Ă©preuve du temps.

Gérer la latence de la première inférence :

  • Mise en cache du modèle : pour attĂ©nuer l'impact du chargement du modèle et des temps de compilation sur la latence, utilise la mise en cache du modèle lorsque c'est possible. Pour les scĂ©narios oĂą la mise en cache n'est pas viable, les unitĂ©s centrales offrent gĂ©nĂ©ralement les temps de chargement de modèle les plus rapides.
  • Cartographie du modèle vs. lecture : Pour rĂ©duire les temps de chargement, OpenVINO a remplacĂ© la lecture du modèle par le mappage. Cependant, si le modèle se trouve sur un disque amovible ou un disque rĂ©seau, il faut envisager d'utiliser ov::enable_mmap(false) pour revenir Ă  la lecture.
  • SĂ©lection automatique des appareils : Ce mode commence l'infĂ©rence sur le processeur, et passe Ă  un accĂ©lĂ©rateur une fois qu'il est prĂŞt, ce qui rĂ©duit de façon transparente la latence de la première infĂ©rence.

Optimiser le débit

L'optimisation du débit est cruciale pour les scénarios servant simultanément de nombreuses demandes d'inférence, maximisant l'utilisation des ressources sans sacrifier de manière significative la performance des demandes individuelles.

Approches de l'optimisation du débit :

  1. OpenVINO Indices de performance : Une méthode de haut niveau, à l'épreuve du temps, pour améliorer le débit entre les appareils à l'aide de conseils de performance.
import openvino.properties as props
import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
  1. Mise en lot explicite et flux : Une approche plus granulaire impliquant la mise en lot explicite et l'utilisation de flux pour un réglage avancé des performances.

Concevoir des applications axées sur le débit :

Pour maximiser le débit, les applications doivent :

  • Traite les entrĂ©es en parallèle, en utilisant pleinement les capacitĂ©s de l'appareil.
  • DĂ©compose le flux de donnĂ©es en demandes d'infĂ©rence concurrentes, programmĂ©es pour une exĂ©cution parallèle.
  • Utilise l'API asynchrone avec des rappels pour maintenir l'efficacitĂ© et Ă©viter la famine des appareils.

Exécution multi-appareils :

OpenVINOLe mode multi-appareils du logiciel simplifie la mise à l'échelle du débit en équilibrant automatiquement les demandes d'inférence entre les appareils, sans nécessiter de gestion des appareils au niveau de l'application.

Conclusion

L'optimisation des modèles Ultralytics YOLO pour la latence et le débit avec OpenVINO peut considérablement améliorer les performances de ton application. En appliquant soigneusement les stratégies décrites dans ce guide, les développeurs peuvent s'assurer que leurs modèles fonctionnent efficacement, en répondant aux exigences des différents scénarios de déploiement. N'oublie pas que le choix entre l'optimisation de la latence ou du débit dépend des besoins spécifiques de ton application et des caractéristiques de l'environnement de déploiement.

Pour obtenir des informations techniques plus détaillées et les dernières mises à jour, reporte-toi à la documentationOpenVINO et au référentielUltralytics YOLO . Ces ressources fournissent des guides approfondis, des tutoriels et une assistance communautaire pour t'aider à tirer le meilleur parti de tes modèles d'apprentissage profond.


Pour que tes modèles atteignent des performances optimales, il ne suffit pas d'ajuster les configurations ; il faut comprendre les besoins de ton application et prendre des décisions éclairées. Qu'il s'agisse d'optimiser les réponses en temps réel ou de maximiser le débit pour un traitement à grande échelle, la combinaison des modèles Ultralytics YOLO et OpenVINO offre aux développeurs une puissante boîte à outils pour déployer des solutions d'IA performantes.



Créé le 2024-03-17, Mis à jour le 2024-03-17
Auteurs : glenn-jocher (1)

Commentaires