Zum Inhalt springen

YOLOv5 mit Neural Magic's DeepSparse bereitstellen

Willkommen bei softwaregestützter KI.

Dieser Leitfaden erklärt, wie YOLOv5 mit Neural Magic's DeepSparse bereitgestellt wird.

DeepSparse ist eine Inference-Runtime mit außergewöhnlicher Leistung auf CPUs. Im Vergleich zur ONNX Runtime-Baseline bietet DeepSparse beispielsweise eine 5,8-fache Beschleunigung für YOLOv5s, die auf derselben Maschine ausgeführt werden!

YOLOv5 Geschwindigkeitsverbesserung

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

  • Flexible Bereitstellungen: Konsistenter Betrieb in Cloud-, Rechenzentrums- und Edge-Umgebungen mit beliebigen Hardwareanbietern von Intel über AMD bis ARM
  • Unendliche Skalierbarkeit: Vertikal skalieren auf Hunderte von Kernen, mit Standard-Kubernetes oder vollständig abstrahiert mit Serverless
  • Einfache Integration: Saubere APIs zur Integration Ihres Modells in eine Anwendung und zur Überwachung in der Produktion

Wie erreicht DeepSparse GPU-ähnliche Leistung?

DeepSparse nutzt die Modellsparsität, um seine Leistungssteigerung zu erzielen.

Die Sparsifizierung durch Beschneidung und Quantisierung ist eine breit gefächerte Technik, die eine Reduzierung der Größe und des Rechenaufwands, der für die Ausführung eines Netzwerks erforderlich ist, um Größenordnungen ermöglicht und gleichzeitig eine hohe Genauigkeit beibehält. DeepSparse ist sich der Sparsity bewusst, was bedeutet, dass es die auf Null gesetzten Parameter überspringt und die Berechnungsmenge in einem Vorwärtsdurchlauf reduziert. Da die spärliche Berechnung nun speichergebunden ist, führt DeepSparse das Netzwerk tiefenweise aus und unterteilt das Problem in Tensor-Spalten, vertikale Berechnungsstreifen, die in den Cache passen.

YOLO Modellbeschneidung

Sparse Netzwerke mit komprimierter Berechnung, die tiefenweise im Cache ausgeführt werden, ermöglichen es DeepSparse, GPU-ähnliche Leistung auf CPUs zu liefern!

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

Das Open-Source-Modell-Repository von Neural Magic, SparseZoo, enthält vorab ausgedünnte Checkpoints jedes YOLOv5-Modells. Mit SparseML, das in Ultralytics integriert ist, können Sie einen Sparse-Checkpoint mit einem einzigen CLI-Befehl auf Ihre Daten feinabstimmen.

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

DeepSparse Nutzung

Wir werden ein Beispiel für das Benchmarking und die Bereitstellung einer spärlichen Version von YOLOv5s mit DeepSparse durchgehen.

DeepSparse installieren

Führen Sie Folgendes aus, um DeepSparse zu installieren. Wir empfehlen die Verwendung einer virtuellen Umgebung mit Python.

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

Eine ONNX-Datei sammeln

DeepSparse akzeptiert ein Modell im ONNX-Format, das entweder übergeben wird 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 pruned-quantisierten YOLOv5s-Checkpoints, 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

Modell bereitstellen

DeepSparse bietet praktische APIs zur Integration Ihres Modells in eine Anwendung.

Um die unten stehenden Bereitstellungsbeispiele auszuprobieren, laden Sie ein Beispielbild herunter und speichern Sie es unter basilica.jpg mit Folgendem:

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

Python API

Pipelines umschließt die Vorverarbeitung und die Nachverarbeitung der Ausgabe um die Laufzeit herum und bietet eine saubere Schnittstelle zum Hinzufügen von DeepSparse zu einer Anwendung. Die DeepSparse-Ultralytics-Integration beinhaltet eine sofort einsatzbereite Pipeline das Rohbilder akzeptiert und die Begrenzungsrahmen ausgibt.

Erstellen Sie eine Pipeline und führen Sie die Inferenz aus:

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, erhältst du möglicherweise eine Fehlermeldung, dass Open-CV nicht gefunden werden kann libGL.so.1. Die Ausführung des Folgenden unter Ubuntu installiert es:

apt-get install libgl1

HTTP-Server

Der DeepSparse Server läuft auf dem populären Webframework FastAPI und dem Webserver Uvicorn. Mit nur einem CLI-Befehl können Sie einfach einen Model Service Endpoint mit DeepSparse einrichten. Der Server unterstützt jede Pipeline von DeepSparse, einschließlich Objekterkennung mit YOLOv5, sodass Sie Rohbilder an den Endpoint senden und die Bounding Boxes empfangen können.

Starten Sie den Server mit dem pruned-quantisierten YOLOv5s:

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

Eine Beispielanfrage unter Verwendung von Python's 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"]

Annotate CLI

Sie können den Befehl annotate auch verwenden, damit die Engine ein annotiertes Foto auf der Festplatte speichert. Probieren Sie --source 0 um Ihren Live-Webcam-Feed zu annotieren!

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

Durch Ausführen des obigen Befehls wird ein Element erstellt annotation-results Ordner und speichern Sie das annotierte Bild darin.

annotiert

Performance-Benchmarking

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 ausgeführt. c6i.8xlarge Instanz (16 Kerne).

Leistungsvergleich Batch 32

ONNX Runtime Baseline

Bei Batch 32 erreicht ONNX Runtime 42 Bilder/Sek. mit dem Standard 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 Dichte Leistung

Während DeepSparse seine beste Leistung mit optimierten Sparse-Modellen bietet, funktioniert es auch gut mit dem Standard-Dense YOLOv5s.

Bei Batch 32 erreicht DeepSparse 70 Bilder/Sek. mit dem Standard dichten YOLOv5s, einer 1,7-fachen 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, sind die Leistungsvorteile von DeepSparse gegenüber ONNX Runtime noch größer.

Bei Batch 32 erreicht DeepSparse 241 Bilder/Sek. mit dem pruned-quantized YOLOv5s, einer 5,8-fachen 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

Leistungsvergleich Batch 1

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

ONNX Runtime Baseline

Bei Batch 1 erreicht ONNX Runtime 48 Bilder/Sek. mit dem Standard, 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 Elemente/Sek. mit einem pruned-quantized YOLOv5s, einem 2,8-fachen 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 VNNI-Befehle haben, kann der Durchsatz von DeepSparse weiter gesteigert werden, wenn die Gewichte in Blöcken von 4 reduziert werden.

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

Erste Schritte mit DeepSparse

Forschung oder Tests? DeepSparse Community ist für Forschung und Tests kostenlos. Beginnen Sie mit ihrer Dokumentation.

Weitere Informationen zum Bereitstellen von YOLOv5 mit DeepSparse finden Sie in der Neural Magic's DeepSparse Dokumentation und im Ultralytics Blog-Post zur DeepSparse-Integration.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare