Déploie Ultralytics YOLOv5 avec DeepSparse de Neural Magic pour des performances de classe GPU sur CPU
Booste l'entraînement et le déploiement de ton modèle Ultralytics YOLOv5 avec DeepSparse de Neural Magic pour obtenir des performances de classe GPU sur CPU. Réalise des déploiements YOLOv5 plus rapides et scalables.

Tu souhaites accélérer l'entraînement et le déploiement de tes modèles YOLOv5 ? On est là pour t'aider ! Voici notre tout nouveau partenaire, Neural Magic. Comme Neural Magic propose des outils logiciels qui mettent l'accent sur des performances de modèle optimales et une grande simplicité de flux de travail, il est tout naturel que nous nous soyons associés pour offrir une solution visant à améliorer encore davantage le processus de déploiement de YOLOv5.
DeepSparse est l'environnement d'exécution d'inférence CPU de Neural Magic. Il tire parti de la sparsité et de l'arithmétique basse précision au sein des réseaux de neurones pour offrir des performances exceptionnelles sur du matériel courant. Par exemple, par rapport à la référence ONNX Runtime, DeepSparse offre une accélération de 5,8x pour YOLOv5s sur la même machine !

Pour la première fois, tes charges de travail de deep learning peuvent répondre aux exigences de performance de la production sans la complexité et les coûts des accélérateurs matériels. Pour faire simple, DeepSparse t'offre les performances des GPU et la simplicité du logiciel :
- Déploiements flexibles : Exécute tes modèles de manière cohérente sur le cloud, les centres de données et en périphérie (edge), quel que soit le fournisseur matériel.
- Évolutivité infinie : Monte en charge avec Kubernetes standard, verticalement jusqu'à des centaines de cœurs, ou via une abstraction totale avec le serverless.
- Intégration facile : Utilise des API propres pour intégrer ton modèle dans une application et le surveiller en production.
Link to this sectionAtteins des performances de niveau GPU sur des CPU courants#
DeepSparse tire parti de la sparsité du modèle pour obtenir son gain de performance.
La sparsification par élagage (pruning) et quantification permet de réduire d'un ordre de grandeur la taille et la puissance de calcul nécessaires à l'exécution d'un réseau, tout en maintenant une précision élevée. DeepSparse est conscient de la sparsité, sautant les multiplications-additions par zéro et réduisant la quantité de calcul lors d'une passe avant (forward pass). Puisque le calcul creux est limité par la mémoire, DeepSparse exécute le réseau couche par couche, décomposant le problème en colonnes de tenseurs (Tensor Columns), qui sont des bandes de calcul verticales qui tiennent dans le cache.

Les réseaux creux avec calcul compressé, exécutés couche par couche dans le cache, permettent à DeepSparse d'offrir des performances de niveau GPU sur CPU !
Link to this sectionCrée une version creuse de YOLOv5 entraînée sur des données personnalisées#
Le dépôt de modèles open source de Neural Magic, SparseZoo, contient des points de contrôle (checkpoints) pré-sparsifiés pour chaque modèle YOLOv5. En utilisant SparseML, qui est intégré à Ultralytics, tu peux affiner un checkpoint creux sur tes données avec une seule commande CLI.
Link to this sectionDéploie YOLOv5 avec DeepSparse#
Link to this sectionInstalle DeepSparse#
Exécute la commande suivante pour installer DeepSparse. Nous te recommandons d'utiliser un environnement virtuel avec Python.
pip install deepsparse[server,yolo,onnxruntime]Link to this sectionRécupère un fichier ONNX#
DeepSparse accepte un modèle au format ONNX, transmis soit sous la forme de :
- 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:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneLink to this sectionDéploie un modèle#
DeepSparse propose des API pratiques pour intégrer ton modèle dans une application.
Pour essayer les exemples de déploiement ci-dessous, télécharge une image exemple pour l'essai et enregistre-la sous le nom basilica.jpg avec la commande suivante :
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgLink to this sectionAPI Python#
Les pipelines enveloppent le prétraitement et le post-traitement de sortie autour du moteur d'exécution, offrant une interface propre pour ajouter DeepSparse à une application. L'intégration DeepSparse-Ultralytics inclut un pipeline prêt à l'emploi qui accepte des images brutes et produit les boîtes englobantes (bounding boxes).
Crée un pipeline et lance l'inférence :
from deepsparse import Pipeline
# list of images in local filesystem
images = ["basilica.jpg"]
# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# run inference on images, receive bounding boxes + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)Si tu travailles dans le cloud, tu pourrais rencontrer une erreur indiquant qu'OpenCV ne trouve pas libGL.so.1. L'exécution de la commande suivante sur Ubuntu l'installera :
apt-get install libgl1-mesa-glxLink to this sectionServeur HTTP#
DeepSparse Server fonctionne au-dessus du framework web populaire FastAPI et du serveur web Uvicorn. Avec une seule commande CLI, tu peux facilement configurer un point de terminaison de service de modèle avec DeepSparse. Le serveur prend en charge n'importe quel pipeline DeepSparse, y compris la détection d'objets avec YOLOv5, te permettant d'envoyer des images brutes au point de terminaison et de recevoir les boîtes englobantes.
Lance le serveur avec le YOLOv5s élagué-quantifié :
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneUne requête exemple, en utilisant le package requests de Python :
import requests, json
# list of images for inference (local files on client side)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# send request over HTTP to /predict/from_files endpoint
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# response is returned in JSON
annotations = json.loads(resp.text) # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]Link to this sectionCLI d'annotation#
Tu peux aussi utiliser la commande annotate pour que le moteur enregistre une photo annotée sur le disque. Essaie --source 0 pour annoter le flux de ta webcam en direct !
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpgL'exécution de la commande ci-dessus créera un dossier annotation-results et y enregistrera l'image annotée.

Link to this sectionAnalyse de performance#
En utilisant le script de benchmarking de DeepSparse, nous allons comparer le débit de DeepSparse à celui d'ONNX Runtime sur YOLOv5s.
Les benchmarks ont été exécutés sur une instance AWS c6i.8xlarge (16 cœurs).
Link to this sectionComparaison de performance en lot (batch) 32#
Link to this sectionRéférence ONNX Runtime#
En lot 32, ONNX Runtime atteint 42 images/sec avec le YOLOv5s dense standard :
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeChemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Taille du lot : 32 Scénario : sync Débit (éléments/sec) : 41,9025
Link to this sectionPerformance DeepSparse Dense#
Bien que DeepSparse offre ses meilleures performances avec des modèles creux optimisés, il fonctionne également bien avec le YOLOv5s dense standard.
En lot 32, DeepSparse atteint 70 images/sec avec le YOLOv5s dense standard—une amélioration de performance de 1,7x par rapport à ORT !
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1Chemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Taille du lot : 32 Scénario : sync Débit (éléments/sec) : 69,5546
Link to this sectionPerformance DeepSparse Creuse#
Lorsque la sparsité est appliquée au modèle, les gains de performance de DeepSparse par rapport à ONNX Runtime sont encore plus marqués.
En lot 32, DeepSparse atteint 241 images/sec avec le YOLOv5s élagué-quantifié—une amélioration de performance de 5,8x par rapport à ORT !
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1Chemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Taille du lot : 32 Scénario : sync Débit (éléments/sec) : 241,2452
Link to this sectionComparaison de performance en lot (batch) 1#
DeepSparse est également capable d'obtenir une accélération par rapport à ONNX Runtime pour le scénario en lot 1, sensible à la latence.
Link to this sectionRéférence ONNX Runtime#
En lot 1, ONNX Runtime atteint 48 images/sec avec le YOLOv5s standard et dense.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeChemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Taille du lot : 1 Scénario : sync Débit (éléments/sec) : 48,0921
Link to this sectionPerformance DeepSparse Creuse#
Lorsque la sparsité est appliquée au modèle, les gains de performance de DeepSparse par rapport à ONNX Runtime sont encore plus marqués.
En lot 1, DeepSparse atteint 135 images/sec avec le YOLOv5s élagué-quantifié—une amélioration de performance de 2,8x par rapport à ONNX Runtime !
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Chemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Taille du lot : 1 Scénario : sync Débit (éléments/sec) : 134,9468
Puisque les instances c6i.8xlarge possèdent des instructions VNNI, le débit de DeepSparse peut être poussé davantage si les poids sont élagués par blocs de 4.
En lot 1, DeepSparse atteint 180 éléments/sec avec un YOLOv5s élagué-quantifié par bloc de 4—un gain de performance de 3,7x par rapport à ONNX Runtime !
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1Chemin du modèle original : zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Taille du lot : 1 Scénario : sync Débit (éléments/sec) : 179,7375
Et voilà ! Tu es prêt à optimiser ton déploiement YOLOv5 avec DeepSparse.
Link to this sectionDémarre avec YOLOv5 et DeepSparse#
Pour entrer en contact avec nous, rejoins notre communauté et laisse-nous tes questions et commentaires. Consulte le dépôt Ultralytics YOLOv5 et la documentation complète de Neural Magic pour déployer YOLOv5.
Chez Ultralytics, nous collaborons commercialement avec d'autres startups pour nous aider à financer la recherche et le développement de nos formidables outils open source, comme YOLOv5, afin de les maintenir gratuits pour tous. Cet article peut contenir des liens d'affiliation vers ces partenaires.






