Meet YOLO26: next-gen vision AI.

Link to this sectionDistribuisci YOLOv5 con DeepSparse di Neural Magic#

Benvenuto nell'AI distribuita via software.

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

DeepSparse è un runtime di inferenza con prestazioni eccezionali su CPU. Ad esempio, rispetto al baseline di ONNX Runtime, DeepSparse offre un'accelerazione di 5,8 volte per YOLOv5s, eseguito sulla stessa macchina!

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

Per la prima volta, i tuoi carichi di lavoro di deep learning possono soddisfare le esigenze di performance della 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 su cloud, data center e edge con qualsiasi fornitore di hardware, da Intel ad AMD fino ad ARM
  • Scalabilità infinita: Scala verticalmente fino a centinaia di core, orizzontalmente con Kubernetes standard, oppure in modo completamente astratto con il Serverless
  • Integrazione semplice: API pulite per integrare il tuo modello in un'applicazione e monitorarlo in produzione

Link to this sectionCome ottiene DeepSparse prestazioni di classe GPU?#

DeepSparse sfrutta la sparsità del modello per ottenere il suo incremento di prestazioni.

La sparsificazione tramite potatura (pruning) e quantizzazione è una tecnica ampiamente studiata che consente riduzioni di ordine di grandezza nelle dimensioni e nella potenza di calcolo necessarie per eseguire una rete, mantenendo un'elevata precisione. DeepSparse è consapevole della sparsità, il che significa che salta i parametri azzerati, riducendo la quantità di calcolo in un passaggio in avanti (forward pass). Poiché il calcolo sparso è ora limitato dalla memoria, DeepSparse esegue la rete in profondità, suddividendo il problema in colonne di tensori (Tensor Columns), strisce verticali di calcolo che si adattano alla cache.

DeepSparse tensor columns for sparse neural network inference

Le reti sparse con calcolo compresso, eseguite in profondità nella cache, consentono a DeepSparse di fornire prestazioni di classe GPU sulle CPU!

Link to this sectionCome posso creare una versione sparsa di YOLOv5 addestrata sui miei dati?#

Il repository di modelli open source di Neural Magic, SparseZoo, contiene checkpoint pre-sparsificati di ogni modello YOLOv5. Utilizzando SparseML, che è integrato con Ultralytics, puoi effettuare il fine-tuning di un checkpoint sparso sui tuoi dati con un singolo comando CLI.

Dai un'occhiata alla documentazione di YOLOv5 di Neural Magic per maggiori dettagli.

Link to this sectionUtilizzo di DeepSparse#

Vedremo un esempio di benchmarking e distribuzione di una versione sparsa di YOLOv5s con DeepSparse.

Link to this sectionInstalla DeepSparse#

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

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

Link to this sectionRaccogli un file ONNX#

DeepSparse accetta un modello in formato ONNX, passato in uno dei seguenti modi:

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

Gli esempi seguenti utilizzano i checkpoint standard YOLOv5s densi e pruned-quantized, identificati dai seguenti stub di SparseZoo:

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

Link to this sectionDistribuisci un modello#

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

Per provare gli esempi di distribuzione sottostanti, scarica un'immagine campione e salvala come basilica.jpg con il seguente comando:

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

Link to this sectionAPI Python#

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 DeepSparse-Ultralytics include una Pipeline pronta all'uso che accetta immagini grezze e restituisce i bounding box.

Crea una Pipeline ed esegui 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 OpenCV non riesce a trovare libGL.so.1. Puoi installare la libreria mancante:

apt-get install libgl1

Oppure utilizza il pacchetto Ultralytics headless che evita completamente le dipendenze GUI:

pip install ultralytics-opencv-headless

Link to this sectionServer HTTP#

DeepSparse Server viene eseguito sopra il popolare framework web FastAPI e il server web Uvicorn. Con un solo comando CLI, puoi configurare facilmente un endpoint di servizio del modello con DeepSparse. Il server supporta qualsiasi Pipeline di DeepSparse, inclusa l'object detection con YOLOv5, consentendoti di inviare immagini grezze all'endpoint e ricevere i bounding box.

Avvia il server con YOLOv5s pruned-quantized:

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

Una richiesta di esempio, utilizzando il pacchetto requests di Python:

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

Link to this sectionCLI Annotate#

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

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à una cartella annotation-results e vi salverà l'immagine annotata.

YOLOv5 detection results with bounding boxes

Link to this sectionBenchmark 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'istanza AWS c6i.8xlarge (16 core).

Link to this sectionConfronto delle prestazioni con Batch 32#

Link to this sectionBaseline ONNX Runtime#

Al batch 32, ONNX Runtime raggiunge 42 immagini/sec con il modello standard denso YOLOv5s:

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

Link to this sectionPrestazioni di DeepSparse denso#

Sebbene DeepSparse offra le sue migliori prestazioni con modelli sparsi ottimizzati, funziona bene anche con il modello standard denso YOLOv5s.

Al batch 32, DeepSparse raggiunge 70 immagini/sec con il modello standard denso YOLOv5s, un miglioramento delle prestazioni di 1,7x 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

Link to this sectionPrestazioni di DeepSparse sparso#

Quando la sparsità viene applicata al modello, i guadagni di prestazioni di DeepSparse rispetto a ONNX Runtime sono ancora più forti.

Al batch 32, DeepSparse raggiunge 241 immagini/sec con il modello YOLOv5s pruned-quantized, un miglioramento delle prestazioni di 5,8x 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

Link to this sectionConfronto delle prestazioni con Batch 1#

DeepSparse è anche in grado di ottenere un'accelerazione rispetto a ONNX Runtime per lo scenario con batch 1, sensibile alla latenza.

Link to this sectionBaseline ONNX Runtime#

Al batch 1, ONNX Runtime raggiunge 48 immagini/sec con il modello standard, denso YOLOv5s.

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

Link to this sectionPrestazioni di DeepSparse sparso#

Al batch 1, DeepSparse raggiunge 135 elementi/sec con un YOLOv5s pruned-quantized, un guadagno di prestazioni di 2,8x 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

Poiché le istanze c6i.8xlarge hanno istruzioni VNNI, il throughput di DeepSparse può essere ulteriormente spinto se i pesi vengono potati in blocchi da 4.

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

Link to this sectionInizia con DeepSparse#

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

Per maggiori informazioni sulla distribuzione di YOLOv5 con DeepSparse, dai un'occhiata alla documentazione di Neural Magic DeepSparse e al post del blog di Ultralytics sull'integrazione di DeepSparse.

Collaboratori

Commenti