Vai al contenuto

Neural MagicDeepSparse

Benvenuti nell'IA fornita dal software.

Questa guida spiega come distribuire YOLOv5 con DeepSparse di Neural Magic.

DeepSparse è un runtime di inferenza con prestazioni eccezionali sulle CPU. Ad esempio, rispetto al runtime di base ONNX , DeepSparse offre una velocità di 5,8 volte superiore per YOLOv5s, in esecuzione sulla stessa macchina!

YOLOv5 miglioramento della velocitĂ 

Per la prima volta, i tuoi carichi di lavoro di deep learning possono soddisfare le prestazioni richieste dalla produzione senza la complessitĂ  e i costi degli acceleratori hardware. In parole povere, DeepSparse ti offre le prestazioni delle GPU e la semplicitĂ  del software:

  • Distribuzioni flessibili: Esegui in modo coerente nel cloud, nel data center e nell'edge con qualsiasi fornitore di hardware, da Intel ad AMD ad ARM.
  • ScalabilitĂ  infinita: Scalare verticalmente fino a 100 core, con Kubernetes standard o in modo completamente astratto con Serverless.
  • Facile integrazione: API pulite per integrare il tuo modello in un'applicazione e monitorarlo in produzione.

Come fa DeepSparse a raggiungere prestazioni di classe GPU?

DeepSparse sfrutta la sparsitĂ  del modello per aumentare le prestazioni.

La sparsificazione attraverso la potatura e la quantizzazione è una tecnica ampiamente studiata, che consente di ridurre di un ordine di grandezza le dimensioni e i calcoli necessari per eseguire una rete, mantenendo un'elevata precisione. DeepSparse è sparsity-aware, cioè salta i parametri azzerati, riducendo la quantità di calcolo in un passaggio successivo. Poiché il calcolo sparso è ora limitato dalla memoria, DeepSparse esegue la rete in profondità, suddividendo il problema in Tensor Colonne, strisce verticali di calcolo che si adattano alla cache.

YOLO potatura del modello

Le reti sparse con calcolo compresso, eseguite in profonditĂ  nella cache, consentono a DeepSparse di offrire prestazioni di livello GPU sulle CPU!

Come posso creare una versione sparsa di YOLOv5 addestrata sui miei dati?

Neural MagicIl repository di modelli open-source, SparseZoo, contiene checkpoint pre-sparsificati di ogni modello YOLOv5 . Utilizzando SparseML, che è integrato con Ultralytics, puoi mettere a punto un checkpoint sparse sui tuoi dati con un unico comando CLI .

Consulta la documentazione di Neural Magic'YOLOv5 per maggiori dettagli.

Utilizzo di DeepSparse

VerrĂ  presentato un esempio di benchmarking e di distribuzione di una versione rada di YOLOv5s con DeepSparse.

Installare DeepSparse

Esegui quanto segue per installare DeepSparse. Ti consigliamo di utilizzare un ambiente virtuale con Python.

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

Raccogliere un file ONNX

DeepSparse accetta un modello nel formato ONNX , passato o come:

  • Uno stub di SparseZoo che identifica un file ONNX in SparseZoo
  • Un percorso locale di un modello ONNX in un filesystem

Gli esempi che seguono utilizzano i checkpoint YOLOv5s standard densi e potati-quantizzati, identificati dai seguenti stub SparseZoo:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Distribuire un modello

DeepSparse offre comode API per integrare il tuo modello in un'applicazione.

Per provare gli esempi di distribuzione riportati di seguito, seleziona un'immagine di esempio e salvala come basilica.jpg con quanto segue:

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

Python API

Pipelines avvolge la pre-elaborazione e la post-elaborazione dell'output attorno al runtime, fornendo un'interfaccia pulita per aggiungere DeepSparse a un'applicazione. L'integrazione tra DeepSparse eUltralytics include un'interfaccia Pipeline che accetta immagini grezze e produce i riquadri di delimitazione.

Crea un Pipeline ed eseguire l'inferenza:

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)

Se stai eseguendo nel cloud, potresti ricevere un errore che indica che open-cv non può essere trovato libGL.so.1. Eseguendo il seguente comando su Ubuntu, viene installato:

apt-get install libgl1

Server HTTP

DeepSparse Server si basa sul famoso framework web FastAPI e sul server web Uvicorn. Con un solo comando CLI , puoi configurare facilmente un endpoint di servizio modello con DeepSparse. Il server supporta qualsiasi pipeline di DeepSparse, compreso il rilevamento degli oggetti con YOLOv5, consentendoti di inviare immagini grezze all'endpoint e di ricevere i bounding box.

Fai girare il Server con gli YOLOv5 potati e quantificati:

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

Un esempio di richiesta, utilizzando Python's requests pacchetto:

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

Annota CLI

Puoi anche utilizzare il comando annota per far sì che il motore salvi una foto annotata su disco. Prova --source 0 per annotare il feed della tua webcam in diretta!

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

L'esecuzione del comando precedente creerĂ  un file annotation-results e salva l'immagine annotata al suo interno.

annotato

Benchmarking delle prestazioni

Confronteremo il throughput di DeepSparse con quello di ONNX Runtime su YOLOv5s, utilizzando lo script di benchmarking di DeepSparse.

I benchmark sono stati eseguiti su un sistema AWS c6i.8xlarge istanza (16 core).

Confronto delle prestazioni del batch 32

ONNX Linea di base del runtime

Al batch 32, ONNX Runtime raggiunge 42 immagini/sec con le YOLOv5 dense 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 Prestazioni

Sebbene DeepSparse offra le sue migliori prestazioni con i modelli radi ottimizzati, si comporta bene anche con i modelli densi standard di YOLOv5.

Al batch 32, DeepSparse raggiunge 70 immagini/sec con le YOLOv5 dense standard, un miglioramento delle prestazioni di 1,7 volte rispetto a 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

DeepSparse Prestazioni sparse

Quando la sparsità viene applicata al modello, il guadagno di prestazioni di DeepSparse rispetto a ONNX Runtime è ancora maggiore.

Al batch 32, DeepSparse raggiunge 241 immagini/sec con le YOLOv5 pruned-quantized, un miglioramento delle prestazioni di 5,8 volte rispetto a 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

Confronto delle prestazioni del Lotto 1

DeepSparse è anche in grado di ottenere una maggiore velocità rispetto a ONNX Runtime per lo scenario batch 1, sensibile alla latenza.

ONNX Linea di base del runtime

Al batch 1, ONNX Runtime raggiunge 48 immagini/sec con le YOLOv5 standard e dense.

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

DeepSparse Prestazioni sparse

Al batch 1, DeepSparse raggiunge 135 item/sec con un YOLOv5s potato e quantificato, un guadagno di prestazioni di 2,8 volte rispetto a 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

Da quando c6i.8xlarge Se le istanze hanno istruzioni VNNI, il throughput di DeepSparse può essere ulteriormente spinto se i pesi vengono tagliati in blocchi da 4.

Al batch 1, DeepSparse raggiunge 180 item/sec con un YOLOv5s pruned-quantizzato a 4 blocchi, con un guadagno di prestazioni di 3,7 volte rispetto a 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

Iniziare con DeepSparse

Ricerca o test? La DeepSparse Community è gratuita per ricerche e test. Inizia con la nostra Documentazione.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6)

Commenti