Optimisation de l'inférence OpenVINO pour les modèles Ultralytics YOLO : Un guide complet
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 lesov::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 :
- 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)
- 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.