Einsatz von Ultralytics YOLOv5 mit DeepSparse von Neural Magic für Leistung der GPU-Klasse auf CPUs

Ultralytics-Team

5 Minuten lesen

5. Januar 2023

Verbessern Sie das Training und die Bereitstellung von Ultralytics YOLOv5-Modellen mit DeepSparse von Neural Magic für eine Leistung der GPU-Klasse auf CPUs. Erzielen Sie schnellere, skalierbare YOLOv5-Bereitstellungen.

Sie möchten die Ausbildung und den Einsatz Ihrer YOLOv5-Modelle beschleunigen? Wir haben das Richtige für Sie! Wir stellen Ihnen unseren neuesten Partner vor: Neural Magic. Da Neural Magic Software-Tools anbietet, die den Schwerpunkt auf höchste Modellleistung und einfache Arbeitsabläufe legen, ist es nur natürlich, dass wir uns zusammengetan haben, um eine Lösung anzubieten, die den YOLOv5-Bereitstellungsprozess noch besser macht.

DeepSparse ist die CPU-Inferenz-Laufzeit von Neural Magic, die die Vorteile der Sparsamkeit und der niedrigpräzisen Arithmetik in neuronalen Netzen nutzt, um eine außergewöhnliche Leistung auf Standardhardware zu bieten. Im Vergleich zur ONNX Runtime-Basisversion bietet DeepSparse beispielsweise eine 5,8-fache Beschleunigung für YOLOv5s, die auf demselben Rechner ausgeführt werden!

YOLOv5-Durchsatzvergleich mit DeepSparse

Zum ersten Mal können Ihre Deep Learning-Workloads die Leistungsanforderungen der Produktion erfüllen, ohne die Komplexität und Kosten von Hardware-Beschleunigern. Einfach ausgedrückt: DeepSparse bietet Ihnen die Leistung von GPUs und die Einfachheit von Software:

  1. Flexible Bereitstellungen: Konsistente Ausführung in der Cloud, im Rechenzentrum und am Netzwerkrand mit jedem Hardware-Anbieter
  2. Unendliche Skalierbarkeit: Skalierung mit Standard-Kubernetes, vertikal auf Hunderte von Kernen oder vollständig abstrahiert mit Serverless
  3. Einfache Integration: Verwenden Sie saubere APIs, um Ihr Modell in eine Anwendung zu integrieren und es in der Produktion zu überwachen.

Erzielen Sie GPU-Leistung auf handelsüblichen CPUs

DeepSparse nutzt die Sparsamkeit des Modells, um seine Leistung zu beschleunigen.

Die Sparsifizierung durch Pruning und Quantisierung ermöglicht eine Verringerung der Größe und des Rechenaufwands für die Ausführung eines Netzes um Größenordnungen bei gleichbleibend hoher Genauigkeit. DeepSparse ist sparsamkeitsbewusst, überspringt die Multiplikation mit Null und reduziert den Rechenaufwand in einem Vorwärtsdurchlauf. Da Sparse-Berechnungen speichergebunden sind, führt DeepSparse das Netzwerk in der Tiefe aus und unterteilt das Problem in Tensor Columns, vertikale Berechnungsstreifen, die in den Cache passen.

DeepSparse und Ultralytics YOLOv5 Netzwerk

Sparse-Netzwerke mit komprimierter Berechnung, die tiefenweise im Cache ausgeführt werden, ermöglichen DeepSparse eine Leistung der GPU-Klasse auf CPUs!

Erstellen einer spärlichen Version von YOLOv5, die auf benutzerdefinierten Daten trainiert wurde

Das Open-Source-Modell-Repository von Neural Magic, SparseZoo, enthält vorgesparste Prüfpunkte für jedes YOLOv5-Modell. Mit SparseML, das in Ultralytics integriert ist, können Sie einen Sparse-Checkpoint mit einem einzigen CLI-Befehl auf Ihre Daten abstimmen.

Weitere Einzelheiten finden Sie in der YOLOv5-Dokumentation von Neural Magic.

Einsatz von YOLOv5 mit DeepSparse

DeepSparse installieren

Führen Sie den folgenden Befehl aus, um DeepSparse zu installieren. Wir empfehlen Ihnen, eine virtuelle Umgebung mit Python zu verwenden.

pip install deepsparse[server,yolo,onnxruntime]

Sammeln einer ONNX-Datei

DeepSparse akzeptiert ein Modell im ONNX-Format, das entweder als:

  • Ein lokaler Pfad zu einem ONNX-Modell
  • Ein SparseZoo-Stub, der ein Modell im SparseZoo identifiziert

Wir werden die standardmäßigen dichten YOLOv5s mit den beschnittenen YOLOv5s vergleichen, die durch die folgenden SparseZoo-Stubs identifiziert werden:

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

Ein Modell bereitstellen

DeepSparse bietet bequeme APIs, um Ihr Modell in eine Anwendung zu integrieren.

Um die nachstehenden Einsatzbeispiele auszuprobieren, ziehen Sie ein Beispielbild für das Beispiel herunter und speichern es mit dem folgenden Befehl als basilica.jpg:

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

Python-API

Pipelines umschließen die Vorverarbeitung und die Nachbearbeitung der Ausgabe um die Laufzeit herum und bieten eine saubere Schnittstelle für das Hinzufügen von DeepSparse zu einer Anwendung. Die DeepSparse-Ultralytics-Integration umfasst eine sofort einsatzbereite Pipeline, die Rohbilder akzeptiert und die Bounding Boxes ausgibt.

Erstellen Sie eine Pipeline und führen Sie eine Inferenz durch:

from deepsparse import Pipeline

# Liste der Bilder im lokalen Dateisystem
images = ["basilica.jpg"]

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

# Inferenz auf Bilder ausführen, Bounding Boxen + Klassen erhalten
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Wenn Sie in der Cloud arbeiten, erhalten Sie möglicherweise eine Fehlermeldung, dass open-cv libGL.so.1 nicht finden kann. Wenn Sie das Folgende unter Ubuntu ausführen, wird es installiert:

apt-get install libgl1-mesa-glx

HTTP-Server

DeepSparse Server läuft auf dem beliebten FastAPI Web-Framework und dem Uvicorn Webserver. Mit nur einem einzigen CLI-Befehl können Sie ganz einfach einen Modellservice-Endpunkt mit DeepSparse einrichten. Der Server unterstützt jede Pipeline von DeepSparse, einschließlich der Objekterkennung mit YOLOv5, so dass Sie Rohbilder an den Endpunkt senden und die Bounding Boxen erhalten können.

Starten Sie den Server mit den beschnittenen und quantisierten YOLOv5:

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

Eine Beispielanfrage, die das Python-Paket requests verwendet:

Anfragen, json importieren

# Liste der Bilder für die Inferenz (lokale Dateien auf der Client-Seite)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# Anfrage über HTTP an den Endpunkt /predict/from_files senden
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# Antwort wird in JSON zurückgegeben
annotations = json.loads(resp.text) # Wörterbuch der Anmerkungsergebnisse
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

CLI annotieren

Sie können auch den Befehl annotate verwenden, damit die Engine ein mit Anmerkungen versehenes Foto auf der Festplatte speichert. Versuchen Sie es mit --source 0, um Ihren Live-Webcam-Feed mit Anmerkungen zu versehen!

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

Wenn Sie den obigen Befehl ausführen, wird ein Ordner "annotation-results" erstellt und das mit Anmerkungen versehene Bild darin gespeichert.

Kommentierte Basilika mit YOLOv5

Benchmark-Leistung

Mit Hilfe des DeepSparse-Benchmarking-Skripts werden wir den Durchsatz von DeepSparse mit dem Durchsatz von ONNX Runtime auf YOLOv5s vergleichen.

Die Benchmarks wurden auf einer AWS c6i.8xlarge-Instanz (16 Kerne) ausgeführt.

Batch 32 Leistungsvergleich

ONNX-Laufzeit-Baseline

Bei Batch 32 erreicht ONNX Runtime 42 Bilder/Sek. mit den standardmäßigen dichten YOLOv5s:

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch-Größe: 32
> Szenario: sync
> Durchsatz (Elemente/Sek.): 41.9025

DeepSparse Dense Leistung

Obwohl DeepSparse seine beste Leistung mit optimierten Sparse-Modellen erbringt, ist es auch mit den standardmäßigen dichten YOLOv5-Modellen gut einsetzbar.

Bei Batch 32 erreicht DeepSparse 70 Bilder/Sek. mit dem standardmäßigen dichten YOLOv5 - eine1,7-fache Leistungssteigerung gegenüber ORT!

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Stapelgröße: 32
> Szenario: sync
> Durchsatz (Elemente/Sek): 69.5546

DeepSparse Sparse Leistung

Wenn Sparsity auf das Modell angewendet wird, sind die Leistungsgewinne von DeepSparse gegenüber ONNX Runtime noch größer.

Bei Batch 32 erreicht DeepSparse 241 Bilder/Sek. mit dem quantisierten YOLOv5 - eine5,8-fache Leistungssteigerung gegenüber ORT!

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Stapelgröße: 32
> Szenario: sync
> Durchsatz (Elemente/Sek): 241.2452

Batch 1 Leistungsvergleich

DeepSparse ist auch in der Lage, eine Geschwindigkeitssteigerung gegenüber ONNX Runtime für das latenzempfindliche Batch-1-Szenario zu erzielen.

ONNX-Laufzeit-Baseline

Bei Batch 1 erreicht ONNX Runtime 48 Bilder/Sek. mit den standardmäßigen, dichten YOLOv5s.

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Stapelgröße: 1
> Szenario: sync
> Durchsatz (Elemente/Sek): 48.0921

DeepSparse Sparse Leistung

Wenn Sparsity auf das Modell angewendet wird, sind die Leistungsgewinne von DeepSparse gegenüber ONNX Runtime noch größer.

Bei Batch 1 erreicht DeepSparse 135 Bilder/Sek. mit dem quantisierten YOLOv5 - eine2,8-fache Leistungssteigerung gegenüber ONNX Runtime!

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Stapelgröße: 1
> Szenario: sync
> Durchsatz (Elemente/Sek): 134.9468

Da c6i.8xlarge-Instanzen über VNNI-Anweisungen verfügen, kann der Durchsatz von DeepSparse weiter gesteigert werden, wenn die Gewichte in 4er-Blöcken beschnitten werden.

Bei Batch 1 erreicht DeepSparse 180 Items/Sek mit einem 4-Block pruned-quantized YOLOv5 - ein3,7-facher Leistungsgewinn gegenüber ONNX Runtime!

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

> Ursprünglicher Modellpfad: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Stapelgröße: 1
> Szenario: sync
> Durchsatz (Elemente/Sek): 179.7375

Und voila! Sie sind bereit, Ihren YOLOv5-Einsatz mit DeepSparse zu optimieren.

Starten Sie mit YOLOv5 und DeepSparse

Um mit uns in Kontakt zu treten, treten Sie unserer Community bei und hinterlassen Sie uns Ihre Fragen und Kommentare. Sehen Sie sich das Ultralytics YOLOv5-Repository und die vollständige Neural Magic-Dokumentation für den Einsatz von YOLOv5 an.

Bei Ultralytics gehen wir kommerzielle Partnerschaften mit anderen Start-ups ein, um die Forschung und Entwicklung unserer großartigen Open-Source-Tools wie YOLOv5 zu finanzieren, damit sie für alle kostenlos bleiben. Dieser Artikel kann Affiliate-Links zu diesen Partnern enthalten.

Lassen Sie uns gemeinsam die Zukunft
der KI gestalten!

Beginnen Sie Ihre Reise in die Zukunft des maschinellen Lernens

Kostenloser Start
Link in die Zwischenablage kopiert