Skip to content

Neural MagicDeepSparse

Bienvenue Ă  l'IA logicielle.

Ce guide explique comment déployer YOLOv5 avec Neural Magic's DeepSparse.

DeepSparse est un runtime d'inférence avec des performances exceptionnelles sur les CPU. Par exemple, par rapport à la référence ONNX Runtime, DeepSparse offre une accélération de 5,8 fois pour YOLOv5s, fonctionnant sur la même machine !

YOLOv5 amélioration de la vitesse

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 d'autres termes, DeepSparse vous offre les performances des GPU et la simplicité d'un logiciel :

  • DĂ©ploiements flexibles: ExĂ©cution cohĂ©rente dans le nuage, le centre de donnĂ©es et la pĂ©riphĂ©rie avec n'importe quel fournisseur de matĂ©riel, de Intel Ă  AMD en passant par ARM.
  • ÉvolutivitĂ© infinie: Évolution verticale vers des centaines de cĹ“urs, vers l'extĂ©rieur avec Kubernetes standard, ou entièrement abstraite avec Serverless.
  • IntĂ©gration facile: Des API propres pour intĂ©grer votre modèle dans une application et le contrĂ´ler en production.

Comment DeepSparse atteint-il des performances de classe GPU?

DeepSparse tire parti de la rareté du modèle pour accélérer les performances.

La sparification par élagage et quantification est une technique largement étudiée, qui 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 conservant une grande précision. DeepSparse est conscient de l'éparpillement, ce qui signifie qu'il saute les paramètres mis à zéro, réduisant ainsi la quantité de calcul dans un passage en avant. Étant donné que le calcul clairsemé est désormais lié à la mémoire, DeepSparse exécute le réseau en profondeur, en décomposant le problème en Tensor Columns, des bandes verticales de calcul qui tiennent dans la mémoire cache.

YOLO élagage du modèle

Les réseaux épars avec calcul compressé, exécutés en profondeur dans le cache, permettent à DeepSparse d'offrir des performances de classe GPU sur les processeurs !

Comment créer une version éparse de YOLOv5 entraînée sur mes données ?

Neural MagicLe dépôt de modèles open-source de SparseZoo contient des points de contrôle pré-sparsifiés de chaque modèle YOLOv5 . En utilisant SparseML, qui est intégré à Ultralytics, vous pouvez affiner un point de contrôle clair sur vos données avec une seule commande CLI .

Consultez la documentation de Neural Magic's YOLOv5 pour plus de détails.

Utilisation de DeepSparse

Nous verrons un exemple de benchmarking et de déploiement d'une version sparse de YOLOv5s avec DeepSparse.

Installer DeepSparse

Exécutez le programme suivant pour installer DeepSparse. Nous vous recommandons d'utiliser un environnement virtuel avec Python.

pip install "deepsparse[server,yolo,onnxruntime]"

Collecte d'un fichier ONNX

DeepSparse accepte un modèle au format ONNX , passé soit comme :

  • Un stub SparseZoo qui identifie un fichier ONNX dans le SparseZoo
  • Un chemin local vers un modèle ONNX dans un système de fichiers

Les exemples ci-dessous utilisent les points de contrôle YOLOv5s standard, denses et quantifiés, identifiés 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-none

Déployer un modèle

DeepSparse propose des API pratiques pour intégrer votre modèle dans une application.

Pour essayer les exemples de déploiement ci-dessous, téléchargez un exemple d'image et enregistrez-la sous le nom de basilica.jpg avec les éléments suivants :

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

Python API

Pipelines Le pré-traitement et le post-traitement des données de sortie sont intégrés dans le moteur d'exécution, ce qui permet d'ajouter DeepSparse à une application en toute simplicité. L'intégration de DeepSparse-Ultralytics comprend un module de base Pipeline qui accepte les images brutes et produit les boîtes de délimitation.

Créer un Pipeline et de lancer 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 vous travaillez dans le nuage, il se peut que vous obteniez une erreur indiquant que open-cv ne peut pas trouver libGL.so.1. L'exécution de la procédure suivante sur Ubuntu l'installe :

apt-get install libgl1

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 d'arrivée 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.

Faites tourner le serveur avec les YOLOv5s élagués et quantifiés :

deepsparse.server \
    --task yolo \
    --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Un exemple de demande, utilisant le site Python's requests l'emballage :

import json

import requests

# 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"]

Annoter 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 !

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg

L'exécution de la commande ci-dessus créera un annotation-results et enregistrer l'image annotée à l'intérieur.

annoté

Analyse comparative des performances

Nous allons comparer le débit de DeepSparse à celui de ONNX Runtime sur YOLOv5s, en utilisant le script de benchmarking de DeepSparse.

Les tests ont été effectués sur un serveur AWS c6i.8xlarge (16 cœurs).

Comparaison des performances du lot 32

ONNX Base d'exécution

Avec le lot 32, ONNX Runtime atteint 42 images/seconde avec les YOLOv5 denses standard :

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 41.9025

DeepSparse Dense Performance

Bien que DeepSparse offre ses meilleures performances avec des modèles épars optimisés, il donne également de bons résultats avec les modèles denses standard YOLOv5.

Avec le lot 32, DeepSparse atteint 70 images/seconde avec les YOLOv5 denses standard, soit une amélioration des performances de 1,7 fois par rapport à ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 69.5546

Performance DeepSparse Sparse

Lorsque l'on applique le principe de sparsité au modèle, les gains de performance de DeepSparse par rapport à ONNX Runtime sont encore plus importants.

Avec le lot 32, DeepSparse atteint 241 images/seconde avec les YOLOv5s élagués et quantifiés, soit une amélioration des performances de 5,8 fois par rapport à ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 241.2452

Comparaison des performances du premier lot

DeepSparse est également en mesure de gagner en vitesse par rapport à ONNX Runtime pour le scénario batch 1, sensible à la latence.

ONNX Base d'exécution

Pour le lot 1, ONNX Runtime atteint 48 images/seconde avec les YOLOv5 standard et denses.

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 48.0921

Performance DeepSparse Sparse

Pour le lot 1, DeepSparse atteint 135 éléments/seconde avec un YOLOv5s élagué et quantifié, soit un gain de performance de 2,8 fois par rapport à ONNX Runtime !

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 134.9468

Depuis c6i.8xlarge ont des instructions VNNI, le débit de DeepSparse peut être encore amélioré si les poids sont élagués par blocs de 4.

Pour le lot 1, DeepSparse atteint 180 éléments/s avec un YOLOv5s quantifié et élagué à 4 blocs, soit un gain de performance de 3,7 fois par rapport à ONNX Runtime !

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 179.7375

DĂ©marrer avec DeepSparse

Recherche ou test ? DeepSparse Community est gratuit pour la recherche et les tests. Commencez par consulter notre documentation.

📅C réé il y a 1 an ✏️ Mis à jour il y a 2 mois

Commentaires