Cliccando su “Accetta tutti i cookie”, l'utente accetta di memorizzare i cookie sul proprio dispositivo per migliorare la navigazione del sito, analizzare l'utilizzo del sito e assistere le nostre attività di marketing. Maggiori informazioni
Impostazioni dei cookie
Cliccando su “Accetta tutti i cookie”, l'utente accetta di memorizzare i cookie sul proprio dispositivo per migliorare la navigazione del sito, analizzare l'utilizzo del sito e assistere le nostre attività di marketing. Maggiori informazioni
Potenziate l'addestramento e la distribuzione dei modelliYOLOv5 di Ultralytics con DeepSparse di Neural Magic per ottenere prestazioni GPU su CPU. Ottenete implementazioni YOLOv5 più rapide e scalabili.
Desiderate accelerare la formazione e l'implementazione del vostro YOLOv5 modelli? Ci pensiamo noi! Vi 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.
DeepSparse è il runtime di inferenza CPU di Neural Magic, che sfrutta la spazialità e l'aritmetica a bassa precisione delle reti neurali per offrire prestazioni eccezionali su hardware commodity. Ad esempio, rispetto al Runtime ONNX di base, 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 esigenze di performance della produzione senza la complessità e i costi degli acceleratori hardware. In parole semplici, DeepSparse ti offre le prestazioni delle GPU e la semplicità del software:
Deployment Flessibili: Esegui in modo coerente su cloud, data center ed edge con qualsiasi fornitore di hardware.
Scalabilità infinita: Scala orizzontalmente con Kubernetes standard, verticalmente a centinaia di core o completamente astratta con serverless
Facile integrazione: Utilizza API chiare per integrare il tuo modello in un'applicazione e monitorarlo in produzione.
Ottenere prestazioni GPU su CPU commodity
DeepSparse sfrutta la sparsità del modello per ottenere un aumento della velocità delle prestazioni.
La sparsificazione attraverso la potatura e la quantizzazione consente di ridurre di un ordine di grandezza le dimensioni e i calcoli necessari per l'esecuzione di una rete, mantenendo un'elevata precisione. DeepSparse è consapevole della sparsità, saltando le aggiunte di moltiplicazione per zero e riducendo 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 colonne Tensor , 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 offrire prestazioni GPU sulle CPU!
Creare una versione sparsa di YOLOv5 addestrata su dati personalizzati
L'archivio di modelli open-source di Neural Magic, SparseZoo, contiene checkpoint pre-sparsificati di ogni modello YOLOv5 . Utilizzando SparseML, integrato con Ultralytics, è possibile mettere a punto un checkpoint sparse sui dati con un unico comando CLI .
Distribuzione di YOLOv5 con DeepSparse
Installa DeepSparse
Eseguire quanto segue per installare DeepSparse. Si consiglia di utilizzare un ambiente virtuale con Python.
pip installare deepsparse[serveryolo,onnxruntime]
Raccogliere un file ONNX
DeepSparse accetta un modello nel formato ONNX , passato come:
Un percorso locale per un modello ONNX
Uno stub di SparseZoo che identifica un modello in SparseZoo
Confronteremo lo YOLOv5s denso standard con lo YOLOv5s potato-quantizzato, identificato dai seguenti stub di SparseZoo:
zoo:ultralytics zoo:ultralytics
Deploy di un modello
DeepSparse offre API convenienti per integrare il tuo modello in un'applicazione.
Per provare gli esempi di implementazione riportati di seguito, estraete un'immagine di esempio e salvatela come basilica.jpg con il seguente comando:
wget -O basilicabasilicajpg
API Python
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 Ultralytics include una pipeline pronta all'uso che accetta immagini grezze e produce i riquadri di delimitazione.
Crea una Pipeline ed esegui l'inferenza:
from deepsparse import Pipeline
# elenco di immagini nel filesystem locale immagini = [basilica.jpg"]
# eseguire l'inferenza sulle immagini, ricevere le bounding box + le classi pipeline_outputs = yolo(images=images, iou_thres=0.6, conf_thres=0.001) print(pipeline_outputs)
Se stai eseguendo l'applicazione nel cloud, potresti ricevere un errore che indica che open-cv non riesce a trovare libGL.so.1. L'esecuzione di quanto segue su Ubuntu lo installa:
apt-get install libgl1-mesa-glx
Server HTTP
DeepSparse Server si basa sul famoso framework web FastAPI e sul server web Uvicorn. Con un solo comando CLI , è possibile impostare facilmente un endpoint di servizio modello con DeepSparse. Il server supporta qualsiasi pipeline di DeepSparse, compreso il rilevamento degli oggetti con YOLOv5, consentendo di inviare immagini grezze all'endpoint e di ricevere le bounding box.
Un esempio di richiesta, utilizzando il pacchetto requests di Python:
import requests, json
# lista 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 tramite 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 formato JSON annotations = json.loads(resp.text) # dizionario dei risultati dell'annotazione bounding_boxes = annotations["boxes"] labels = annotations["labels"]
Annotare CLI
Puoi anche usare il comando annotate per fare in modo che il motore salvi una foto annotata sul disco. Prova --source 0 per annotare il tuo feed live dalla webcam!
> Percorso del modello originale: zoo:ultralytics > Dimensione del batch: 1 > Scenario: sync > Throughput (items/sec): 134.9468
Poiché le istanze c6i.8xlarge dispongono di istruzioni VNNI, il throughput di DeepSparse può essere ulteriormente incrementato 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!
In 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 tali partner.