Versterk YOLOv5 modeltraining en -implementatie met Neural Magic's DeepSparse voor GPU-klasse prestaties op CPU's. Bereik snellere, schaalbare YOLOv5 implementaties.
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!
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:
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.
Dankzij platte netwerken met gecomprimeerde berekeningen, die dieptegewijs in de cache worden uitgevoerd, kan DeepSparse GPU-klasse prestaties leveren op CPU's!
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.
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]
DeepSparse accepteert een model in het formaat ONNX , doorgegeven als:
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
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
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
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"]
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.
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).
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
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
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
DeepSparse is ook in staat om een snelheidswinst te behalen ten opzichte van ONNX Runtime voor het latency-gevoelige, batch 1 scenario.
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
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.
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.
Begin je reis met de toekomst van machine learning