Zum Inhalt springen

Neural Magic's DeepSparse

Willkommen bei softwaregest├╝tzter KI.

Dieser Leitfaden erkl├Ąrt, wie du YOLOv5 mit Neural Magic's DeepSparse einsetzt.

DeepSparse ist eine Inferenz-Runtime mit au├čergew├Âhnlicher Leistung auf CPUs. Im Vergleich zur ONNX Runtime bietet DeepSparse zum Beispiel eine 5,8-fache Beschleunigung f├╝r YOLOv5s, und das auf demselben Rechner!

YOLOv5 Geschwindigkeitsverbesserung

Zum ersten Mal k├Ânnen deine Deep Learning-Workloads die Leistungsanforderungen der Produktion erf├╝llen, ohne die Komplexit├Ąt und Kosten von Hardware-Beschleunigern. Kurz gesagt: DeepSparse bietet dir die Leistung von GPUs und die Einfachheit von Software:

  • Flexible Eins├Ątze: Konsistenter Betrieb 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 deines Modells in eine Anwendung und seine ├ťberwachung in der Produktion

Wie erreicht DeepSparse eine Leistung der GPU-Klasse?

DeepSparse macht sich die Sparsamkeit des Modells zunutze, um seine Leistung zu steigern.

Sparsamkeit durch Beschneidung und Quantisierung ist eine weithin untersuchte Technik, die es erm├Âglicht, die Gr├Â├če und den Rechenaufwand f├╝r die Ausf├╝hrung eines Netzes um Gr├Â├čenordnungen zu reduzieren und gleichzeitig eine hohe Genauigkeit zu gew├Ąhrleisten. DeepSparse ist sparsam, 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 Spalten, vertikale Berechnungsstreifen, die in den Cache passen.

YOLO Modellbeschneidung

Sparse-Netzwerke mit komprimierten Berechnungen, die tiefenweise im Cache ausgef├╝hrt werden, erm├Âglichen DeepSparse eine Leistung der GPU-Klasse auf CPUs!

Wie erstelle ich eine Sparse-Version von YOLOv5 , die mit meinen Daten trainiert wurde?

Neural MagicDas Open-Source-Modell-Repository SparseZoo enth├Ąlt vorgesparste Checkpoints f├╝r jedes YOLOv5 Modell. Mit SparseML, das in Ultralytics integriert ist, kannst du einen Sparse-Checkpoint mit einem einzigen CLI Befehl auf deine Daten abstimmen.

Weitere Informationen findest du in der Dokumentation von Neural Magic unter YOLOv5 .

DeepSparse Verwendung

Wir werden ein Beispiel durchgehen, bei dem wir eine Sparse-Version von YOLOv5s mit DeepSparse testen und einsetzen.

DeepSparse installieren

F├╝hre das Folgende aus, um DeepSparse zu installieren. Wir empfehlen dir, eine virtuelle Umgebung mit Python zu verwenden.

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

Sammle eine ONNX Datei

DeepSparse akzeptiert ein Modell im ONNX Format, 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 beschnittenen 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, um dein Modell in eine Anwendung zu integrieren.

Um die folgenden Einsatzbeispiele auszuprobieren, ziehe ein Beispielbild herunter und speichere 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 Runtime herum und bietet eine saubere Schnittstelle, um DeepSparse zu einer Anwendung hinzuzuf├╝gen. Die DeepSparse-Ultralytics Integration umfasst eine sofort einsatzbereite Pipeline die 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 du in der Cloud arbeitest, kann es sein, dass du eine Fehlermeldung erh├Ąltst, dass open-cv nicht gefunden werden kann libGL.so.1. Wenn du das Folgende unter Ubuntu ausf├╝hrst, wird es 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 kannst du ganz einfach einen Modelldienst-Endpunkt mit DeepSparse einrichten. Der Server unterst├╝tzt alle Pipelines von DeepSparse, einschlie├člich der Objekterkennung mit YOLOv5. So kannst du Rohbilder an den Endpunkt senden und die Boundingboxen empfangen.

Schalte den Server mit den beschnittenen YOLOv5s ein:

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 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"]

Kommentiere CLI

Du kannst auch den Befehl annotate verwenden, damit die Engine ein kommentiertes Foto auf der Festplatte speichert. Probiere --source 0 aus, um deinen 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

Die Ausf├╝hrung des obigen Befehls erstellt eine annotation-results Ordner und speichere das kommentierte Bild darin.

kommentiert

Benchmarking 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├Ą├čig 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, funktioniert es auch mit den standardm├Ą├čigen dichten YOLOv5-Modellen gut.

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 angewandt wird, ist der Leistungsgewinn von DeepSparse gegen├╝ber ONNX Runtime 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 Geschwindigkeitsvorteil gegen├╝ber ONNX Runtime f├╝r das latenzabh├Ąngige 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-quantized 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-Befehle verf├╝gen, kann der Durchsatz von DeepSparse weiter gesteigert werden, wenn die Gewichte in 4er-Bl├Âcken geschnitten werden.

Bei Batch 1 erreicht DeepSparse 180 Items/Sek. mit einem 4-Block pruned-quantized YOLOv5s, eine 3,7-fache Leistungssteigerung 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

Mit DeepSparse loslegen

Forschen oder Testen? Die DeepSparse Community ist f├╝r Forschung und Tests kostenlos. Beginne mit unserer Dokumentation.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6)

Kommentare