En cliquant sur « Accepter tous les cookies », vous acceptez le stockage de cookies sur votre appareil pour améliorer la navigation sur le site, analyser son utilisation et contribuer à nos efforts de marketing. Plus d’infos
Paramètres des cookies
En cliquant sur « Accepter tous les cookies », vous acceptez le stockage de cookies sur votre appareil pour améliorer la navigation sur le site, analyser son utilisation et contribuer à nos efforts de marketing. Plus d’infos
Optimisez la formation et le déploiement des modèlesYOLOv5 d'Ultralytics grâce à DeepSparse de Neural Magic, pour des performances GPU sur les CPU. Réalisez des déploiements YOLOv5 plus rapides et évolutifs.
Vous souhaitez accélérer la formation et le déploiement de votre système de gestion de l'information ? YOLOv5 ? Nous avons ce qu'il vous faut ! Nous vous présentons notre nouveau partenaire, Neural Magic. Neural Magic fournit des outils logiciels qui mettent l'accent sur la performance maximale des modèles et la simplicité du flux de travail. C'est donc tout naturellement que nous nous sommes associés pour offrir une solution qui améliorera encore le processus de déploiement deYOLOv5 .
DeepSparse est le runtime d'inférence CPU de Neural Magic, qui tire parti de la rareté et de l'arithmétique de basse précision des réseaux neuronaux pour offrir des performances exceptionnelles sur le matériel de base. Par exemple, par rapport à la ligne de base du Runtime ONNX , DeepSparse offre une accélération de 5,8 fois pour YOLOv5s s'exécutant sur la même machine !
Pour la première fois, vos charges de travail d'apprentissage profond peuvent répondre aux exigences de performance de la production sans la complexité et les coûts des accélérateurs matériels. En termes simples, DeepSparse vous offre la performance des GPU et la simplicité du logiciel :
Déploiements flexibles : S'exécute de manière cohérente dans le cloud, le centre de données et la périphérie avec n'importe quel fournisseur de matériel
Évolutivité infinie : Effectuez une mise à l'échelle avec Kubernetes standard, verticalement jusqu'à des centaines de cœurs, ou entièrement abstraite avec serverless
Intégration facile : Utilisez des API propres pour intégrer votre modèle dans une application et le surveiller en production
Obtenir des performances GPU sur des CPU de base
DeepSparse tire parti de la sparsité du modèle pour accélérer ses performances.
La sparification par élagage et quantification permet des réductions de l'ordre de grandeur de la taille et du calcul nécessaires à l'exécution d'un réseau tout en maintenant une grande précision. DeepSparse tient compte de la sparsité, en sautant les ajouts multipliés par zéro et en réduisant la quantité de calcul lors d'un passage en avant. Étant donné que l'informatique spartiate est liée à la mémoire, DeepSparse exécute le réseau en profondeur, en divisant le problème en colonnes de Tensor , qui sont des bandes verticales de calcul pouvant être placées dans le cache.
Les réseaux épars avec calcul compressé, exécutés en profondeur dans le cache, permettent à DeepSparse d'offrir des performances GPU sur les CPU !
Créer une version éparse de YOLOv5 entraînée sur des données personnalisées
Le référentiel de modèles open-source de Neural Magic, SparseZoo, contient des points de contrôle pré-sparsifiés de chaque modèle YOLOv5 . Grâce à SparseML, intégré à Ultralytics, vous pouvez affiner un point de contrôle sparse sur vos données à l'aide d'une simple commande CLI
Déployer YOLOv5 avec DeepSparse
Installer DeepSparse
Exécutez ce qui suit pour installer DeepSparse. Nous vous recommandons d'utiliser un environnement virtuel avec Python.
pip install deepsparse[serveryolo,onnxruntime]
Collecte d'un fichier ONNX
DeepSparse accepte un modèle au format ONNX , passé soit comme :
Un chemin local vers un modèle ONNX
Un stub SparseZoo qui identifie un modèle dans le SparseZoo
Nous allons comparer le YOLOv5s dense standard au YOLOv5s élagué-quantifié, identifié par les stubs SparseZoo suivants :
zoo:ultralytics zoo:ultralytics
Déployer un modèle
DeepSparse offre des API pratiques pour intégrer votre modèle dans une application.
Pour essayer les exemples de déploiement ci-dessous, téléchargez une image de l'exemple et enregistrez-la sous le nom de basilica.jpg à l'aide de la commande suivante :
wget -O basilicabasilicajpg
API Python
Les pipelines enveloppent le prétraitement et le post-traitement de sortie autour du runtime, fournissant une interface propre pour ajouter DeepSparse à une application. L'intégration Ultralytics comprend un pipeline prêt à l'emploi qui accepte les images brutes et produit les boîtes de délimitation.
Créer un pipeline et exécuter l'inférence :
from deepsparse import Pipeline
# liste des images dans le système de fichiers local images = [basilica.jpg"]
# exécuter l'inférence sur les images, recevoir les boîtes englobantes + les classes pipeline_outputs = yolo(images=images, iou_thres=0.6, conf_thres=0.001) print(pipeline_outputs)
Si vous exécutez dans le cloud, vous pouvez obtenir une erreur indiquant qu'open-cv ne trouve pas libGL.so.1. L'exécution de la commande suivante sur Ubuntu l'installe :
apt-get install libgl1-mesa-glx
Serveur HTTP
DeepSparse Server fonctionne au-dessus du framework web FastAPI et du serveur web Uvicorn. Avec une simple commande CLI , vous pouvez facilement mettre en place un point de terminaison de service de modèle avec DeepSparse. Le serveur prend en charge n'importe quel pipeline de DeepSparse, y compris la détection d'objets avec YOLOv5, ce qui vous permet d'envoyer des images brutes au point de terminaison et de recevoir les boîtes de délimitation.
Lancer le serveur avec le YOLOv5s élagué-quantifié :
Un exemple de requête, utilisant le paquetage requests de Python:
import requests, json
# liste des images pour l'inférence (fichiers locaux côté client) path = [basilica.jpg'] files = [('request', open(img, 'rb')) for img in path]
# envoyer une requête via HTTP au point de terminaison /predict/from_files url = 'http://0.0.0.0:5543/predict/from_files' resp = requests.post(url=url, files=files)
# la réponse est renvoyée en JSON annotations = json.loads(resp.text) # dictionnaire des résultats d'annotation bounding_boxes = annotations["boxes"] labels = annotations["labels"]
Annoter l'CLI
Vous pouvez également utiliser la commande annotate pour que le moteur enregistre une photo annotée sur le disque. Essayez --source 0 pour annoter le flux de votre webcam en direct !
> Chemin du modèle original : zoo:ultralytics > Taille du lot : 32 > Scénario : sync > Débit (éléments/sec) : 41.9025
Performance dense de DeepSparse
Bien que DeepSparse offre ses meilleures performances avec des modèles clairsemés optimisés, il fonctionne également bien avec le YOLOv5s dense standard.
Au lot 32, DeepSparse atteint 70 images/sec avec le YOLOv5s dense standard—une amélioration des performances de 1,7x par rapport à ORT !
> Chemin du modèle original : zoo:ultralytics > Taille du lot : 1 > Scénario : sync > Débit (éléments/sec) : 48.0921
Performance clairsemée de DeepSparse
Lorsque la sparsité est appliquée au modèle, les gains de performance de DeepSparse par rapport à ONNX Runtime sont encore plus importants.
Au lot 1, DeepSparse atteint 135 images/seconde avec le YOLOv5s élagué et quantifié, soit uneamélioration de performance de 2,8 fois par rapport à ONNX Runtime !
> Chemin du modèle original : zoo:ultralytics > Taille du lot : 1 > Scénario : sync > Débit (éléments/sec) : 134.9468
Étant donné que les instances c6i.8xlarge disposent des instructions VNNI, le débit de DeepSparse peut être augmenté davantage si les poids sont élagués par blocs de 4.
Au lot 1, DeepSparse atteint 180 items/sec avec un YOLOv5s élagué et quantifié en 4 blocs, soit ungain de performance de 3,7 fois par rapport à ONNX Runtime !
Chez Ultralytics, nous nous associons commercialement avec d'autres startups pour nous aider à financer la recherche et le développement de nos formidables outils open-source, comme YOLOv5, afin qu'ils restent gratuits pour tout le monde. Cet article peut contenir des liens d'affiliation vers ces partenaires.