Neural Magic's DeepSparse
Willkommen bei softwaregestützter KI.
In diesem Leitfaden wird erklärt, wie Sie YOLOv5 mit Neural Magic's DeepSparse einsetzen.
DeepSparse ist eine Inferenz-Laufzeitumgebung mit außergewöhnlicher Leistung auf CPUs. So bietet DeepSparse zum Beispiel im Vergleich zur ONNX Runtime Baseline eine 5,8-fache Beschleunigung für YOLOv5s, die auf demselben Rechner ausgeführt wird!
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:
- Flexible Bereitstellungen: Konsistente Ausführung in der Cloud, im Rechenzentrum und im Edge-Bereich mit jedem Hardware-Anbieter von Intel über AMD bis ARM
- Unendliche Skalierbarkeit: Vertikale Skalierung auf Hunderte von Kernen, mit Standard-Kubernetes oder vollständig abstrahiert mit Serverless
- Einfache Integration: Saubere APIs für die Integration Ihres Modells in eine Anwendung und seine Überwachung in der Produktion
Wie erreicht DeepSparse die Leistung der GPU-Klasse?
DeepSparse nutzt die Sparsamkeit des Modells, um seine Leistung zu beschleunigen.
Sparsamkeit durch Beschneidung und Quantisierung ist eine weithin untersuchte Technik, die eine Verringerung der Größe und des Rechenaufwands für die Ausführung eines Netzes um Größenordnungen ermöglicht und gleichzeitig eine hohe Genauigkeit gewährleistet. DeepSparse ist sparsamkeitsbewusst, d. h. es überspringt die auf Null gesetzten Parameter und verringert so den Rechenaufwand in einem Vorwärtsdurchlauf. Da die spärliche Berechnung nun speichergebunden ist, führt DeepSparse das Netzwerk in der Tiefe aus und zerlegt das Problem in Tensor Columns, vertikale Berechnungsstreifen, die in den Cache passen.
Sparsame Netze mit komprimierter Berechnung, die in der Tiefe im Cache ausgeführt werden, ermöglichen DeepSparse eine Leistung der Klasse GPU auf CPUs!
Wie erstelle ich eine Sparse-Version von YOLOv5 , die auf meinen Daten trainiert wurde?
Neural MagicDas Open-Source-Modell-Repository SparseZoo enthält vorgesparste Prüfpunkte für jedes YOLOv5 -Modell. Mit SparseML, das in Ultralytics integriert ist, können Sie mit einem einzigen CLI Befehl einen Sparse-Checkpoint auf Ihre Daten abstimmen.
Weitere Informationen finden Sie in der Dokumentation von Neural Magic unter YOLOv5 .
DeepSparse Verwendung
Wir werden ein Beispiel für das Benchmarking und den Einsatz einer Sparse-Version von YOLOv5s mit DeepSparse durchgehen.
DeepSparse installieren
Führen Sie den folgenden Befehl aus, um DeepSparse zu installieren. Wir empfehlen Ihnen, eine virtuelle Umgebung mit Python zu verwenden.
Sammeln Sie eine ONNX Datei
DeepSparse akzeptiert ein Modell im Format ONNX , das entweder als:
- Ein SparseZoo-Stub, der eine ONNX -Datei im SparseZoo identifiziert
- Ein lokaler Pfad zu einem ONNX Modell in einem Dateisystem
Die folgenden Beispiele verwenden die standardmäßigen dichten und beschnitten-quantisierten YOLOv5s-Checkpoints, die durch die folgenden SparseZoo-Stubs gekennzeichnet sind:
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 praktische APIs für die Integration Ihres Modells in eine Anwendung.
Um die folgenden Einsatzbeispiele auszuprobieren, ziehen Sie ein Beispielbild herunter und speichern Sie es als basilica.jpg
mit den folgenden:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Python API
Pipelines
wrap pre-processing und output post-processing um die Laufzeit herum und bietet eine saubere Schnittstelle für das Hinzufügen von DeepSparse zu einer Anwendung. Die DeepSparse-Ultralytics -Integration umfasst eine sofort einsatzbereite Pipeline
das Rohbilder akzeptiert und die Begrenzungsrahmen ausgibt.
Erstellen einer Pipeline
und Inferenz durchführen:
from deepsparse import Pipeline
# list of images in local filesystem
images = ["basilica.jpg"]
# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# run inference on images, receive bounding boxes + classes
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 die Fehlermeldung, dass open-cv nicht gefunden werden kann libGL.so.1
. Wenn Sie den folgenden Befehl unter Ubuntu ausführen, wird er installiert:
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 Modelldienst-Endpunkt mit DeepSparse einrichten. Der Server unterstützt jede Pipeline von DeepSparse, einschließlich der Objekterkennung mit YOLOv5, und ermöglicht es Ihnen, Rohbilder an den Endpunkt zu senden und die Bounding Boxes zu empfangen.
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
Ein Beispiel für eine Anfrage, die Python verwendet requests
Paket:
import json
import requests
# list of images for inference (local files on client side)
path = ["basilica.jpg"]
files = [("request", open(img, "rb")) for img in path]
# send request over HTTP to /predict/from_files endpoint
url = "http://0.0.0.0:5543/predict/from_files"
resp = requests.post(url=url, files=files)
# response is returned in JSON
annotations = json.loads(resp.text) # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]
Kommentieren Sie CLI
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
Durch die Ausführung des obigen Befehls wird eine annotation-results
und speichern Sie das Bild mit den Anmerkungen darin.
Benchmarking der Leistung
Wir werden den Durchsatz von DeepSparse mit dem Durchsatz von ONNX Runtime auf YOLOv5s vergleichen, indem wir das Benchmarking-Skript von DeepSparse verwenden.
Die Benchmarks wurden auf einer AWS c6i.8xlarge
Instanz (16 Kerne).
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
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 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 den standardmäßigen dichten YOLOv5s, eine 1,7-fache Leistungssteigerung gegenüber ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 69.5546
DeepSparse Sparse Leistung
Wenn Sparsity auf das Modell angewendet wird, ist der Leistungsgewinn von DeepSparse gegenüber ONNX Runtime sogar noch größer.
Bei Batch 32 erreicht DeepSparse 241 Bilder/Sek. mit den quantisierten YOLOv5s, eine 5,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
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 241.2452
Batch 1 Leistungsvergleich
DeepSparse ist auch in der Lage, einen Geschwindigkeitszuwachs 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
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 48.0921
DeepSparse Sparse Leistung
Bei Batch 1 erreicht DeepSparse 135 Items/Sek. mit einem pruned-quantisierten YOLOv5s, ein 2,8-facher Leistungsgewinn gegenüber ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 134.9468
Seit 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 YOLOv5s, ein 3,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
> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 179.7375
Starten Sie mit DeepSparse
Forschen oder Testen? Die DeepSparse Community ist für Forschung und Tests kostenlos. Starten Sie mit unserer Dokumentation.