YOLO Vision 2026:

YOLOv5'i Neural Magic DeepSparse ile dağıt#

Yazılım tabanlı yapay zekaya hoş geldin.

Bu rehber, YOLOv5'i Neural Magic DeepSparse ile nasıl dağıtacağını açıklıyor.

DeepSparse, CPU'larda olağanüstü performans sunan bir çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime temel çizgisine kıyasla DeepSparse, aynı makinede çalışırken YOLOv5s için 5,8 kat hız artışı sağlar!

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

İlk kez, derin öğrenme iş yüklerin donanım hızlandırıcıların karmaşıklığı ve maliyeti olmadan prodüksiyonun performans taleplerini karşılayabilir. Basitçe söylemek gerekirse, DeepSparse sana GPU'ların performansını ve yazılımın basitliğini sunar:

  • Esnek Dağıtımlar: Intel'den AMD'ye ve ARM'ye kadar herhangi bir donanım sağlayıcısıyla bulut, veri merkezi ve uç noktalarda tutarlı bir şekilde çalıştır
  • Sonsuz Ölçeklenebilirlik: Yüzlerce çekirdeğe dikey olarak, standart Kubernetes ile dışa doğru veya Serverless ile tamamen soyutlanmış şekilde ölçeklendir
  • Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler

DeepSparse GPU Sınıfı Performansa Nasıl Ulaşır?#

DeepSparse, performans hız artışı sağlamak için model seyrekliğinden (sparsity) yararlanır.

Budama ve niceleme yoluyla seyreltme, yüksek doğruluk oranını korurken bir ağı çalıştırmak için gereken boyutta ve hesaplamada katlarca azalma sağlayan geniş çapta incelenmiş bir tekniktir. DeepSparse seyreklik odaklıdır; yani sıfırlanan parametreleri atlayarak bir ileri geçişteki hesaplama miktarını azaltır. Seyrek hesaplama artık bellek kısıtlı olduğundan, DeepSparse ağı derinlemesine çalıştırır ve problemi önbelleğe sıkan dikey hesaplama şeritleri olan Tensor Sütunlarına böler.

DeepSparse tensor columns for sparse neural network inference

Sıkıştırılmış hesaplamaya sahip seyrek ağlar, önbellekte derinlemesine yürütüldüğünde, DeepSparse'ın CPU'larda GPU sınıfı performans sunmasını sağlar!

Verilerimle Eğitilmiş YOLOv5'in Seyrek Versiyonunu Nasıl Oluşturabilirim?#

Neural Magic'in açık kaynaklı model deposu SparseZoo, her bir YOLOv5 modelinin önceden seyreltilmiş kontrol noktalarını içerir. Ultralytics ile entegre olan SparseML kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerin üzerinde ince ayar yapabilirsin.

Daha fazla detay için Neural Magic'in YOLOv5 dokümantasyonuna göz at.

DeepSparse Kullanımı#

DeepSparse ile YOLOv5s'in seyrek bir versiyonunun kıyaslama ve dağıtım sürecini adım adım inceleyeceğiz.

DeepSparse'ı Kur#

DeepSparse'ı kurmak için aşağıdakini çalıştır. Python ile bir sanal ortam kullanmanı öneririz.

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

Bir ONNX Dosyası Edin#

DeepSparse, modeli ONNX formatında kabul eder ve şu şekilde iletilir:

  • SparseZoo içindeki bir ONNX dosyasını tanımlayan bir SparseZoo saplaması
  • Dosya sistemindeki bir ONNX modeline giden yerel bir yol

Aşağıdaki örnekler, aşağıdaki SparseZoo saplamalarıyla tanımlanan standart yoğun ve budanmış-niceleme yapılmış YOLOv5s kontrol noktalarını kullanır:

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

Bir Model Dağıt#

DeepSparse, modelini bir uygulamaya entegre etmek için kullanışlı API'ler sunar.

Aşağıdaki dağıtım örneklerini denemek için örnek bir resmi indir ve aşağıdakileri kullanarak basilica.jpg olarak kaydet:

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

Python API#

Pipelines, çalışma zamanının etrafına ön işleme ve çıktı son işleme adımlarını sararak bir uygulamaya DeepSparse eklemek için temiz bir arayüz sağlar. DeepSparse-Ultralytics entegrasyonu, ham görüntüleri kabul eden ve sınırlayıcı kutuları çıktı veren kullanıma hazır bir Pipeline içerir.

Bir Pipeline oluştur ve çıkarım çalıştır:

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)

Bulutta çalıştırıyorsan, OpenCV'nin libGL.so.1 bulamadığına dair bir hata alabilirsin. Eksik kütüphaneyi yükleyebilirsin:

apt-get install libgl1

Veya GUI bağımlılıklarından tamamen kaçınan başsız (headless) Ultralytics paketini kullanabilirsin:

pip install ultralytics-opencv-headless

HTTP Sunucusu#

DeepSparse Server, popüler FastAPI web çatısı ve Uvicorn web sunucusu üzerinde çalışır. Yalnızca tek bir CLI komutuyla DeepSparse kullanarak kolayca bir model servis uç noktası kurabilirsin. Sunucu, YOLOv5 ile nesne algılama dahil olmak üzere DeepSparse'tan herhangi bir Pipeline'ı destekler; böylece uç noktaya ham görüntüler gönderip sınırlayıcı kutuları alabilirsin.

Sunucuyu budanmış-niceleme yapılmış YOLOv5s ile çalıştır:

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

Python'ın requests paketini kullanan örnek bir istek:

import json
from contextlib import ExitStack

import requests

# list of images for inference (local files on client side)
path = ["basilica.jpg"]

# send request over HTTP to /predict/from_files endpoint
url = "http://0.0.0.0:5543/predict/from_files"
with ExitStack() as stack:
    files = [("request", stack.enter_context(open(img, "rb"))) for img in path]
    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"]

CLI ile Açıklama Ekle (Annotate CLI)#

Motorun diske açıklama eklenmiş bir foto kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kamerası yayınına açıklama eklemek için --source 0 dene!

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

Yukarıdaki komutu çalıştırmak bir annotation-results klasörü oluşturacak ve açıklama eklenmiş resmi içine kaydedecektir.

YOLOv5 detection results with bounding boxes

Performans Kıyaslaması#

DeepSparse'ın kıyaslama komut dosyasını kullanarak DeepSparse'ın YOLOv5s üzerindeki verimliliğini (throughput) ONNX Runtime'ın verimliliği ile karşılaştıracağız.

Kıyaslama testleri bir AWS c6i.8xlarge örneğinde (16 çekirdek) çalıştırıldı.

32'li Grup (Batch 32) Performans Karşılaştırması#

ONNX Runtime Temel Çizgisi#

32'li grupta ONNX Runtime, standart yoğun YOLOv5s ile saniyede 42 görüntüye ulaşır:

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 Yoğun Performansı#

DeepSparse en iyi performansını optimize edilmiş seyrek modellerle sunsa da, standart yoğun YOLOv5s ile de iyi performans gösterir.

32'li grupta DeepSparse, standart yoğun YOLOv5s ile saniyede 70 görüntüye ulaşır, bu ORT'ye göre 1,7 kat performans iyileştirmesidir!

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 Seyrek Performansı#

Modele seyreklik uygulandığında, DeepSparse'ın ONNX Runtime üzerindeki performans kazanımları daha da güçlüdür.

32'li grupta DeepSparse, budanmış-niceleme yapılmış YOLOv5s ile saniyede 241 görüntüye ulaşır, bu ORT'ye göre 5,8 kat performans iyileştirmesidir!

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

1'li Grup (Batch 1) Performans Karşılaştırması#

DeepSparse, gecikmeye duyarlı, 1'li grup senaryosu için de ONNX Runtime'a göre hız artışı sağlayabilir.

ONNX Runtime Temel Çizgisi#

1'li grupta ONNX Runtime, standart yoğun YOLOv5s ile saniyede 48 görüntüye ulaşır.

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 Seyrek Performansı#

1'li grupta DeepSparse, budanmış-niceleme yapılmış bir YOLOv5s ile saniyede 135 öğeye ulaşır, ONNX Runtime'a göre 2,8 kat performans kazancı!

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

c6i.8xlarge örneklerinde VNNI yönergeleri bulunduğundan, ağırlıklar 4'lü bloklar halinde budanırsa DeepSparse'ın aktarım hızı daha da artırılabilir.

1'li grupta DeepSparse, 4 blok budanmış-niceleme yapılmış YOLOv5s ile saniyede 180 öğeye ulaşır, bu ONNX Runtime'a göre 3,7 kat performans kazancıdır!

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

DeepSparse ile Başla#

Araştırma veya Test mi? DeepSparse Community araştırma ve test için ücretsizdir. Dokümantasyonlarını inceleyerek başlayabilirsin.

YOLOv5'i DeepSparse ile dağıtma hakkında daha fazla bilgi için Neural Magic'in DeepSparse dokümantasyonuna ve DeepSparse entegrasyonu hakkındaki Ultralytics blog yazısına göz at.

Katkıda Bulunanlar

Yorumlar