Potenzia Ultralytics YOLOv5 l'addestramento e la distribuzione dei modelli con Neural Magic DeepSparse per GPU prestazioni di classe sulle CPU. Ottieni distribuzioni YOLOv5 più veloci e scalabili.
Vuoi accelerare la formazione e l'implementazione dei tuoi modelli? YOLOv5 modelli? Ci pensiamo noi! Ti presentiamo il nostro nuovo partner, Neural Magic. Poiché Neural Magic fornisce strumenti software che enfatizzano le massime prestazioni dei modelli e la semplicità del flusso di lavoro, è naturale che ci siamo uniti per offrire una soluzione che renda il processo di distribuzione diYOLOv5 ancora migliore.
CPU DeepSparse è il runtime di inferenza di Neural Magic, che sfrutta la sparsità e l'aritmetica a bassa precisione delle reti neurali per offrire prestazioni eccezionali su hardware commodity. Ad esempio, rispetto al runtime di base di ONNX , DeepSparse offre una velocità di 5,8 volte superiore per YOLOv5 in esecuzione sulla stessa macchina!
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:
DeepSparse sfrutta la sparsità del modello per aumentare le prestazioni.
La sparsificazione attraverso la potatura e la quantizzazione 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, salta le aggiunte di moltiplicazione per zero e riduce la quantità di calcolo in un passaggio in avanti. Poiché il calcolo rado è legato alla memoria, DeepSparse esegue la rete in profondità, suddividendo il problema in Tensor Columns, strisce verticali di calcolo che possono essere inserite nella cache.
Le reti sparse con calcolo compresso, eseguite in profondità nella cache, consentono a DeepSparse di fornire prestazioni di classe GPU sulle CPU!
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.
Esegui quanto segue per installare DeepSparse. Ti consigliamo di utilizzare un ambiente virtuale con Python.
pip install deepsparse[server,yolo,onnxruntime]
DeepSparse accetta un modello nel formato ONNX , passato o come:
Confronteremo le YOLOv5 dense standard con le YOLOv5 potate-quantizzate, identificate 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
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 il seguente comando:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Le pipeline avvolgono 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 le immagini grezze e produce i riquadri di delimitazione.
Crea una pipeline ed esegui l'inferenza:
da deepsparse importa Pipeline
# elenco di immagini nel filesystem locale
images = ["basilica.jpg"]
# crea la pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# Esegui l'inferenza sulle immagini, ricevi le bounding box + le classi
pipeline_outputs = yolo_pipeline(images=immagini, 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 riesce a trovare libGL.so.1. Eseguendo la seguente procedura su Ubuntu, viene installata:
apt-get installa libgl1-mesa-glx
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 il pacchetto requests di Python:
importare richieste, json
# elenco di immagini per l'inferenza (file locali sul lato client)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')] for img in path]
# invia la richiesta via HTTP all'endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# la risposta viene restituita in JSON
annotations = json.loads(resp.text) # dizionario dei risultati delle annotazioni
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]
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
Eseguendo il comando di cui sopra, si creerà una cartella annotation-results e si salverà l'immagine annotata al suo interno.
Utilizzando lo script di benchmarking di DeepSparse, confronteremo il throughput di DeepSparse con quello di ONNX Runtime su YOLOv5s.
I benchmark sono stati eseguiti su un'istanza AWS c6i.8xlarge (16 core).
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
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Dimensione del batch: 32
> Scenario: sync
> Throughput (items/sec): 41.9025
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 lo standard denso YOLOv5s - unmiglioramento 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
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Dimensione del batch: 32
> Scenario: sync
> Throughput (items/sec): 69.5546
Quando la sparsità viene applicata al modello, i guadagni di prestazioni di DeepSparse rispetto a ONNX Runtime sono ancora maggiori.
Al batch 32, DeepSparse raggiunge 241 immagini/sec con YOLOv5 pruned-quantized, unmiglioramento 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
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Dimensione del batch: 32
> Scenario: sync
> Throughput (items/sec): 241.2452
DeepSparse è anche in grado di ottenere una maggiore velocità rispetto a ONNX Runtime per lo scenario batch 1, sensibile alla latenza.
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
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Dimensione del lotto: 1
> Scenario: sync
> Throughput (elementi/sec): 48.0921
Quando la sparsità viene applicata al modello, i guadagni di prestazioni di DeepSparse rispetto a ONNX Runtime sono ancora maggiori.
Al batch 1, DeepSparse raggiunge 135 immagini/sec con YOLOv5 pruned-quantized, unmiglioramento delle 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 32 -nstreams 1
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Dimensione del lotto: 1
> Scenario: sync
> Throughput (elementi/sec): 134.9468
Dato che le istanze c6i.8xlarge hanno istruzioni VNNI, il throughput di DeepSparse può essere ulteriormente spinto se i pesi vengono potati in blocchi di 4.
Al batch 1, DeepSparse raggiunge 180 item/sec con un YOLOv5 pruned-quantized a 4 blocchi, unguadagno 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
> Percorso del modello originale: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Dimensione del lotto: 1
> Scenario: sync
> Throughput (elementi/sec): 179.7375
E voilà! Sei pronto per ottimizzare la tua distribuzione su YOLOv5 con DeepSparse.
Per entrare in contatto con noi, unisciti alla nostra comunità e lasciaci le tue domande e i tuoi commenti. Dai un'occhiata al repositoryUltralytics YOLOv5 e alla documentazione completa di Neural Magic per la distribuzione di YOLOv5.
Su Ultralytics, collaboriamo commercialmente con altre startup per aiutarci a finanziare la ricerca e lo sviluppo dei nostri fantastici strumenti open-source, come YOLOv5, per mantenerli gratuiti per tutti. Questo articolo può contenere link di affiliazione a questi partner.
Inizia il tuo viaggio nel futuro dell'apprendimento automatico