Zum Inhalt springen

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!

YOLOv5 Verbesserung der Geschwindigkeit

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.

YOLO Modellbeschneidung

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.

pip install "deepsparse[server,yolo,onnxruntime]"

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:

apt-get install libgl1

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.

kommentiert

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.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare