X
Ultralytics YOLOv8.2 LoslatenUltralytics YOLOv8.2 LoslatenUltralytics YOLOv8.2 Pijl loslaten
Groene cheque
Link gekopieerd naar klembord

YOLOv5 inzetten met Neural Magic's DeepSparse voor GPU-klasse prestaties op CPU's

Versterk YOLOv5 modeltraining en -implementatie met Neural Magic's DeepSparse voor GPU-klasse prestaties op CPU's. Bereik snellere, schaalbare YOLOv5 implementaties.

Facebook-logoTwitter-logoLinkedIn logoSymbool voor kopiëren-linken

Wil je de training en inzet van je YOLOv5 modellen? Wij hebben alles voor je! We introduceren onze nieuwste partner, Neural Magic. Omdat Neural Magic softwaretools levert die de nadruk leggen op optimale modelprestaties en een eenvoudige workflow, is het niet meer dan logisch dat we zijn samengekomen om een oplossing te bieden die het implementatieproces vanYOLOv5 nog beter maakt.

DeepSparse is Neural Magic's CPU inferentie runtime, die gebruik maakt van spaarzaamheid en rekenkunde met lage precisie binnen neurale netwerken om uitzonderlijke prestaties te bieden op commodity hardware. Vergeleken met de basislijn ONNX Runtime biedt DeepSparse bijvoorbeeld een 5,8x hogere snelheid voor YOLOv5s die op dezelfde machine draaien!

YOLOv5 Vergelijking van doorvoer met DeepSparse

Voor het eerst kunnen je deep learning workloads voldoen aan de prestatie-eisen van productie zonder de complexiteit en kosten van hardwareversnellers. Simpel gezegd geeft DeepSparse je de prestaties van GPU's en de eenvoud van software:

  1. Flexibele implementaties: Draai consistent in de cloud, het datacenter en de rand met elke hardwareleverancier
  2. Oneindige schaalbaarheid: Schaal uit met standaard Kubernetes, verticaal naar 100 cores of volledig geabstraheerd met serverless
  3. Eenvoudige integratie: Gebruik schone API's om je model in een applicatie te integreren en in productie te bewaken.

GPU-prestaties bereiken op basis CPU's

DeepSparse maakt gebruik van de spaarzaamheid van het model om de prestaties te versnellen.

Sparsificatie door snoeien en kwantiseren zorgt voor een reductie van de grootte en rekenkracht die nodig is om een netwerk uit te voeren met behoud van een hoge nauwkeurigheid. DeepSparse is spaarzaam, slaat de vermenigvuldigingstoevoegingen met nul over en verkleint de hoeveelheid rekenwerk in een voorwaartse pass. Omdat sparse computation geheugengebonden is, voert DeepSparse het netwerk in de diepte uit, waarbij het probleem wordt opgedeeld in Tensor Columns, verticale strepen van berekening die in de cache passen.

DiepSparse en Ultralytics YOLOv5  Netwerk

Dankzij platte netwerken met gecomprimeerde berekeningen, die dieptegewijs in de cache worden uitgevoerd, kan DeepSparse GPU-klasse prestaties leveren op CPU's!

Maak een spaarzame versie van YOLOv5 getraind op aangepaste gegevens

Neural MagicSparseZoo, de open-source modelrepository, bevat vooraf opgespaarde checkpoints van elk YOLOv5 model. Met SparseML, dat geïntegreerd is met Ultralytics, kun je een sparse checkpoint fijn afstemmen op je gegevens met een enkel CLI commando.

Bekijk Neural Magic's YOLOv5 Documentatie voor meer details.

YOLOv5 inzetten met DeepSparse

DeepSparse installeren

Voer het volgende uit om DeepSparse te installeren. We raden je aan een virtuele omgeving te gebruiken met Python.

pip installeer deepsparse[server,yolo,onnxruntime]

Verzamel een ONNX bestand

DeepSparse accepteert een model in het formaat ONNX , doorgegeven als:

  • Een lokaal pad naar een ONNX model
  • Een SparseZoo stub die een model identificeert in de SparseZoo

We zullen de standaard dichte YOLOv5's vergelijken met de gesnoeide YOLOv5's, geïdentificeerd door de volgende SparseZoo stubs:

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

Een model implementeren

DeepSparse biedt handige API's om je model in een toepassing te integreren.

Om de onderstaande voorbeelden uit te proberen, kun je een voorbeeldafbeelding ophalen en opslaan als basilica.jpg met het volgende commando:

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

Python API

Pipelines omsluiten pre-processing en output post-processing rond de runtime en bieden een schone interface voor het toevoegen van DeepSparse aan een toepassing. De DeepSparse-Ultralytics integratie bevat een out-of-the-box Pipeline die ruwe afbeeldingen accepteert en de bounding boxes uitvoert.

Maak een Pipeline en voer de inferentie uit:

uit deepsparse importeer Pipeline

# lijst met afbeeldingen in het lokale bestandssysteem
afbeeldingen = ["basilica.jpg"]

# maak Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)

# voer inferentie uit op afbeeldingen, ontvang bounding boxes + klassen
pipeline_outputs = yolo_pipeline(images=afbeeldingen, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Als je in de cloud draait, kun je een foutmelding krijgen dat open-cv libGL.so.1 niet kan vinden. Het volgende uitvoeren op Ubuntu installeert het:

apt-get installeer libgl1-mesa-glx

HTTP-server

DeepSparse Server draait bovenop het populaire FastAPI webframework en de Uvicorn webserver. Met slechts een enkel CLI commando kun je eenvoudig een model service endpoint opzetten met DeepSparse. De server ondersteunt elke pijplijn van DeepSparse, inclusief objectdetectie met YOLOv5, zodat je onbewerkte afbeeldingen naar het eindpunt kunt sturen en de bounding boxes kunt ontvangen.

Draai de server op met de gesnoeide YOLOv5's:

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

Een voorbeeldverzoek met Python's requests pakket:

verzoeken, json importeren

# lijst met afbeeldingen voor inferentie (lokale bestanden aan clientzijde)
pad = ['basilica.jpg']
bestanden = [('request', open(img, 'rb')) for img in path]

# verstuur verzoek over HTTP naar /predict/from_files eindpunt
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# respons wordt geretourneerd in JSON
annotations = json.loads(resp.text) # woordenboek van annotatieresultaten
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Annoteren CLI

Je kunt ook het commando annotate gebruiken om de engine een geannoteerde foto op schijf te laten opslaan. Probeer --source 0 om je live webcam feed te annoteren!

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

Door het bovenstaande commando uit te voeren, maak je een map annotation-results en sla je de geannoteerde afbeelding daarin op.

Geannoteerd Basilica met YOLOv5

Benchmarkprestaties

Met het benchmarkscript van DeepSparse vergelijken we de doorvoer van DeepSparse met de doorvoer van ONNX Runtime op YOLOv5s.

De benchmarks werden uitgevoerd op een AWS c6i.8xlarge instance (16 cores).

Batch 32 Prestatievergelijking

ONNX Runtime Basislijn

Bij batch 32 haalt ONNX Runtime 42 beelden/sec met de standaard dichte YOLOv5's:

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batchgrootte: 32
> Scenario: sync
> Doorvoer (items/sec): 41.9025

DeepSparse Dichte prestaties

Hoewel DeepSparse de beste prestaties levert met geoptimaliseerde sparse modellen, presteert het ook goed met de standaard dichte YOLOv5's.

Bij batch 32 haalt DeepSparse 70 afbeeldingen/sec met de standaard dichte YOLOv5s-eenprestatieverbetering van 1,7x ten opzichte van ORT!

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batchgrootte: 32
> Scenario: sync
> Doorvoer (items/sec): 69.5546

DeepSparse Sparse Prestaties

Wanneer sparsity wordt toegepast op het model, is de prestatiewinst van DeepSparse ten opzichte van ONNX Runtime nog groter.

Bij batch 32 haalt DeepSparse 241 afbeeldingen/sec met de YOLOv5 met snoeien en kwantiseren, eenprestatieverbetering van 5,8x ten opzichte van ORT!

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batchgrootte: 32
> Scenario: sync
> Doorvoer (items/sec): 241.2452

Prestatievergelijking batch 1

DeepSparse is ook in staat om een snelheidswinst te behalen ten opzichte van ONNX Runtime voor het latency-gevoelige, batch 1 scenario.

ONNX Runtime Basislijn

Bij batch 1 haalt ONNX Runtime 48 beelden/sec met de standaard, dichte YOLOv5's.

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batchgrootte: 1
> Scenario: sync
> Doorvoer (items/sec): 48.0921

DeepSparse Sparse Prestaties

Wanneer sparsity wordt toegepast op het model, is de prestatiewinst van DeepSparse ten opzichte van ONNX Runtime nog groter.

Bij batch 1 behaalt DeepSparse 135 afbeeldingen/sec met de YOLOv5s, eenprestatieverbetering van 2,8x ten opzichte van ONNX Runtime!

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batchgrootte: 1
> Scenario: sync
> Doorvoer (items/sec): 134.9468

Omdat c6i.8xlarge instanties VNNI-instructies hebben, kan de doorvoer van DeepSparse verder worden opgevoerd als de gewichten in blokken van 4 worden gesnoeid.

Bij batch 1 haalt DeepSparse 180 items/sec met een 4-block pruned-quantized YOLOv5s-een3,7x prestatiewinst ten opzichte van ONNX Runtime!

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

> Pad oorspronkelijk model: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Batchgrootte: 1
> Scenario: sync
> Doorvoer (items/sec): 179.7375

En voila! Je bent klaar om je YOLOv5 implementatie te optimaliseren met DeepSparse.

Aan de slag met YOLOv5 en DeepSparse

Om met ons in contact te komen, kun je lid worden van onze community en je vragen en opmerkingen achterlaten. Bekijk de Ultralytics YOLOv5 repository en de volledige Neural Magic documentatie voor het implementeren van YOLOv5.

Op Ultralytics werken we commercieel samen met andere startups om ons te helpen het onderzoek en de ontwikkeling van onze geweldige open-source tools te financieren, zoals YOLOv5, zodat ze gratis blijven voor iedereen. Dit artikel kan affiliate links naar die partners bevatten.

Laten we samen bouwen aan de toekomst
van AI!

Begin je reis met de toekomst van machine learning

Lees meer in deze categorie